成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

為了邊看美劇邊學英語,我寫了個字幕處理腳本

xbynet / 2033人閱讀

摘要:意味著字符串必須以結(jié)束。匹配不在方括號內(nèi)的任意字符中轉(zhuǎn)義字符使用倒斜杠。你需要輸入轉(zhuǎn)義字符,才能打印出一個倒斜杠。但是,通過在字符串的第一個引號之前加上,可以將該字符串標記為原始字符串,它不包括轉(zhuǎn)義字符。

每個英語學渣(好吧,其實這個說的就是學渣本渣了♀)都有這樣一個夢想: 能夠一邊輕松愉快地看著美劇,一邊自己的英語聽力水平還能蹭蹭地往上漲 。知乎上也有很多人分享了自己通過美劇練習聽力的方法,比如說 只開英文字幕 或者 干脆就不要字幕 。但是這兩個方法都有自己的缺點,只開英文字幕的方法雖然說避免了下意識只看中文,但是卻造成了只看字幕不聽讀音,從而練習了閱讀忽略了聽力;不開字幕的方法確實做到了強迫自己必須認真聽,可是對于很多人來說,美劇中充滿了大量的陌生詞匯,比如說:

這句話中的 betrayal 是背叛的名詞形式,可能很多人就不認識,或者說認識但是卻沒聽過他的正確發(fā)音。這樣一來,對這句話的理解就會出現(xiàn)障礙。美劇中還有很多類似情況,用這樣的聽力材料顯然是不適合的。為了應對這種情況,我有了個想法:將字幕中的詞匯拆分,并進行詞頻的檢測, 如果詞頻在 4000(可以根據(jù)自己的情況進行調(diào)整)以內(nèi),則將單詞刪除,如果詞頻在 4000 以外,則多帶帶標注出該詞的中文 ,效果如下:

這樣一來,這句話對于我來說就沒有任何詞匯上的障礙,假如一遍聽不懂,我就可以放心大膽的再聽一遍而不必擔心是由于詞匯的問題造成的理解障礙。

下面介紹程序的大體思路:

首先觀察字幕文件,選擇后綴名為 srt 的字幕文件用記事本打開如下(其他類型的字幕文件用記事本打開以后格式非常復雜,此處不討論):

觀察文本特點,撰寫相應的 正則表達式 。

雖然在 Python 中使用正則表達式有幾個步驟,但每一步都相當簡單。

import re導入正則表達式模塊。

re.compile()函數(shù)創(chuàng)建一個Regex對象(記得使用原始字符串)。

Regex對象的search()方法傳入想查找的字符串。它返回一個Match對象。

調(diào)用Match對象的group()方法,返回實際匹配文本的字符串。

常用的匹配規(guī)則:

?匹配零次或一次前面的分組。

*匹配零次或多次前面的分組。

+匹配一次或多次前面的分組。

{n}匹配 n 次前面的分組。

{n,}匹配 n 次或更多前面的分組。

{,m}匹配零次到 m 次前面的分組。

{n,m}匹配至少 n 次、至多 m 次前面的分組。

{n,m}?*?+?對前面的分組進行非貪心匹配。

^spam意味著字符串必須以 spam 開始。

spam$意味著字符串必須以 spam 結(jié)束。

.匹配所有字符,換行符除外。

d、ws分別匹配數(shù)字、單詞和空格。

D、WS分別匹配出數(shù)字、單詞和空格之外的所有字符。

[abc]匹配方括號內(nèi)的任意字符(諸如 a、b 或 c)。

[^abc]匹配不在方括號內(nèi)的任意字符

Python中轉(zhuǎn)義字符使用倒斜杠()。字符串" "表示一個換行字符,而不是倒斜杠加上一個小寫的n。你需要輸入轉(zhuǎn)義字符,才能打印出一個倒斜杠。所以" "表示一個倒斜杠加上一個小寫的 n。但是,通過在字符串的第一個引號之前加上r,可以將該字符串標記為原始字符串,它不包括轉(zhuǎn)義字符。輸入r"ffffd-ffffd-ffffdd",比輸入"ffffd-ffffd-ffffdd"要容易得多。

由上述相應規(guī)則結(jié)合文本特點得到:


