1. 程式人生 > >使用jieba分詞提取關鍵詞

使用jieba分詞提取關鍵詞

一、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))