摘要:意味著字符串必須以結束。匹配不在方括號內的任意字符中轉義字符使用倒斜杠。你需要輸入轉義字符,才能打印出一個倒斜杠。但是,通過在字符串的第一個引號之前加上,可以將該字符串標記為原始字符串,它不包括轉義字符。
每個英語學渣(好吧,其實這個說的就是學渣本渣了♀)都有這樣一個夢想: 能夠一邊輕松愉快地看著美劇,一邊自己的英語聽力水平還能蹭蹭地往上漲 。知乎上也有很多人分享了自己通過美劇練習聽力的方法,比如說 只開英文字幕 或者 干脆就不要字幕 。但是這兩個方法都有自己的缺點,只開英文字幕的方法雖然說避免了下意識只看中文,但是卻造成了只看字幕不聽讀音,從而練習了閱讀忽略了聽力;不開字幕的方法確實做到了強迫自己必須認真聽,可是對于很多人來說,美劇中充滿了大量的陌生詞匯,比如說:
這句話中的 betrayal 是背叛的名詞形式,可能很多人就不認識,或者說認識但是卻沒聽過他的正確發音。這樣一來,對這句話的理解就會出現障礙。美劇中還有很多類似情況,用這樣的聽力材料顯然是不適合的。為了應對這種情況,我有了個想法:將字幕中的詞匯拆分,并進行詞頻的檢測, 如果詞頻在 4000(可以根據自己的情況進行調整)以內,則將單詞刪除,如果詞頻在 4000 以外,則多帶帶標注出該詞的中文 ,效果如下:
這樣一來,這句話對于我來說就沒有任何詞匯上的障礙,假如一遍聽不懂,我就可以放心大膽的再聽一遍而不必擔心是由于詞匯的問題造成的理解障礙。
下面介紹程序的大體思路:
首先觀察字幕文件,選擇后綴名為 srt 的字幕文件用記事本打開如下(其他類型的字幕文件用記事本打開以后格式非常復雜,此處不討論):
觀察文本特點,撰寫相應的 正則表達式 。
雖然在 Python 中使用正則表達式有幾個步驟,但每一步都相當簡單。
用import re導入正則表達式模塊。
用re.compile()函數創建一個Regex對象(記得使用原始字符串)。
向Regex對象的search()方法傳入想查找的字符串。它返回一個Match對象。
調用Match對象的group()方法,返回實際匹配文本的字符串。
常用的匹配規則:
?匹配零次或一次前面的分組。
*匹配零次或多次前面的分組。
+匹配一次或多次前面的分組。
{n}匹配 n 次前面的分組。
{n,}匹配 n 次或更多前面的分組。
{,m}匹配零次到 m 次前面的分組。
{n,m}匹配至少 n 次、至多 m 次前面的分組。
{n,m}?或*?或+?對前面的分組進行非貪心匹配。
^spam意味著字符串必須以 spam 開始。
spam$意味著字符串必須以 spam 結束。
.匹配所有字符,換行符除外。
d、w和s分別匹配數字、單詞和空格。
D、W和S分別匹配出數字、單詞和空格之外的所有字符。
[abc]匹配方括號內的任意字符(諸如 a、b 或 c)。
[^abc]匹配不在方括號內的任意字符
Python中轉義字符使用倒斜杠()。字符串" "表示一個換行字符,而不是倒斜杠加上一個小寫的n。你需要輸入轉義字符,才能打印出一個倒斜杠。所以" "表示一個倒斜杠加上一個小寫的 n。但是,通過在字符串的第一個引號之前加上r,可以將該字符串標記為原始字符串,它不包括轉義字符。輸入r"ffffd-ffffd-ffffdd",比輸入"ffffd-ffffd-ffffdd"要容易得多。
由上述相應規則結合文本特點得到:
#空行、行數標號正則表達式 rgx_none_and_num = re.compile(r"d{1,2} ") #時間正則表達式 rgx_time = re.compile(r"dd:dd:dd,ffffd --> dd:dd:dd,ffffd ")
之后,因為要查詢詞頻,我在事先已經準備好了詞頻表:
要處理表格,需要用到 openpyxl 模塊,下面是從電子表格文件中讀取單元格涉及的所有函數、方法和數據類型。
導入openpyxl模塊。
調用openpyxl.load_workbook()函數。
取得Workbook對象。
調用get_active_sheet()或get_sheet_by_name()工作簿方法。
取得Worksheet對象。
使用索引或工作表的cell()方法,帶上row和column關鍵字參數。
取得Cell對象。
讀取Cell對象的value屬性。
由上述結合表格內容,建立詞庫字典:
#詞頻在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") #空行、行數標號正則表達式 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: #如果為空行,行數標號,則不動 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) #關閉文件 text.close() new_file.close()
因為我也是一個 python 初學者,因此在實現這個想法的過程中也遇到了很多問題,最后實現的方法可能也顯得很笨拙,但是最后實現了還是很開心的,哈哈哈。
----------
本文是我們編程教室新春征稿活動的一篇投稿,來自作者 @ 司夜 。他和我們很多讀者一樣,學習 python 的時間并不長,但已經把 python 應用到自己的日常學習生活中,并整理成文投稿給我們,這很值得肯定。 在實踐中應用 和 向他人講解 都是非常好的學習方式。不用在意自己寫的代碼還不夠完善, Done is better than perfect!
我們編程教室會持續向所有人開放,如果有投稿或參與志愿者的意向,歡迎隨時在公眾號里給我們留言。
另外,關于編程與英語的結合,我們之前也有過不少文章,感興趣的可以閱讀:
Crossin:我們用程序整理出了一份Python英語高頻詞匯表,拿走不謝!
分享一個強大的英漢詞典開源數據庫
英語 vs 編程
【每周一坑】單詞本 (此系列可在公眾號“ 每周一坑 ”欄目中查看)
════
其他文章及回答:
學編程:如何自學Python | 新手引導 | 一圖學Python
開發案例:智能防擋彈幕 | 紅包提醒 | 流浪地球
歡迎搜索及關注: Crossin的編程教室
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43313.html
摘要:能不能省掉這些煩瑣的步驟,讓開發人員自己完成呢現在好了,你可以用和把聊天機器人接入微信工具資源掘金今晚看了個電影,回得有點遲。 小花貓-網頁聊天機器人 - 前端 - 掘金 基于圖靈機器人API的網頁聊天機器人,輸入二維碼+你要說的話有驚喜哦~~~(菜單中的功能尚未開發完成,玩玩聊天功能就好了~)代碼開源在https://github.com/ColorfulCa... 了~... (英...
摘要:今天主要說一下個人情況和學習路徑規劃。個人情況作為浙江新高考最后一屆小白鼠,經歷了許許多多手動和諧的事情,但是七選三有技術是唯一好的一件事情,讓我有了一點編程的基礎。 前言 Hello World!這是我思否的第一篇技術博客(不知道算不算),剛剛經歷了高考,有個10+分的滑鐵盧,現坐標浙江杭州,被西南某末流211機械專業錄取。雖然被苦x的機械錄取,但還是對計算機有著幻想。以后想通...
摘要:今天主要說一下個人情況和學習路徑規劃。個人情況作為浙江新高考最后一屆小白鼠,經歷了許許多多手動和諧的事情,但是七選三有技術是唯一好的一件事情,讓我有了一點編程的基礎。 前言 Hello World!這是我思否的第一篇技術博客(不知道算不算),剛剛經歷了高考,有個10+分的滑鐵盧,現坐標浙江杭州,被西南某末流211機械專業錄取。雖然被苦x的機械錄取,但還是對計算機有著幻想。以后想通...
閱讀 1184·2021-10-11 10:59
閱讀 1966·2021-09-29 09:44
閱讀 857·2021-09-01 10:32
閱讀 1431·2019-08-30 14:21
閱讀 1875·2019-08-29 15:39
閱讀 2982·2019-08-29 13:45
閱讀 3539·2019-08-29 13:27
閱讀 2012·2019-08-29 12:27