學習筆記--中文分詞之結巴分詞(二)
阿新 • • 發佈:2018-12-16
結巴中文分詞簡介
1)支援三種分詞模式:
- 精確模式:將句子最精確的分開,適合文字分析
- 全模式:句子中所有可以成詞的詞語都掃描出來,速度快,不能解決歧義
- 搜尋引擎模式:在精確的基礎上,對長詞再次切分,提高召回
2)支援繁體分詞
3)支援自定義詞典
4)基於Trie樹結構實現高效的詞圖掃描,生成句子漢字所有可能成詞情況所構成的有向無環圖(DAG)
5) 採用了動態規劃查詢最大概率路徑,找出基於詞頻的最大切分組合
6)對於詞庫中不存在的詞,也就是未登入詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi演算法
結巴分詞流程圖:
建立trie樹的好處:
- 省空間
- 查詢快
route概率,獲得詞頻最大切分(根據詞表得到詞頻,log(詞頻 / 總數))
實踐
(1)利用MR+jieba
對音樂元資料進行分詞
run.sh
HADOOP_CMD="/usr/local/src/hadoop-2.6.1/bin/hadoop" STREAM_JAR_PATH="/usr/local/src/hadoop-2.6.1//share/hadoop/tools/lib/hadoop-streaming-2.6.1.jar" INPUT_FILE_PATH_1="/music_meta.txt.small" OUTPUT_Z_PATH="/output_z_fenci" $HADOOP_CMD fs -rmr $OUTPUT_Z_PATH $HADOOP_CMD fs -rmr $OUTPUT_D_PATH # Step 1. $HADOOP_CMD jar $STREAM_JAR_PATH \ -input $INPUT_FILE_PATH_1 \ -output $OUTPUT_Z_PATH \ -mapper "python map_seg2.py" \ -jobconf "mapred.reduce.tasks=0" \ -jobconf "mapreduce.map.memory.mb=4096" \ -jobconf "mapred.job.name=jieba_fenci_demo" \ -file "./jieba.tgz" \ -file "./map_seg2.py"
map.py.通過-file方式把jieba.tgz分發給slave,然後需要對壓縮包進行解壓
import os import sys os.system('tar xvzf jieba.tgz > /dev/null') reload(sys) sys.setdefaultencoding('utf-8') sys.path.append("./") import jieba import jieba.posseg import jieba.analyse for line in sys.stdin: ss = line.strip().split('\t') if len(ss) != 2: continue music_id = ss[0].strip() music_name = ss[1].strip() seg_list = jieba.cut(music_name, cut_all=False) print '\t'.join([music_id, music_name, ' '.join(seg_list)])
分詞後的效果
(2)jieba+webpy
web_jie.py
import web
import sys
sys.path.append("./")
import jieba
import jieba.posseg
import jieba.analyse
urls = (
'/', 'index',
'/test', 'test',
)
app = web.application(urls, globals())
class index:
def GET(self):
params = web.input()
content = params.get('content', '')
result_list = []
for x, w in jieba.analyse.extract_tags(content, withWeight=True):
result_list.append(':'.join([x, str(round(w, 3))]))
return ' '.join(result_list)
class test:
def GET(self):
print web.input()
return '222'
if __name__ == "__main__":
app.run()
~
然後輸入python web_jie.py 9996進行監控
在網頁上檢視,此方式為get請求