中文自然語言處理(NLP)(二)python jieba模塊的進一步學習和xlrd模塊


  上一次鏈接:中文自然語言處理(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

  這大概就是第二次的博客了,通過寫博客好像真的可以激發一點寫代碼的熱情和興趣(雖然都是一些基礎簡單的代碼就是了).


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM