機器學習 結巴中文處理

2021-08-22 00:25:11 字數 3667 閱讀 2125

# -*- coding: utf-8 -*-

"""created on tue jul 31 15:26:50 2018

@author: administrator

"""'''

特點: 支援三種分詞模式:

精確模式,試圖將句子最精確地切開,適合文字分析;

全模式,把句子中所有的可以成詞的詞語都掃瞄出來, 速度非常快,但是不能解決歧義;

搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。

支援繁體分詞

支援自定義詞典

mit 授權協議

演算法:基於字首詞典實現高效的詞圖掃瞄,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (dag)

採用了動態規劃查詢最大概率路徑, 找出基於詞頻的最大切分組合

對於未登入詞,採用了基於漢字成詞能力的 hmm 模型,使用了 viterbi 演算法

分詞 jieba.cut 方法接受三個輸入引數: 需要分詞的字串;cut_all 引數用來控制是否採用全模式;hmm 引數用來控制是否使用

hmm 模型

jieba.cut_for_search 方法接受兩個引數:需要分詞的字串;是否使用 hmm模型。該方法適合用於搜尋引擎構建倒排索引的分詞,粒度比較細

待分詞的字串可以是 unicode 或 utf-8 字串、gbk 字串。注意:不建議直接輸入 gbk字串,可能無法預料地錯誤解碼成 utf-8

jieba.cut以及 jieba.cut_for_search 返回的結構都是乙個可迭代的 generator,可以使用 for迴圈來獲得分詞後得到的每乙個詞語(unicode),或者用jieba.lcut 以及jieba.lcut_for_search 直接返回list

jieba.tokenizer(dictionary=default_dict)

新建自定義分詞器,可用於同時使用不同詞典。jieba.dt 為預設分詞器,所有全域性分詞相關函式都是該分詞器的對映。

使用jieba.posseg分詞,可以檢視分詞的詞性、

'''import jieba

seg_list = jieba.cut("我來到北京清華大學",cut_all=true)

print("full mode:"+"/".join(seg_list)) # 全模式

# in[1]

seg_list = jieba.cut("我來到北京清華大學",cut_all=false)

print("default mode:"+"/".join(seg_list)) # 精確模式

# in[2]

seg_list = jieba.cut("他來到了網易杭研大廈") # 預設是精確模式

print(", ".join(seg_list))

# in[3]

seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造")

print(",".join(seg_list)) # 搜尋引擎模式

# in[4]

''' 新增自定義詞典

新增自定義詞典以便能識別專業詞彙

載入詞典

開發者可以指定自己自定義的詞典,以便包含 jieba 詞庫里沒有的詞。雖然 jieba

有新詞識別能力,但是自行新增新詞可以保證更高的正確率

用法: jieba.load_userdict(file_name) # file_name 為檔案類物件或自定義詞典的路徑

詞典格式和 dict.txt一樣,乙個詞佔一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可顛倒。file_name若為路徑或二進位制方式開啟的檔案,則檔案必須為 utf-8 編碼。

詞頻省略時使用自動計算的能保證分出該詞的詞頻。

'''test_sent = (

"李小福是創新辦主任也是雲計算方面的專家; 什麼是八一雙鹿\n"

"例如我輸入乙個帶「韓玉賞鑑」的標題,在自定義詞庫中也增加了此詞為n類\n"

"「臺中」正確應該不會被切開。mac上可分出「石墨烯」;此時又可以分出來凱特琳了。"

)jieba.load_userdict("userdict.txt")

jieba.add_word('石墨烯')

jieba.add_word('凱特琳')

jieba.add_word('自定義詞')

words = jieba.cut(test_sent)

print(','.join(words))

# in[5]

''' 調整詞典

使用 add_word(word, freq=none, tag=none)和 del_word(word) 可在程式中動態修改詞典。

使用 suggest_freq(segment, tune=true) 可調節單個詞語的詞頻,使其能(或不能)被分出來。

注意:自動計算的詞頻在使用 hmm 新詞發現功能時可能無效。

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

jieba.suggest_freq(('中', '將'), true) #true若可以就將單詞分開,false若可以就將單詞合併

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

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

jieba.suggest_freq('臺中', true)

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

# in[6]

'''

jieba.analyse.extract_tags(sentence, topk=20, withweight=false, allowpos=())

sentence:為待提取的文字

allowpos:僅包括指定詞性的詞,預設值為空,即不篩選

'''import jieba

import jieba.analyse

s = "此外,公司擬對全資子公司吉林歐亞置業****增資4.3億元,增資後,吉林歐亞置業註冊資本由7000萬元增加到5億元。吉林歐亞置業主要經營範圍為房地產開發及百貨零售等業務。目前在建吉林歐亞城市商業綜合體專案。2023年,實現營業收入0萬元,實現淨利潤-139.13萬元。"

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

# in[7]

'''jieba.analyse.textrank(sentence, topk=20, withweight=false, allowpos=('ns', 'n', 'vn', 'v')) 直接使用,介面相同,注意預設過濾詞性。

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

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

# in[8]

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

結巴中文分詞

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

結巴中文分詞使用學習(python)

精確模式 預設 試圖將句子最精確地切開,適合文字分析 全模式,把句子中所有的可以成詞的詞語都掃瞄出來,但是不能解決歧義 搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,該方法適合用於搜尋引擎構建倒排索引的分詞,粒度比較細。注意 jieba.cut以及jieba.cut for sear...

結巴中文分詞安裝與使用

1 安裝 pip install jieba 2 示例 encoding utf 8 import jieba seg list jieba.cut 我來到北京清華大學 cut all true print full mode join seg list 輸出 我 來到 北京 清華 清華大學 華大 ...