#空行、行數(shù)標號正則表達式
rgx_none_and_num = re.compile(r"d{1,2}
")
#時間正則表達式
rgx_time = re.compile(r"dd:dd:dd,ffffd --> dd:dd:dd,ffffd
")

之后,因為要查詢詞頻,我在事先已經(jīng)準備好了詞頻表:

要處理表格,需要用到 openpyxl 模塊,下面是從電子表格文件中讀取單元格涉及的所有函數(shù)、方法和數(shù)據(jù)類型。

導入openpyxl模塊。

調(diào)用openpyxl.load_workbook()函數(shù)。

取得Workbook對象。

調(diào)用get_active_sheet()get_sheet_by_name()工作簿方法。

取得Worksheet對象。

使用索引或工作表的cell()方法,帶上rowcolumn關(guān)鍵字參數(shù)。

取得Cell對象。

讀取Cell對象的value屬性。

由上述結(jié)合表格內(nèi)容,建立詞庫字典:


#詞頻在4000以后的字典:
wordlist4001 = {}
#事先將名為“1-20000.xlsx”的詞頻表放在當前工作目錄
excel_content = openpyxl.load_workbook("1-20000.xlsx") 
sheet = excel_content["Sheet1"]
for row in range(4000,20201):
    wordlist4001[sheet.cell(row,1).value] = sheet.cell(row,2).value
#詞頻在4000以前的字典:
wordlist4000 = {}
for row in range(1,4001):
    wordlist4000[sheet.cell(row,1).value] = sheet.cell(row,2).value

所有準備工作完成后,開始讀取字幕文件和處理字幕文件,最后新建一個處理過后的字幕文件。完整程序如下:


# -*- coding:utf-8 -*-

#導入模塊
import re,openpyxl

#讀入字幕文件
text=open("The.Big.Bang.Theory.s05e05.720p.x264.chs&eng.srt","r")

#空行、行數(shù)標號正則表達式
rgx_none_and_num = re.compile(r"d{1,2}
")

#時間正則表達式
rgx_time = re.compile(r"dd:dd:dd,ffffd --> dd:dd:dd,ffffd
")

#處理字幕文件
first_step = text.readlines()

#新建一個字幕文件
new_file = open("C:UsersSYQDesktop處理版.srt","w")

#建立4000后的字典
wordlist4001 = {}
excel_content = openpyxl.load_workbook("1-20000.xlsx")
sheet = excel_content["Sheet1"]
for row in range(4000,20201):
    wordlist4001[sheet.cell(row,1).value] = sheet.cell(row,2).value
#建立4000前的字典
wordlist4000 = {}
for row in range(1,4001):
    wordlist4000[sheet.cell(row,1).value] = sheet.cell(row,2).value

#挑選出文字行進行處理
for line in first_step:

    #如果為空行,行數(shù)標號,則不動
    if rgx_none_and_num.search(line):
        new_file.write(line)

    #如果為時間行則不動
    elif rgx_time.search(line):
        new_file.write(line)

    #如果為字幕行,則處理
    else:
        words = line.lower().split()
        for word in words:

            #如果單詞不在字典中,則跳過
            if word in wordlist4000:
                pass
            #如果單詞在字典中,則添加翻譯
            elif word not in wordlist4001:
                pass
            else:
                new_word = word + ":" + wordlist4001[word] +"
"
                new_file.write(new_word)

#關(guān)閉文件
text.close()
new_file.close()

因為我也是一個 python 初學者,因此在實現(xiàn)這個想法的過程中也遇到了很多問題,最后實現(xiàn)的方法可能也顯得很笨拙,但是最后實現(xiàn)了還是很開心的,哈哈哈。

----------

本文是我們編程教室新春征稿活動的一篇投稿,來自作者 @ 司夜 。他和我們很多讀者一樣,學習 python 的時間并不長,但已經(jīng)把 python 應用到自己的日常學習生活中,并整理成文投稿給我們,這很值得肯定。 在實踐中應用向他人講解 都是非常好的學習方式。不用在意自己寫的代碼還不夠完善, Done is better than perfect!  
我們編程教室會持續(xù)向所有人開放,如果有投稿或參與志愿者的意向,歡迎隨時在公眾號里給我們留言。
另外,關(guān)于編程與英語的結(jié)合,我們之前也有過不少文章,感興趣的可以閱讀:
Crossin:我們用程序整理出了一份Python英語高頻詞匯表,拿走不謝!
分享一個強大的英漢詞典開源數(shù)據(jù)庫
英語 vs 編程
【每周一坑】單詞本 (此系列可在公眾號“ 每周一坑 ”欄目中查看)

════

其他文章及回答:

學編程:如何自學Python | 新手引導 | 一圖學Python

開發(fā)案例:智能防擋彈幕 | 紅包提醒 | 流浪地球

歡迎搜索及關(guān)注: Crossin的編程教室

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43313.html

相關(guān)文章

  • 來 DIY 個機器人 - 收藏集 - 掘金

    摘要:能不能省掉這些煩瑣的步驟,讓開發(fā)人員自己完成呢現(xiàn)在好了,你可以用和把聊天機器人接入微信工具資源掘金今晚看了個電影,回得有點遲。 小花貓-網(wǎng)頁聊天機器人 - 前端 - 掘金 基于圖靈機器人API的網(wǎng)頁聊天機器人,輸入二維碼+你要說的話有驚喜哦~~~(菜單中的功能尚未開發(fā)完成,玩玩聊天功能就好了~)代碼開源在https://github.com/ColorfulCa... 了~... (英...

    mrli2016 評論0 收藏0
  • Hello World!一個計算機準大一小白的學習路徑規(guī)劃

    摘要:今天主要說一下個人情況和學習路徑規(guī)劃。個人情況作為浙江新高考最后一屆小白鼠,經(jīng)歷了許許多多手動和諧的事情,但是七選三有技術(shù)是唯一好的一件事情,讓我有了一點編程的基礎(chǔ)。 前言 Hello World!這是我思否的第一篇技術(shù)博客(不知道算不算),剛剛經(jīng)歷了高考,有個10+分的滑鐵盧,現(xiàn)坐標浙江杭州,被西南某末流211機械專業(yè)錄取。雖然被苦x的機械錄取,但還是對計算機有著幻想。以后想通...

    Fourierr 評論0 收藏0
  • Hello World!一個計算機準大一小白的學習路徑規(guī)劃

    摘要:今天主要說一下個人情況和學習路徑規(guī)劃。個人情況作為浙江新高考最后一屆小白鼠,經(jīng)歷了許許多多手動和諧的事情,但是七選三有技術(shù)是唯一好的一件事情,讓我有了一點編程的基礎(chǔ)。 前言 Hello World!這是我思否的第一篇技術(shù)博客(不知道算不算),剛剛經(jīng)歷了高考,有個10+分的滑鐵盧,現(xiàn)坐標浙江杭州,被西南某末流211機械專業(yè)錄取。雖然被苦x的機械錄取,但還是對計算機有著幻想。以后想通...

    X1nFLY 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<