1樓:匿名使用者
基於trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(dag)
採用了動態規劃查詢最大概率路徑, 找出基於詞頻的最大切分組合
對於未登入詞,採用了基於漢字成詞能力的hmm模型,使用了viterbi演算法
功能 1):分詞
jieba.cut方法接受兩個輸入引數: 1) 第一個引數為需要分詞的字串 2)cut_all引數用來控制是否採用全模式
jieba.cut_for_search方法接受一個引數:需要分詞的字串,該方法適合用於搜尋引擎構建倒排索引的分詞,粒度比較細
注意:待分詞的字串可以是gbk字串、utf-8字串或者unicode
jieba.cut以及jieba.cut_for_search返回的結構都是一個可迭代的generator,可以使用for迴圈來獲得分詞後得到的每一個詞語(unicode),也可以用list(jieba.
cut(...))轉化為list
**示例( 分詞 )
#encoding=utf-8
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)
output:
【全模式】: 我/ 來到/ 北京/ 清華/ 清華大學/ 華大/ 大學
【精確模式】: 我/ 來到/ 北京/ 清華大學
【新詞識別】:他, 來到, 了, 網易, 杭研, 大廈 (此處,「杭研」並沒有在詞典中,但是也被viterbi演算法識別出來了)
【搜尋引擎模式】: 小明, 碩士, 畢業, 於, 中國, 科學, 學院, 科學院, 中國科學院, 計算, 計算所, 後, 在, 日本, 京都, 大學, 日本京都大學, 深造
功能 2) :新增自定義詞典
開發者可以指定自己自定義的詞典,以便包含jieba詞庫裡沒有的詞。雖然jieba有新詞識別能力,但是自行新增新詞可以保證更高的正確率
用法: jieba.load_userdict(file_name) # file_name為自定義詞典的路徑
詞典格式和dict.txt一樣,一個詞佔一行;每一行分三部分,一部分為詞語,另一部分為詞頻,最後為詞性(可省略),用空格隔開
範例:之前: 李小福 / 是 / 創新 / 辦 / 主任 / 也 / 是 / 雲 / 計算 / 方面 / 的 / 專家 /
載入自定義詞庫後: 李小福 / 是 / 創新辦 / 主任 / 也 / 是 / 雲端計算 / 方面 / 的 / 專家 /
自定義詞典
用法示例
"通過使用者自定義詞典來增強歧義糾錯能力
功能 4) : 詞性標註
標註句子分詞後每個詞的詞性,採用和ictclas相容的標記法
用法示例
>>> import jieba.posseg as pseg
>>> words = pseg.cut("我愛北京天安門")
>>> for w in words:
... print w.word, w.flag
...我 r
愛 v北京 ns
天安門 ns
功能 5) : 並行分詞
原理:將目標文字按行分隔後,把各行文字分配到多個python程序並行分詞,然後歸併結果,從而獲得分詞速度的可觀提升
基於python自帶的multiprocessing模組,目前暫不支援windows
用法:jieba.enable_parallel(4) # 開啟並行分詞模式,引數為並行程序數
jieba.disable_parallel() # 關閉並行分詞模式
例子
實驗結果:在4核3.4ghz linux機器上,對金庸全集進行精確分詞,獲得了1mb/s的速度,是單程序版的3.3倍。
功能 6) : tokenize:返回詞語在原文的起始位置
注意,輸入引數只接受unicode
預設模式
result = jieba.tokenize(u'永和服裝飾品****')
for tk in result:
print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
word 永和 start: 0 end:2
word 服裝 start: 2 end:4
word 飾品 start: 4 end:6
word **** start: 6 end:10
搜尋模式
result = jieba.tokenize(u'永和服裝飾品****',mode='search')
for tk in result:
print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
word 永和 start: 0 end:2
word 服裝 start: 2 end:4
word 飾品 start: 4 end:6
word 有限 start: 6 end:8
word 公司 start: 8 end:10
word **** start: 6 end:10
功能 7) : chineseanalyzer for whoosh搜尋引擎
引用: from jieba.analyse import chineseanalyzer
用法示例
其他詞典
佔用記憶體較小的詞典檔案
支援繁體分詞更好的詞典檔案
2樓:匿名使用者
python**
#encoding=utf-8
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)
輸出:屬
full mode: 我/ 來/ 來到/ 到/ 北/ 北京/ 京/ 清/ 清華/ 清華大學/ 華/ 華大/ 大/ 大學/ 學
default mode: 我/ 來到/ 北京/ 清華大學
他, 來到, 了, 網易, 杭研, 大廈 (此處,「杭研」並沒有在詞典中,但是也被viterbi演算法識別出來了)
如何利用python對中文進行分詞處理
3樓:追憶小土豆
python做中文分詞處理主要有以下幾種:結巴分詞、nltk、thulac
1、fxsjy/jieba
結巴的標語是:做最好的 python 中文分片語件,或許從現在來看它沒做到最好,但是已經做到了使用的人最多。結巴分詞網上的學習資料和使用案例比較多,上手相對比較輕鬆,速度也比較快。
結巴的優點:
支援三種分詞模式
支援繁體分詞
支援自定義詞典
mit 授權協議
2、thulac:一個高效的中文詞法分析工具包
前兩天我在做有關於共享單車的使用者反饋分類,使用jieba分詞一直太過零散,分類分不好。後來江兄給我推薦了thulac: 由清華大學自然語言處理與社會人文計算實驗室研製推出的一套中文詞法分析工具包 。
thulac的介面文件很詳細,簡單易上手。
thulac分詞的優點:
能力強。利用規模最大的人工分詞和詞性標註中文語料庫(約含5800萬字)訓練而成,模型標註能力強大。
準確率高。該工具包在標準資料集chinese treebank(ctb5)上分詞的f1值可達97.3%,詞性標註的f1值可達到92.9%
速度較快。同時進行分詞和詞性標註速度為300kb/s,每秒可處理約15萬字。只進行分詞速度達到1.3mb/s,速度比jieba慢
python 解決中文編碼問題基本可以用以下邏輯:
utf8(輸入) ——> unicode(處理) ——> (輸出)utf8
python 裡面處理的字元都是都是unicode 編碼,因此解決編碼問題的方法是把輸入的文字(無論是什麼編碼)解碼為(decode)unicode編碼,然後輸出時再編碼(encode)成所需編碼。
由於處理的一般為txt 文件,所以最簡單的方法,是把txt 文件另存為utf-8 編碼,然後使用python 處理的時候解碼為unicode(sometexts.decode('utf8')),輸出結果回txt 的時候再編碼成utf8(直接用str() 函式就可以了)。
用python語言,如何判斷一段字串中是否包含指定的字串
python的string物件沒bai有contains方法,不用使用dustring.contains的方法判斷是否zhi包含子字串dao,但是python有更簡單的專方法來替換屬contains函式。方法1 使用 in 方法實現contains的功能 site if jb51 in site p...
python中的冒號怎麼用,python中的冒號在什麼時候用,具體含義是什麼
函式,迴圈,條件,類定義等後面都是跟著一個block,block需要縮排,所以這些語句後面都有一個冒號。至於為什麼這樣子,我們又不是研究理論的。死記硬背就可以了。什麼是一個block。每個語言裡幾乎都有有。就是一組語句。比如函式體,迴圈體,條件分支,類的定義等等都是一個block的概念。每一個blo...
可以用Python程式語言做哪些神奇好玩的事情
可以做個爬蟲很好玩 學會python 程式語言能做哪些神奇好玩的事情 可以用 python 程式語言做哪些神奇好玩的事情 python可以做的事情很多啊像 介面,資料分析,架構,機器學習。看你什麼需求了,不知道你對神奇好玩的事情的定義是什麼,我用了很久的python,現在其它的程式語言都不想再用了。...