中文分詞的演算法與實現(結巴分詞)

2021-09-02 19:20:50 字數 4234 閱讀 8642

結巴分詞支援三種分詞模式:1.精確模式,試圖將句子最精確的切開,適合文字分析;2.全模式,把句子中所有的可以成詞的詞語都掃瞄出來,速度非常快,但是不能解釋歧義;3.搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。

一、分詞

from __future__ import unicode_literals

import sys

import jieba

import jieba.posseg

import jieba.analyse

# 分詞,可以使用cut()和lcut()兩種方法

seg_list = jieba.lcut("我來到北京清華大學", 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))

full mode: 我,來到,北京,清華,清華大學,華大,大學

default mode: 我,來到,北京,清華大學

他, 來到, 了, 網易, 杭研, 大廈

小明, 碩士, 畢業, 於, 中國, 科學, 學院, 科學院, 中國科學院, 計算, 計算所, ,, 後, 在, 日本, 京都, 大學, 日本京都大學, 深造

二、新增詞典

# 新增詞典

jieba.load_userdict("d:/data/dict.txt")

三、調整詞典

# 調整詞典

print(','.join(jieba.cut('如果放到post中將出錯。', hmm=false)))

jieba.suggest_freq(('中', '將'), true)

print(','.join(jieba.cut('如果放到post中將出錯。', hmm=false)))

print(','.join(jieba.cut('「臺中」正確應該不會被切開', hmm=false)))

jieba.suggest_freq('臺中', true)

print(','.join(jieba.cut('「臺中」正確應該不會被切開', hmm=false)))

如果,放到,post,中將,出錯,。

如果,放到,post,中,將,出錯,。

「,臺,中,」,正確,應該,不會,被,切開

「,臺中,」,正確,應該,不會,被,切開

s = '''

此外,公司擬對全資子公司吉林歐亞置業****增資4.3億元,增資後,吉林歐亞置業註冊

資本由7000萬元增加到5億元。吉林歐亞置業主要經營範圍為房地產開發及百貨零售等業務。

目前在建吉林歐亞城市商業綜合體專案。2023年,實現營業收入0萬元,實現淨利潤-139.13萬元。

'''# tf-idf

print('%s %s' % (x, w))

# textrank

for x, w in jieba.analyse.textrank(s, withweight=true):

print('%s %s' % (x, w))

歐亞 0.7148056394033334

吉林 0.6453082221991667

置業 0.478531921956875

萬元 0.33220407634875

增資 0.3288276861054167

4.3 0.24905765631041665

7000 0.24905765631041665

2013 0.24905765631041665

139.13 0.24905765631041665

實現 0.19486376152458332

綜合體 0.19074469840854166

經營範圍 0.18985803977479165

億元 0.18745378397625

在建 0.17176428835750002

全資 0.16822244884583334

百貨 0.163858254571875

註冊 0.15190267518354167

零售 0.14443267604520835

子公司 0.14291960962

營業 0.13630174790083333

歐亞 1.0

吉林 0.8789102185873989

置業 0.6632552273555545

實現 0.5594840789490926

收入 0.41421237233070557

增資 0.38649739942877126

子公司 0.3369458567319608

城市 0.3336549476141939

商業 0.3321326523190795

在建 0.30622998871047585

零售 0.2909936174579653

百貨 0.290324963335001

資本 0.2884140004696881

營業 0.28780582798670107

全資 0.28655198294847095

綜合體 0.2804051042482387

開發 0.27110208243505346

業務 0.2685461768277592

**** 0.26500710953857665

經營範圍 0.25427993286840744

五、詞性標註

# 詞性標註

words = jieba.posseg.cut("我愛北京天安門")

for word, flag in words:

print('%s %s' % (word, flag))

我 r

愛 v北京 ns

天安門 ns

六、tokenize

# tokenize

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]))

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:10

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

此外,結巴分詞還可以通過呼叫jieba.analyse.set_idf_path(file_name)和jieba.analyse.set_stop_words(file_name)兩個方法來實現設定idf路徑和設定停用詞的功能。

python中文分詞 結巴分詞

中文分詞是中文文字處理的乙個基礎性工作,結巴分詞利用進行中文分詞。其基本實現原理有三點 基於trie樹結構實現高效的詞圖掃瞄,生成句子中漢字所有可能成詞情況所構成的有向無環圖 dag 採用了動態規劃查詢最大概率路徑,找出基於詞頻的最大切分組合 對於未登入詞,採用了基於漢字成詞能力的hmm模型,使用了...

結巴中文分詞

人工智慧領域文字分類中最基本的就是分詞,分詞中最基礎的莫過於結巴分詞。分詞,顧名思義就是把一句話劃分成若干的詞語,只不過如今我們是讓電腦自動進行分詞。結巴中文分詞支援的三種模式分別為 1.全模式 把句子中所有成詞的詞語都掃瞄出來,速度非常快,但不能消除歧義。分詞結果 jieba.cut 文字名稱,c...

中文分詞概述及結巴分詞原理

詞是中文表達語義的最小單位,自然語言處理的基礎步驟就是分詞,分詞的結果對中文資訊處理至為關鍵。本文先對中文分詞方法進行一下概述,然後簡單講解一下結巴分詞背後的原理。中文分詞概述 簡單來說,中文分詞根據實現特點大致可分為兩個類別 基於詞典的分詞方法 基於統計的分詞方法。基於詞典的分詞方法 基於詞典的分...