达叔926词汇pdf单词提取、保存
需求:將pdf中的單詞,通過正則表達式提取,保存到excel。將excel文件另存為.csv格式,導入到anki制成卡牌學習。
注:因為本人是業余,水平有限,如果講解有錯誤,歡迎指正。另外,本文使用的926詞匯pdf資料請自行準備。
目錄
全部代碼
代碼效果?
提前準備
pdf文件與內容導入
pdf文件導入
pdf內容導入
正則匹配|內容篩選
將結果存入Excel
全部代碼
import pdfplumber import re import openpyxlad=[] k=[] for l in range(1,19):adress=f"D:/BaiduNetdiskDownload/李達926逐詞精講-詞匯{l}筆記.pdf"ad.append(adress)pdf = pdfplumber.open(adress)print(f'正在寫入{adress}')for i in range(len(pdf.pages)):page = pdf.pages[i]wk = page.extract_text()k.append(wk) wb = ''.join(k) wb = wb.replace('改變就橙啦橙啦,大學生學習成長平臺'," ") num = re.findall('(\d+).*?\[', wb) text = re.findall('\d+(.*?)\[', wb) chinese = re.findall('](.*?)【真題例句',wb,re.S) #re.S的作用是使匹配包含換行符\n、\t,即空格與換行xs = openpyxl.Workbook() xl = xs.active xl.title = '達叔926' xl['A1']='序號' xl['B1']='英文' xl['C1']='中文|助記' q=2 for a,b,c in zip(num,text,chinese):xl.cell(q,1,a)xl.cell(q,2,b)xl.cell(q,3,c)q+=1 xs.save('達叔926.xlsx')代碼效果
處理的pdf內容:
?處理結果:
提前準備
import pdfplumber #處理pdf的包 import re #正則表達式處理包 import openpyxl #操作excel的包????????使用的軟件(IDE)是Pycharm
? ? ? ? 系統為Windows11
????????pdfplumber的安裝:pip install?pdfplumber
pdf文件與內容導入
pdf文件導入
ad=[] for l in range(1,19):adress=f"D:/BaiduNetdiskDownload/李達926逐詞精講-詞匯{l}筆記.pdf"ad.append(adress)????????代碼中,我使用的了絕對路徑。因為pdf共有18個,所以我需要for循環遍歷,將文件的絕對地址通過append函數壓入一個列表。
pdf內容導入
k = [] pdf = pdfplumber.open(adress) #將導入的pdf打開for i in range(len(pdf.pages)): #獲取pdf總頁數,并遍歷page = pdf.pages[i] #打開pdf對應頁數wk = page.extract_text() #獲取對應頁數的文本內容k.append(wk) #將內容壓入列表 wb = ''.join(k) #將列表的內容遍歷拼接并轉為字符串類型????????將pdf的全部內容壓入一個列表后,通過.join函數將列表遍歷拼接轉為字符串類型,為接下來正則匹配做準備。
????????另外,如果pdf中的內容有圖片或表格,那你就不能單純的使用page.extract_text()。例如,處理pdf表格,需要使用page.extract_table()。其他具體用法請參考其它更專業的博客文章。
正則匹配|內容篩選
wb = wb.replace('改變就橙啦橙啦,大學生學習成長平臺'," ") #將其他無關內容替換成空格 num = re.findall('(\d+).*?\[', wb) #匹配單詞前的序號 text = re.findall('\d+(.*?)\[', wb) #匹配英文單詞 chinese = re.findall('](.*?)【真題例句',wb,re.S) #匹配中文釋譯和助記方法re.S是正則的一種匹配模式,作用是防止匹配的內容中第一個就是換行符(空格、換行)而導致返回空列表。(注:正則表達式中的“.”能匹配任意字符,但換行符除外。當時沒少因為這個知識點吃苦頭)
改:(\d+).*?\[?中的+是防止匹配到空格。*匹配目標出現0次或多次;+匹配目標出現1次或多次。
將結果存入Excel
xs = openpyxl.Workbook() xl = xs.active xl.title = '達叔926' xl['A1']='序號' #第一行、第一列單元格寫入序號,以下作用類似 xl['B1']='英文' xl['C1']='中文|助記' q=2 for a,b,c in zip(num,text,chinese):xl.cell(q,1,a) #通過openpyxl包的cell函數將內容寫入對應的單元格;.cell(行,列,內容)xl.cell(q,2,b)xl.cell(q,3,c)q+=1 xs.save('達叔926.xlsx')????????這里使用的是openpyxl,具體的使用方法請參考相應的文檔。
????????zip函數能同時遍歷三個及以上的列表,并一一對應的形成新列表。注:請保證列表的長度一致,不然會發生一些意外。
????????另,生成的xlsx會保存在你的代碼根目錄下,如果要保存到其他地方,可以使用with方法。
總結
? ? ? ? 其實,代碼寫到這里主體的功能基本實現了,但是還有很大優化空間。例如,將單詞詞性匹配出來,可這對我來說有一定難度,因為pdf里有很多一詞多意和一個單詞既能是名詞又能是動詞的情況。又例如將中文釋義和助記方法分別匹配,等等。最后只要將excel文件另存為csv格式后導入anki(bilibili上有人講解過)即可,那么請看看我的最終成品吧。(雖然細節處理的不好)
2022-11-15 22-03-27_x264
總結
以上是生活随笔為你收集整理的达叔926词汇pdf单词提取、保存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初识Java反序列化
- 下一篇: 什么是L2十档行情API接口