分詞思想和工具也有很多,這裡先只學習jeiba分詞。
三種分詞模式
另外,也支援繁體分詞和自定義詞典
基本使用
import jieba
import warnings
warnings.filterwarnings(
'ignore'
)tmpstr=
'郭靖和哀牢山三十六劍,'
res=jieba.cut(tmpstr)
#預設精確模式
print
(res)
#是乙個可迭代的generator,可用for迴圈遍歷結果,類似與list
print
('/'
.join(res)
)
郭靖/和/哀牢山/三十六/劍/,
分詞結果輸出為列表
#將迴圈generator轉化為列表
res=jieba.cut(tmpstr)
list
(word for word in res)
[『郭靖』, 『和』, 『哀牢山』, 『三十六』, 『劍』, 『,』]
#直接使用lcut
print
(jieba.lcut(tmpstr)
)
[『郭靖』, 『和』, 『哀牢山』, 『三十六』, 『劍』, 『,』]
其他模式
print
('/'
.join(jieba.cut(tmpstr,cut_all=
true))
)#全模式
郭/靖/和/哀牢山/三十/三十六/十六/劍/,
print
('/'
.join(jieba.cut_for_search(tmpstr)))
#搜尋引擎模式
print
(jieba.lcut_for_search(tmpstr)
)#列表形式
郭靖/和/哀牢山/三十/十六/三十六/劍/,
[『郭靖』, 『和』, 『哀牢山』, 『三十』, 『十六』, 『三十六』, 『劍』, 『,』]
修改詞典
想要靈活分詞,可以對分詞的詞典進行補充或調整,有三種形式:動態增刪新詞,使用自定義詞典,使用現有詞庫
動態增刪新詞
即根據分詞結果,對記憶體中的詞庫進行更新
jieba.add_word(
'哀牢山三十六劍'
)'/'
.join(jieba.cut(tmpstr)
)
『郭靖/和/哀牢山三十六劍/,』
jieba.del_word(
'哀牢山三十六劍'
)'/'
.join(jieba.cut(tmpstr)
)
『郭靖/和/哀牢山/三十六/劍/,』
使用自定義詞典
當有很多自定義詞需要新增時,可以事先建立乙個詞庫,使用自定義詞典進行分詞
詞典基本格式:
乙個詞一行:詞、詞頻(可省)、詞性(可省)
用空格隔開,詞典檔案必須使用utf-8編碼(必要時使用uedit32進行檔案編碼轉換)
import os
#os.chdir(r'')
dict
='金庸**詞庫.txt'
jieba.load_userdict(
dict
)'/'
.join(jieba.cut(tmpstr)
)
『郭靖/和/哀牢山三十六劍/,』
搜狗詞庫
搜狗詞庫
檔案為scel格式,可使用轉換工具,將其轉換為txt格式(應用程式)
常見停用詞
分詞後去除停用詞
讀入停用詞表檔案
正常分詞
在分詞結果中去除:
新列表=[word for word in 源列表 if word not in 停用詞表]
但存在的問題:停用詞必須要被分詞過程正確拆分才行。
newlist=
[w for w in jieba.cut(tmpstr)
if w notin[
'和',
',']
]print
(newlist)
[『郭靖』, 『哀牢山三十六劍』]
import pandas as pd
tmpdf=pd.read_csv(
'停用詞.txt'
,names=
['w'
],sep=
'aaa'
, encoding=
'utf-8'
)[w for w in jieba.cut(tmpstr)
if w not
inlist
(tmpdf.w)
]#list轉化為列表
[『郭靖』, 『哀牢山三十六劍』]
用extract_tags函式去除停用詞
特點:
根據tf-idf演算法將特徵詞取出來,在提取之前去掉停用詞(這裡就不用考慮分詞是否分得合適的問題,相對準確率更高)
可以人工指定停用詞典
jieba.analyse.set_stop_words()
import jieba.analyse as ana
print
('未使用:'
,jieba.lcut(tmpstr)
)ana.set_stop_words(
'停用詞.txt'
)print
(,ana.extract_tags(tmpstr,topk=20)
)
結巴分詞中的函式: import jieba.posseg
posseg.cut( ):給出附加詞性的分詞結果(詞性標註採用和 ictclas 相容的標記法)
可以詞性做進一步處理,如只提名詞或動詞等…
import jieba.posseg as psg
tmpres=psg.cut(tmpstr)
#附加詞性的分詞結果
這裡的x是未定義詞性,因為「郭靖」「哀牢山三十六劍」是自定義詞典加進去的,加進去的時候沒有定義詞性,如果自定義詞典裡面有指定,那麼會輸出詞性。
psg.lcut(tmpstr)
#直接輸出為list,成員為pair
[pair(『郭靖』, 『x』), pair(『和』, 『c』), pair(『哀牢山三十六劍』, 『x』), pair(』,』, 『x』)]
print
(psg.lcut(tmpstr)[1
].word)
print
(psg.lcut(tmpstr)[1
])psg.lcut(tmpstr)[1
]
和
和/cpair(『和』, 『c』)
nltk只能識別用空格作為詞條分割方式,因此不能直接用於中文文字分詞
一般先用jieba分詞,然後轉換為空格分割的連續文字,再轉入nltk框架使用
rawtext=
'世界那麼大,我想去看看'
txt=
' '.join(jieba.cut(rawtext)
)print
(txt)
import nltk
toke=nltk.word_tokenize(txt)
print
(toke)
世界 那麼 大 , 我 想 去 看看
[『世界』, 『那麼』, 『大』, 『,』, 『我』, 『想』, 『去』, 『看看』]
中文文字分析(1) 分詞
import jieba import re 資料格式 晚上想吃五花肉土豆蓋澆飯 今晚吃雞嘿咻嘿 綠皮環保小火車進站 一首 夢醒時分 送給大家 具體流程如下 目的 清洗文字中的特殊符號 sentence 晚上想吃五花肉土豆蓋澆飯 今晚吃雞嘿咻嘿 綠皮環保小火車進站 一首 夢醒時分 送給大家 def ...
jieba分詞原始碼分析
jieba是乙個開源的中文分詞庫。posseg 自定義詞典 init.py jieba分詞的入口 compat.py dict.txt 總的詞庫,記錄乙個詞 詞頻和詞性 test 測試demo encoding utf 8 import jieba seg list jieba.cut 我來到北京清...
利用jieba分詞分析小說一
人物名字的txt檔案。中文停用詞txt檔案。安裝好jieba庫。用jieba.cut 完成分詞後統計各人物的出場次數.import jieba import pickle import jieba.analyse names all names sentence 用來儲存分詞結果 text path...