抽取文檔關鍵詞
抽取文檔關鍵詞用於在一篇文章中獲取其核心內容(描述了什么?),又叫 生成摘要、打標簽、關鍵詞提取等
1:詞頻統計
- 詞在文本中出現的次數(頻次),某種程度上能當做文本的標簽,表示文本內容
- 不是很精准
- 統計前最好先去完成自定義詞典和去停用詞的前期操作
略過自定義詞典、去停用詞 a = '哎,詹姆斯,聽說你超級喜歡玩籃球的!你是嗎?哎,詹姆斯' x = jieba.lcut(a) pd.DataFrame(x) pd.DataFrame(x).groupby(0).size().sort_values(ascending=False) pd.Series(x).value_counts()
案例:分析Python互聯網招聘信息中的需求關鍵字
# 載入文本數據
with open('data/work.txt', 'r', encoding='utf-8') as f:
txt = f.read()
print(txt)
職位描述:
崗位職責:
負責公司互聯網產品的編碼、實施等工作。
任職要求:
1、大專及以上學歷,3年python開發經驗,1年以上大型服務器端開發經驗。
2、有良好的編碼習慣,熟悉git代碼管理工具。
3、熟練在Linux各發行版下進行開發,熟練使用vim、Sublime、eclipse等文本編輯器或IDE工具進行程序開發。
4、至少熟練使用Django、Flask、Web.py、Tornado等Web框架中的一種。
5、熟練運用MySQL、Oracle、Postgresql中的一項或多項進行數據庫開發。
6、熟悉和具有MongoDB、Redis、memecached等NoSQL數據庫開發經驗者優先。
7、熟悉RESTFul風格、Oauth協議、MQTT協議等框架或技術者優先。
8、具有大規模高並發訪問Web應用架構設計和開發經驗者優先。
9、對代碼有追求, 有分享精神者優先。
===========
職能類別:
軟件工程師互聯網軟件開發工程師
關鍵字:python
職位描述:
主要工作職責:
1、基於Linux的應用軟件開發,物聯網應用方向(工業自動化、智能樓宇、遠程監控等);
2、參與需求分析、系統架構設計;
3、根據設計文檔或需求說明完成代碼編寫、調試和維護;
4、協助配合其他人員實現系統在實際環境的可靠運行。
—————
職位要求:
1、扎實的C++基礎,具備OOP編程思想,精通Python語言,熟悉多線程應用開發;
2、有linux應用項目開發經歷(包括服務端、網絡通訊、web等);
3、熟悉數據庫及SQL,有MySQL等關系型數據庫開發經驗
4、良好的團隊合作精神,有責任感;
方式1:使用詞頻方式提取關鍵詞
# 1:自定義詞典
jieba.load_userdict('data/custom.txt') # 應用自定義詞典
# 2:分詞
cut = jieba.lcut(txt)
# 3:去停用詞
# 3.1,載入停用詞表
stopword = []
with open('data/stopword.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
l = line.strip()
if l == '\\n':
l = '\n'
if l == '\\u3000':
l = '\u3000'
stopword.append(l)
stopword
#3.2 去停用詞,第一步,求差集
x = np.array(cut) # 將分好的詞列表轉為數組
y = np.array(stopword) # 將停用詞轉為數組
z = x[~np.in1d(x, y)] # x的元素是否包含於y
# 去掉一個字的詞
k = [i for i in z if len(i) > 1]
# 4:計算詞頻並排序
result = pd.Series(k).value_counts()[:20]
result
# 5: 保存結果
result.to_csv('temp/keyword_fig.csv', header=0)
統計詞頻作為文檔關鍵字的准確性不高,還可使用下面的方式
TF-IDF算法
Text-Rank算法
注:TF-IDF和Text-Rank算法運行都不需要手動去停用詞,可以用內置函數自動去停用詞
使用TF-IDF權重算法提取關鍵詞¶
TF-IDF權重:
詞頻和重要詞的綜合分數(權重)
重要詞:信息量大的詞
一個詞信息量大小的衡量
在本文章出現的次數多,在通用文檔庫出現的次數少,就是重要詞
如:你我他,你好再見 這些詞信息量很小
行業專有名詞,如Python/MySQL,信息量就很大
- 首先,應用自定義詞典
- 然后,去除停用詞,系統自帶,給抽取關鍵字用
jieba.load_userdict('data/custom.txt') # 應用自定義詞典
jieba.analyse.set_stop_words('data/stopword.txt') # 抽取關鍵詞前去掉自定義停用詞
# 詳細參數:
# 字符串
# 返回多少關鍵詞,默認20個
# 是否返回TF-IDF權重
# allowPOS=(),什么詞性可以做抽取,默認所有詞
k = jieba.analyse.extract_tags(txt, topK=50, withWeight=True)
Text-Rank算法
TextRank是在Google的PageRank算法啟發下,針對文本里的句子設計的權重算法,目標是自動摘要。
它利用投票的原理,讓每一個單詞給它的鄰居(術語稱窗口)投贊成票,票的權重取決於自己的票數。
效果比詞頻統計精准,和TF-IDF比各有千秋
jieba.load_userdict('data/custom.txt') # 應用自定義詞典
jieba.analyse.set_stop_words('data/stopword.txt') # 抽取關鍵詞前去掉自定義停用詞
# 文本
# 顯示多少詞
# 是否返回關鍵字權重
# allowPOS=(),什么詞性可以做抽取,默認所有詞
t = jieba.analyse.textrank(txt, topK=50, withWeight=True, allowPOS=('ns', 'n', 'vn', 'v'))
附:詞性標注
后附詞性表
list(jieba.posseg.cut(a))
中科院ICTCLAS分詞漢語詞性標記集¶
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 單位符號,全角:¥ $ £ ° ℃ 半角:$
