使用jieba分詞提取關鍵詞
阿新 • • 發佈:2018-12-12
一、NLP介紹
概念
Natural Language Processing/Understanding,自然語言處理/理解
日常對話、辦公寫作、上網瀏覽
希望機器能像人一樣去理解,以人類自然語言為載體的文字所包含的資訊,並完成一些特定任務
內容
中文分詞、詞性標註、命名實體識別、關係抽取、關鍵詞提取、資訊抽取、依存分析、詞嵌入……
應用
篇章理解、文字摘要、情感分析、知識圖譜、文字翻譯、問答系統、聊天機器人……
二、jieba中文分詞
jieba中文分詞 https://github.com/fxsjy/jieba 即使效果不是最好的,但是,完全開源、簡單易用 安裝 pip install jieba 中國特色社會主義是我們黨領導的偉大事業,全面推進黨的建設新的偉大工程,是這一偉大事業取得勝利的關鍵所在。黨堅強有力,事業才能興旺發達,國家才能繁榮穩定,人民才能幸福安康。黨的十八大以來,我們黨堅持黨要管黨、從嚴治黨,凝心聚力、直擊積弊、扶正祛邪,黨的建設開創新局面,黨風政風呈現新氣象。習近平總書記圍繞從嚴管黨治黨提出一系列新的重要思想,為全面推進黨的建設新的偉大工程進一步指明瞭方向。 中文分詞 基於規則、基於統計 jieba:基於字首詞典進行詞圖掃描,構成全部可能分詞結果的有向無環圖,動態規劃查詢最大概率路徑 -------------------------------------------------------------------------------- import jieba seg_list = jieba.cut("我來到北京清華大學", cut_all=True) print("Full Mode: " + "/ ".join(seg_list)) # 全模式 seg_list = jieba.cut("我來到北京清華大學", cut_all=False) print("Default Mode: " + "/ ".join(seg_list)) # 精確模式 seg_list = jieba.cut("他來到了網易杭研大廈") # 預設是精確模式 print(", ".join(seg_list)) seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造") # 搜尋引擎模式 print(", ".join(seg_list)) -------------------------------------------------------------------------------- 關鍵詞提取 -------------------------------------------------------------------------------- import jieba.analyse -------------------------------------------------------------------------------- 基於TF-IDF:jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=()) 基於TextRank:jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) 詞性標註 -------------------------------------------------------------------------------- import jieba.posseg as pseg words = pseg.cut("我愛北京天安門") for word, flag in words: print('%s, %s' % (word, flag)) -------------------------------------------------------------------------------- 詞性列表 -------------------------------------------------------------------------------- 1. 名詞 (1個一類,7個二類,5個三類) n 名詞 nr 人名 nr1 漢語姓氏 nr2 漢語名字 nrj 日語人名 nrf 音譯人名 ns 地名 nsf 音譯地名 nt 機構團體名 nz 其它專名 nl 名詞性慣用語 ng 名詞性語素 2. 時間詞(1個一類,1個二類) t 時間詞 tg 時間詞性語素 3. 處所詞(1個一類) s 處所詞 (家中、門外、境內、西方……) 4. 方位詞(1個一類) f 方位詞 5. 動詞(1個一類,9個二類) v 動詞 vd 副動詞 vn 名動詞 vshi 動詞“是” vyou 動詞“有” vf 趨向動詞 vx 形式動詞 vi 不及物動詞(內動詞) vl 動詞性慣用語 vg 動詞性語素 6. 形容詞(1個一類,4個二類) a 形容詞 ad 副形詞 an 名形詞 ag 形容詞性語素 al 形容詞性慣用語 7. 區別詞(1個一類,2個二類) b 區別詞 (主要、整個、所有……) bl 區別詞性慣用語 8. 狀態詞(1個一類) z 狀態詞 9. 代詞(1個一類,4個二類,6個三類) r 代詞 rr 人稱代詞 rz 指示代詞 rzt 時間指示代詞 rzs 處所指示代詞 rzv 謂詞性指示代詞 ry 疑問代詞 ryt 時間疑問代詞 rys 處所疑問代詞 ryv 謂詞性疑問代詞 rg 代詞性語素 10. 數詞(1個一類,1個二類) m 數詞 mq 數量詞 11. 量詞(1個一類,2個二類) q 量詞 qv 動量詞 qt 時量詞 12. 副詞(1個一類) d 副詞 13. 介詞(1個一類,2個二類) p 介詞 pba 介詞“把” pbei 介詞“被” 14. 連詞(1個一類,1個二類) c 連詞 cc 並列連詞 15. 助詞(1個一類,15個二類) u 助詞 uzhe 著 ule 了 嘍 uguo 過 ude1 的 底 ude2 地 ude3 得 usuo 所 udeng 等 等等 云云 uyy 一樣 一般 似的 般 udh 的話 uls 來講 來說 而言 說來 uzhi 之 ulian 連 (“連小學生都會”) 16. 嘆詞(1個一類) e 嘆詞 17. 語氣詞(1個一類) y 語氣詞(delete yg) 18. 擬聲詞(1個一類) o 擬聲詞 19. 字首(1個一類) h 字首 20. 字尾(1個一類) k 字尾 21. 字串(1個一類,2個二類) x 字串 xx 非語素字 xu 網址URL 22. 標點符號(1個一類,16個二類) w 標點符號 wkz 左括號,全形:( 〔 [ { 《 【 〖 〈 半形:( [ { < wky 右括號,全形:) 〕 ] } 》 】 〗 〉 半形: ) ] { > wyz 左引號,全形:“ ‘ 『 wyy 右引號,全形:” ’ 』 wj 句號,全形:。 ww 問號,全形:? 半形:? wt 歎號,全形:! 半形:! wd 逗號,全形:, 半形:, wf 分號,全形:; 半形: ; wn 頓號,全形:、 wm 冒號,全形:: 半形: : ws 省略號,全形:…… … wp 破折號,全形:—— -- ——- 半形:--- ---- wb 百分號千分號,全形:% ‰ 半形:% wh 單位符號,全形:¥ $ £ ° ℃ 半形:$ --------------------------------------------------------------------------------
3、原始碼
#!/usr/bin/env python # coding:utf8 import sys reload(sys) sys.setdefaultencoding("utf8") # 中文分詞 import jieba seg_list = jieba.cut("我來到北京清華大學", cut_all=True) # join是split的逆操作 # 即使用一個拼接符將一個列表拼成字串 print("/ ".join(seg_list)) # 全模式 seg_list = jieba.cut("我來到北京清華大學", cut_all=False) print("/ ".join(seg_list)) # 精確模式 seg_list = jieba.cut("他來到了網易杭研大廈") # 預設是精確模式 print("/ ".join(seg_list)) seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造") # 搜尋引擎模式 print("/ ".join(seg_list)) # 關鍵詞提取 import jieba.analyse # 字串前面加u表示使用unicode編碼 content = u'中國特色社會主義是我們黨領導的偉大事業,全面推進黨的建設新的偉大工程,是這一偉大事業取得勝利的關鍵所在。黨堅強有力,事業才能興旺發達,國家才能繁榮穩定,人民才能幸福安康。黨的十八大以來,我們黨堅持黨要管黨、從嚴治黨,凝心聚力、直擊積弊、扶正祛邪,黨的建設開創新局面,黨風政風呈現新氣象。習近平總書記圍繞從嚴管黨治黨提出一系列新的重要思想,為全面推進黨的建設新的偉大工程進一步指明瞭方向。' # 第一個引數:待提取關鍵詞的文字 # 第二個引數:返回關鍵詞的數量,重要性從高到低排序 # 第三個引數:是否同時返回每個關鍵詞的權重 # 第四個引數:詞性過濾,為空表示不過濾,若提供則僅返回符合詞性要求的關鍵詞 keywords = jieba.analyse.extract_tags(content, topK=20, withWeight=True, allowPOS=()) # 訪問提取結果 for item in keywords: # 分別為關鍵詞和相應的權重 print item[0], item[1] # 同樣是四個引數,但allowPOS預設為('ns', 'n', 'vn', 'v') # 即僅提取地名、名詞、動名詞、動詞 keywords = jieba.analyse.textrank(content, topK=20, withWeight=True, allowPOS=('ns', 'n', 'vn', 'v')) # 訪問提取結果 for item in keywords: # 分別為關鍵詞和相應的權重 print item[0], item[1] # 詞性標註 # 載入jieba.posseg並取個別名,方便呼叫 import jieba.posseg as pseg words = pseg.cut("我愛北京天安門") for word, flag in words: # 格式化模版並傳入引數 print('%s, %s' % (word, flag))