上一次鏈接:中文自然語言處理(NLP)(一)python jieba模塊的初步使用
續上次對於jieba模塊的介紹,這次主要是一些jieba模塊的進一步的應用,以及在這次的項目里面和xlrd模塊結合起來的應用。
1.jieba帶詞性的分詞
jieba的詞性標注posseg:詞性標注也叫此類標注,pos tagging是part-of-speech tagging的縮寫
要使用jieba的這個功能只需要import jieba.posseg as psg(隨便一個名字,這里就叫psg了)
一般情況下帶詞性的分詞格式為:
1 all_words_with_attr=[(x.word,x.flag)for x in psg.cut(read_txt) if x.flag=='n' and x.word not in stop_list]
p.s.read_txt是需要讀取的文本,stop_list是之前添加的停用詞表,這里還對其詞性限制為名詞
下圖為分詞之前的文本,這里是將其整個讀入txt文件了:

下圖是分詞之后得到的詞語(因為全都是名詞所以就不將詞性顯示出來了):

可以看到,經過分詞之后的結果還是比較理想的,這里的停用詞表是下載的哈工大的通用停用詞表,txt文件,單獨讀取為一個list,若分出的詞為名詞並且不在這個list(not in)里面,就將其記錄下來.
2.涉及excel文件的處理 xlrd和xlwt模塊
這次的項目里需要對excel文件進行讀寫操作,所以說需要將excel文件里的數據按要求格式讀取和存儲
這里就用到了python的xlrd(讀)和xlwt(寫)模塊
2.1安裝
xlrd和xlwt模塊的安裝直接在cmd窗口里面pip install xlrd/xlwt即可
2.2使用
import xlrd/xlwt#導入部分
打開excel文件來獲取數據
excel_file=xlrd.open_workbook(dict_path)#根據這個文件打開工作路徑
excel文件當中的數據都是存儲在一張張表(sheet)當中的,所以說需要先獲取一個sheet才能讀取其中的數據
sheet=excel_file.sheet_by_index(0)#打開第一個sheet
這個例子使用了sheet_by_index()方法來獲取sheet,也就是表的編號,從0開始,即參數填寫0則會提取出第一張表(默認名一般為sheet1)
當然,還有其他的方式來獲取表,例如sheet_by_name()方法就是通過表的名字來獲取,sheet()方法也是通過索引序號來獲取的(用法一般為sheet=excel_file.sheet()[0])
上述的三種方法都會返回一個xlrd.sheet.Sheet()對象供用戶使用
這種對象(這里命名為sheet)比較常用到的方法為row(),顧名思義就是獲取sheet當中的一行,這在遍歷表中內容的時候比較有用
1 countRow=sheet.nrows#獲取excel文件的總行數 2 for i in range(1,countRow): 3 listrow=sheet.row(i)#使用for循環獲得每一行的數據 4 math_word=listrow[0].value#獲取第1列(編號為0)的數據 5 jieba.add_word(math_word,tag='n')#將excel中的數學關鍵詞依次添加進去
這個例子是將excel文件當中的sheet1當中的第一列的所有數據讀取出來,再使用jieba模塊的add_word方法添加用戶自定義詞,通過for循環實現即可
3.jieba和xlrd模塊組合使用
這部分內容涉及到我們小組項目的一部分功能,也就是運用這兩個模塊實現一些方法,純粹是自己工作的記錄,沒什么必要看:
3.1從excel文件當中添加自定義詞:
1 def set_additional_dict_excel(dict_path): 2 #設置添加excel詞典的函數,這里的參數應當是一個excel的路徑 3 print('已進入額外詞典添加函數') 4 start_time=time.time() 5 excel_file=xlrd.open_workbook(dict_path)#根據這個文件打開工作路徑 6 sheet=excel_file.sheet_by_index(0)#打開第一個sheet 7 countRow=sheet.nrows#獲取excel文件的總行數 8 for i in range(1,countRow): 9 listrow=sheet.row(i)#使用for循環獲得每一行的數據 10 math_word=listrow[0].value#獲取第1列(編號為0)的數據 11 jieba.add_word(math_word,tag='n')#將excel中的數學關鍵詞依次添加進去 12 end_time=time.time() 13 print('已經將數學詞庫添加進分詞詞庫,數據量為:',countRow,'執行時間為:',(end_time-start_time),'s')
3.2從txt文件當中添加自定義詞\從txt文件當中導入停用詞表:
def set_additional_dict_txt(dict_path): with open(dict_path,'r',encoding='gbk')as f: for x in f.readlines(): words=x.split()#以空格為分隔符分開每一行 for math_word in words: jieba.add_word(math_word,tag='n') f.close() def set_stop_dict_txt(stop_path): #從txt文件導入停用詞表,返回一個列表 stop_dict=[] with open(stop_path,'r',encoding='utf-8')as f: for x in f.readlines(): stop_dict.append(x[:-3]) f.close() return stop_dict
中文自然語言處理(NLP)(三)運用python jieba模塊計算知識點當中關鍵詞的詞頻:https://www.cnblogs.com/aLieb/p/11152109.html
這大概就是第二次的博客了,通過寫博客好像真的可以激發一點寫代碼的熱情和興趣(雖然都是一些基礎簡單的代碼就是了).
