目錄
1.mmseg4j部分(簡介,下載,安裝,使用,分詞算法分析)
2.jieba部分(簡介,下載,安裝,使用,分詞算法分析)
3.詞云
1.mmseg4j
1.1mmseg4j簡介
mmseg4j用Chih-Hao Tsai 的MMSeg算法實現的中文分詞器,并實現lucene的analyzer和solr的TokenizerFactory以方便在Lucene和Solr中使用。 MMSeg 算法有兩種分詞方法:Simple和Complex,都是基于正向最大匹配。Complex加了四個規則過慮。官方說:詞語的正確識別率達到了 98.41%。mmseg4j已經實現了這兩種分詞算法。
1.2mmseg4j下載
http://central.maven.org/maven2/com/chenlb/mmseg4j/mmseg4j-core/1.10.0/mmseg4j-core-1.10.0.jar
http://central.maven.org/maven2/com/chenlb/mmseg4j/mmseg4j-analysis/1.9.1/mmseg4j-analysis-1.9.1.jar
github地址
https://github.com/chenlb/mmseg4j-core
1.3mmseg4j安裝/使用
在這里為了簡單的體驗mmseg4j,我們采用最簡單的本地cmd方法使用:
進入到下載到的mmseg4j-core盤符:
java -cp mmseg4j-core-1.9.1.jar com.chenlb.mmseg4j.example.MaxWord 中華人名共和國
分詞成功!
1.4mmseg4j分詞算法分析
mmseg4j的匹配算法一共有三種:
Simple方法
Complex方法
MaxWord方法
1、Simple(簡單最大匹配)
在一串字符串中從開頭匹配子串,找到所有可能的匹配。
國
國際
國際化
2、MaxWord(復雜最大匹配):
以三個詞為一組
研究生
研究生命
研究生命起源
研究生命起源
3.消除歧義的匹配算法
簡單的最大匹配:選擇這個詞的最大長度。 復雜最大匹配:選擇第一個詞塊的最大長度。
最大平均單詞長度
單詞長度的最小方差
最大的語素和自由的單字單詞
現在我們來對一段文本嘗試用不同的分詞算法進行分詞:
5月23日,人機大戰第一局在浙江桐鄉打響,經過猜先柯潔執黑先行。最終,由Deepmind團隊研發的圍棋人工智能AlphaGo執白1/4子戰勝目前等級分排名世界第一的中國棋手柯潔九段,暫時以1比0領先。雙方的第二局比賽將于25日10:30繼續進行。DeepMind創始人哈薩比斯:無論結果如何 勝利都屬于人類在賽前的演講中,DeepMind創始人哈薩比斯就表示,并不同意這是人機大賽,而是人利用電腦發現新的知識。
MaxWord:
錯詞分析:
柯潔 -> 柯 | 潔 (人名)
哈薩比斯 -> 哈 | 薩 | 比 | 斯 (人名)
對決 -> 對 | 決 (動詞)
等級分 -> 等級 | 分 (常用詞)
人工智能 -> 人工 | 智能 (常用詞)
世界第一 -> 界 | 第 (常用詞)
第二局 -> 第二 | 局 (常用詞)
Simple:
錯詞分析:
柯潔 -> 柯 | 潔 (人名)
第二局 -> 第二 | 局 (常用詞)
哈薩比斯 -> 哈 | 薩 | 比 | 斯 (人名)
對比比較發現,在基于所給出文本的分析測試中:
1.兩種算法都不能對于特定的人名進行分詞;
2.基于Simple的算法能夠匹配出一些簡單的常用詞(人工智能/世界第一/等級分),MaxWord算法則不能;
3.MaxWord甚至會匹配出一些顯而易見的錯誤(對 | 決, 界 | 第).
2.jieba
2.1jieba簡介
支持三種分詞模式:
精確模式,試圖將句子最精確地切開,適合文本分析;
全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
搜索引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用于搜索引擎分詞。
支持繁體分詞
支持自定義詞典
2.2jieba下載/安裝
在這里我是在pyhton環境下進行的jieba安裝與測試
pip install jieba
一鍵式傻瓜操作安裝成功
2.3結巴使用
我們通過一串代碼來分析:
import jieba
import codecs
jieba.add_word('柯潔')
jieba.add_word('哈薩比斯')
with open('word.txt', 'r') as f:
for line in f:
seg = jieba.cut(line.strip(), cut_all = False)
s= '/'.join(seg)
m=list(s)
with open('word2.txt','a+')as f:
for word in m:
f.write(word.encode('utf-8'))
#print word
添加自定義詞典:
jieba.add_word('柯潔')
jieba.add_word('哈薩比斯')
打開我們即將要分詞的文件:
with open('word.txt', 'r') as f:
逐行讀取并且采用精確模式(cut_all = False)
for line in f:
seg = jieba.cut(line.strip(), cut_all = False)
s= '/'.join(seg)
m=list(s)
將分詞后的文本保存到目標文本當中去,并且采用UTF-8格式儲存:
with open('word2.txt','a+')as f:
for word in m:
f.write(word.encode('utf-8'))
#print word
測試:
我們發現,在文本中的'柯潔'和'哈薩比斯'的人名已經被正確的分詞!
當然了,結巴提供當中提供的三種分詞方式:
# 全模式
sl = jieba.cut(strt, cut_all=True)
print "全模式分詞結果:", ",".join(sl)
print('\n')
# 精確模式,默認hi精確模式,所以可以不指定cut_all=False
sl = jieba.cut(strt, cut_all=False)
print "精確模式分詞結果:", ",".join(sl)
print('\n')
# 搜索引擎模式
sl = jieba.cut_for_search(strt)
print "搜索引擎模式分詞結果:", ",".join(sl)
我們這里只采用了第二種精確模式.
3.詞云分析
我們采用圖悅來進行詞云分析: