中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在python中使用jieba中文分詞庫

發布時間:2021-03-20 17:14:29 來源:億速云 閱讀:173 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關如何在python中使用jieba中文分詞庫,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1、分詞

1.1、CUT函數簡介

cut(sentence, cut_all=False, HMM=True)

返回生成器,遍歷生成器即可獲得分詞的結果

lcut(sentence)

返回分詞列表

import jieba
sentence = '我愛自然語言處理'
# 創建【Tokenizer.cut 生成器】對象
generator = jieba.cut(sentence)
# 遍歷生成器,打印分詞結果
words = '/'.join(generator)
print(words)

打印結果

我/愛/自然語言/處理

import jieba
print(jieba.lcut('我愛南海中學'))

打印結果

[‘我', ‘愛', ‘南海中學']

1.2、分詞模式

精確模式:精確地切開

全模式:所有可能的詞語都切出,速度快

搜索引擎模式:在精確模式的基礎上,對長詞再次切分

import jieba
sentence = '訂單數據分析'
print('精準模式:', jieba.lcut(sentence))
print('全模式:', jieba.lcut(sentence, cut_all=True))
print('搜索引擎模式:', jieba.lcut_for_search(sentence))

打印結果

精準模式: [‘訂單', ‘數據分析']

全模式: [‘訂單', ‘訂單數', ‘單數', ‘數據', ‘數據分析', ‘分析']

搜索引擎模式: [‘訂單', ‘數據', ‘分析', ‘數據分析']

1.3、詞性標注

jieba.posseg
import jieba.posseg as jp
sentence = '我愛Python數據分析'
posseg = jp.cut(sentence)
for i in posseg:
 print(i.__dict__)
 # print(i.word, i.flag)

打印結果

{‘word': ‘我', ‘flag': ‘r'}
{‘word': ‘愛', ‘flag': ‘v'}
{‘word': ‘Python', ‘flag': ‘eng'}
{‘word': ‘數據分析', ‘flag': ‘l'}

詞性標注表

標注解釋標注解釋標注解釋
a形容詞mq數量詞tg時語素
ad副形詞n名詞u助詞
ag形語素ng例:義 乳 亭ud例:得
an名形詞nr人名ug例:過
b區別詞nrfg也是人名uj例:的
c連詞nrt也是人名ul例:了
d副詞ns地名uv例:地
df例:不要nt機構團體uz例:著
dg副語素nz其他專名v動詞
e嘆詞o擬聲詞vd副動詞
f方位詞p介詞vg動語素
g語素q量詞vi例:沉溺于 等同于
h前接成分r代詞vn名動詞
i成語rg例:茲vq例:去浄 去過 唸過
j簡稱略語rr人稱代詞x非語素字
k后接成分rz例:這位y語氣詞
l習用語s處所詞z狀態詞
m數詞t時間詞zg例:且 丗 丟

1.4、詞語出現的位置

jieba.tokenize(sentence)
import jieba
sentence = '訂單數據分析'
generator = jieba.tokenize(sentence)
for position in generator:
 print(position)

打印結果

(‘訂單', 0, 2)
(‘數據分析', 2, 6)

2、詞典

2.1、默認詞典

import jieba, os, pandas as pd
# 詞典所在位置
print(jieba.__file__)
jieba_dict = os.path.dirname(jieba.__file__) + r'\dict.txt'
# 讀取字典
df = pd.read_table(jieba_dict, sep=' ', header=None)[[0, 2]]
print(df.head())
# 轉字典
dt = dict(df.values)
print(dt.get('暨南大學'))

如何在python中使用jieba中文分詞庫

2.2、添詞和刪詞

往詞典添詞

add_word(word, freq=None, tag=None)

往詞典刪詞,等價于add_word(word, freq=0)

del_word(word)

import jieba
sentence = '天長地久有時盡,此恨綿綿無絕期'
# 添詞
jieba.add_word('時盡', 999, 'nz')
print('添加【時盡】:', jieba.lcut(sentence))
# 刪詞
jieba.del_word('時盡')
print('刪除【時盡】:', jieba.lcut(sentence))

打印結果

添加【時盡】: [‘天長地久', ‘有', ‘時盡', ‘,', ‘此恨綿綿', ‘無', ‘絕期']

刪除【時盡】: [‘天長地久', ‘有時', ‘盡', ‘,', ‘此恨綿綿', ‘無', ‘絕期']

2.3、自定義詞典加載

新建詞典,按照格式【單詞 詞頻 詞性】添詞,以UTF-8編碼保存

使用函數load_userdict加載詞典

import os, jieba
# 創建自定義字典
my_dict = 'my_dict.txt'
with open(my_dict, 'w', encoding='utf-8') as f:
 f.write('慕容紫英 9 nr\n云天河 9 nr\n天河劍 9 nz')
# 加載字典進行測試
sentence = '慕容紫英為云天河打造了天河劍'
print('加載前:', jieba.lcut(sentence))
jieba.load_userdict(my_dict)
print('加載后:', jieba.lcut(sentence))
os.remove(my_dict)

打印結果

加載前: [‘慕容', ‘紫英為', ‘云', ‘天河', ‘打造', ‘了', ‘天河', ‘劍']

加載后: [‘慕容紫英', ‘為', ‘云天河', ‘打造', ‘了', ‘天河劍']

2.4、使單詞中的字符連接或拆分

suggest_freq(segment, tune=False)

import jieba
sentence = '上窮碧落下黃泉,兩處茫茫皆不見'
print('修正前:', ' | '.join(jieba.cut(sentence)))
jieba.suggest_freq(('落', '下'), True)
print('修正后:', ' | '.join(jieba.cut(sentence)))

打印結果

修正前: 上窮 | 碧 | 落下 | 黃泉 | , | 兩處 | 茫茫 | 皆 | 不見

修正后: 上窮 | 碧落 | 下 | 黃泉 | , | 兩處 | 茫茫 | 皆 | 不見

3、jieba分詞原理

基于詞典,對句子進行詞圖掃描,生成所有成詞情況所構成的有向無環圖(Directed Acyclic Graph)

根據DAG,反向計算最大概率路徑(動態規劃算法;取對數防止下溢,乘法運算轉為加法)

根據路徑獲取最大概率的分詞序列

import jieba
sentence = '中心小學放假'
DAG = jieba.get_DAG(sentence)
print(DAG)
route = {}
jieba.calc(sentence, DAG, route)
print(route)

DAG

{0: [0, 1, 3], 1: [1], 2: [2, 3], 3: [3], 4: [4, 5], 5: [5]}

最大概率路徑

{6: (0, 0), 5: (-9.4, 5), 4: (-12.6, 5), 3: (-20.8, 3), 2: (-22.5, 3), 1: (-30.8, 1), 0: (-29.5, 3)}

4、識別【帶空格的詞】

示例:使Blade Master這類中間有空格的詞被識別

import jieba, re
sentence = 'Blade Master疾風刺殺Archmage'
jieba.add_word('Blade Master') # 添詞
print('修改前:', jieba.lcut(sentence))
jieba.re_han_default = re.compile('(.+)', re.U) # 修改格式
print('修改后:', jieba.lcut(sentence))

打印結果

修改前: [‘Blade', ' ', ‘Master', ‘疾風', ‘刺殺', ‘Archmage']

修改后: [‘Blade Master', ‘疾風', ‘刺殺', ‘Archmage']

5、其它

5.1、并行分詞

運行環境:linux系統

開啟并行分詞模式,參數n為并發數:jieba.enable_parallel(n)

關閉并行分詞模式:jieba.disable_parallel()

5.2、關鍵詞提取

基于TF-IDF:jieba.analyse

基于TextRank:jieba.textrank

import jieba.analyse as ja, jieba
text = '柳夢璃施法破解了狐仙的法術'
jieba.add_word('柳夢璃', tag='nr')
keywords1 = ja.extract_tags(text, allowPOS=('n', 'nr', 'ns', 'nt', 'nz'))
print('基于TF-IDF:', keywords1)
keywords2 = ja.textrank(text, allowPOS=('n', 'nr', 'ns', 'nt', 'nz'))
print('基于TextRank:', keywords2)

打印結果

基于TF-IDF: [‘柳夢璃', ‘狐仙', ‘法術']

基于TextRank: [‘狐仙', ‘柳夢璃', ‘法術']

5.3、修改HMM參數

import jieba
text = '柳夢璃解夢C法'
print(jieba.lcut(text, HMM=False)) # ['柳', '夢', '璃', '解夢', 'C', '法']
print(jieba.lcut(text)) # ['柳夢璃', '解夢', 'C', '法']
jieba.finalseg.emit_P['B']['C'] = -1e-9 # begin
print(jieba.lcut(text)) # ['柳夢璃', '解夢', 'C', '法']
jieba.finalseg.emit_P['M']['夢'] = -100 # middle
print(jieba.lcut(text)) # ['柳', '夢璃', '解夢', 'C', '法']
jieba.finalseg.emit_P['S']['夢'] = -.1 # single
print(jieba.lcut(text)) # ['柳', '夢', '璃', '解夢', 'C', '法']
jieba.finalseg.emit_P['E']['夢'] = -.01 # end
print(jieba.lcut(text)) # ['柳夢', '璃', '解夢', 'C', '法']
jieba.del_word('柳夢') # Force_Split_Words
print(jieba.lcut(text)) # ['柳', '夢', '璃', '解夢', 'C', '法']

print

[‘柳', ‘夢', ‘璃', ‘解夢', ‘C', ‘法']

[‘柳夢璃', ‘解夢', ‘C', ‘法']

[‘柳夢璃', ‘解夢', ‘C', ‘法']

[‘柳', ‘夢璃', ‘解夢', ‘C', ‘法']

[‘柳', ‘夢', ‘璃', ‘解夢', ‘C', ‘法']

[‘柳夢', ‘璃', ‘解夢', ‘C', ‘法']

[‘柳', ‘夢', ‘璃', ‘解夢', ‘C', ‘法']

以上就是如何在python中使用jieba中文分詞庫,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐业县| 淮北市| 四子王旗| 行唐县| 浦县| 准格尔旗| 抚顺县| 绥德县| 神农架林区| 海丰县| 丰城市| 甘德县| 湖州市| 威信县| 棋牌| 哈尔滨市| 蓬安县| 施甸县| 互助| 青龙| 深水埗区| 镶黄旗| 固镇县| 兴城市| 宁晋县| 临泽县| 鲁甸县| 揭西县| 大连市| 柯坪县| 平远县| 乾安县| 永川市| 阿尔山市| 山阳县| 四会市| 长乐市| 靖西县| 桑日县| 云梦县| 大厂|