Python 基於 jieba 的中文分詞總結

2022-01-09 20:31:51 字數 4616 閱讀 4358

目錄

pip install jieba
jieba分詞器支援4種分詞模式:

精確模式該模式會試圖將句子最精確地切分開,適合在文字分析時使用。

全模式該模式會將句子中所有可以成詞的詞語都掃瞄出來,速度也非常快,缺點是不能解決歧義問題,有歧義的詞語也會被掃瞄出來。

搜尋引擎模式該模式會在精確模式的基礎上對長詞語再進行切分,將更短的詞切分出來。在搜尋引擎中,要求輸入詞語的一部分也能檢索到整個詞語相關的文件,所以該模式適用於搜尋引擎分詞。

paddle模式該模式利用paddlepaddle深度學習框架,訓練序列標註網路模型實現分詞,同時支援詞性標註。

該模式在4.0及以上版本的jieba分詞器中才能使用。使用該模式需要安裝paddlepaddle模組,安裝命令為「pip install paddlepaddle」。

>>> import jieba

>>> str1 = '我來到了成都的西南交通大學犀浦校區,發現這兒真不錯'

>>> seg_list = jieba.cut(str1, cut_all=true)

>>> print('全模式分詞結果:' + '/'.join(seg_list))

全模式分詞結果:我/來到/了/成都/的/西南/交通/大學/犀/浦/校區/,/發現/這兒/真不/真不錯/不錯

>>> seg_list = jieba.cut(str1, cut_all=false)

>>> print('精確模式分詞結果:' + '/'.join(seg_list))

精確模式分詞結果:我/來到/了/成都/的/西南/交通/大學/犀浦/校區/,/發現/這兒/真不錯

這裡有個坑,首先不能用最新的python版本,我從3.9.1降到了3.8.7才可以。

另外安裝後使用一直報錯,最終發現需要microsoft visible c++ 2017 redistributable 及其以上版本支援

import jieba

import paddle

str1 = '我來到了成都的西南交通大學犀浦校區,發現這兒真不錯'

paddle.enable_static()

jieba.enable_paddle()

seg_list = jieba.cut(str1, use_paddle=true)

print('paddle模式分詞結果:' + '/'.join(seg_list))

輸出:paddle模式分詞結果:我/來到/了/成都/的/西南交通大學犀浦校區,/發現/這兒/真不錯

import jieba

import paddle

# 詞性標註分詞器

import jieba.posseg as pseg

str1 = '我來到了成都的西南交通大學犀浦校區,發現這兒真不錯'

paddle.enable_static()

jieba.enable_paddle()

words = pseg.cut(str1,use_paddle=true)

for seg, flag in words:

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

輸出:我 r

來到 v

了 u成都 loc

的 u西南交通大學犀浦校區, org

發現 v

這兒 r

真不錯 a

注意:pseg.cut 和 jieba.cut 返回的物件是不一樣的!

paddle模式詞性標註對應表如下:

paddle模式詞性和專名類別標籤集合如下表,其中詞性標籤 24 個(小寫字母),專名類別標籤 4 個(大寫字母)。

標籤含義

標籤含義

標籤含義

標籤含義

n普通名詞

f方位名詞

s處所名詞t時間

nr人名

ns地名

nt機構名

nw作品名

nz其他專名

v普通動詞

vd動副詞

vn名動詞

a形容詞

ad副形詞

an名形詞d副詞

m數量詞q量詞

r代詞p介詞

c連詞u助詞

xc其他虛詞

w標點符號

per人名

loc地名

org機構名

time

時間將jieba.cut()函式的引數hmm設定為true,即可使用基於漢字成詞能力的hmm模型識別新詞,即詞典中不存在的詞。

測試一下,效果一般

import jieba

str1 = '我來到了成都的西南交通大學犀浦校區,發現這兒真不錯'

seg_list = jieba.cut_for_search(str1)

print('搜尋引擎模式分詞結果:' + '/'.join(seg_list))

輸出:搜尋引擎模式分詞結果:我/來到/了/成都/的/西南/交通/大學/犀浦/校區/,/發現/這兒/真不/不錯/真不錯

使用者詞典.txt 如下

str = '心靈感應般地驀然回首,才能撞見那一低頭的溫柔;也最是那一低頭的溫柔,似一朵水蓮花不勝涼風的嬌羞;也最是那一抹嬌羞,才能讓兩人攜手共白首。';

seg_list = jieba.cut(str)

print('未載入自定義詞典時的精確模式分詞結果:\n', '/'.join(seg_list))

jieba.load_userdict('使用者詞典.txt')

seg_list = jieba.cut(str)

print('載入自定義詞典時的精確模式分詞結果:\n', '/'.join(seg_list))

jieba.add_word('最是')

seg_list = jieba.cut(str)

print('新增自定義詞時的精確模式分詞結果:\n', '/'.join(seg_list))

jieba.del_word('一低頭')

seg_list = jieba.cut(str)

print('刪除自定義詞時的精確模式分詞結果:\n', '/'.join(seg_list))

from jieba import analyse

text = '記者日前從中國科學院南京地質古生物研究所獲悉,該所早期生命研究團隊與美國學者合作,在中國湖北三峽地區的石板灘生物群中,發現了4種形似樹葉的遠古生物。這些「樹葉」實際上是形態奇特的早期動物,它們生活在遠古海洋底部。相關研究成果已發表在古生物學國際專業期刊《古生物學雜誌》上。'

keywords = analyse.extract_tags(text, topk = 10, withweight = true, allowpos = ('n', 'v'))

print(keywords)

from jieba import analyse

text = '記者日前從中國科學院南京地質古生物研究所獲悉,該所早期生命研究團隊與美國學者合作,在中國湖北三峽地區的石板灘生物群中,發現了4種形似樹葉的遠古生物。這些「樹葉」實際上是形態奇特的早期動物,它們生活在遠古海洋底部。相關研究成果已發表在古生物學國際專業期刊《古生物學雜誌》上。'

keywords = analyse.textrank(text, topk = 10, withweight = true, allowpos = ('n', 'v'))

print(keywords)

說明:textrank()

停用詞是指在每個文件中都會大量出現,但是對於nlp沒有太大作用的詞,如「你」「我」「的」「在」及標點符號等。在分詞完畢後將停用詞過濾掉,有助於提高nlp的效率。

## 詞頻統計

對分詞結果進行詞頻統計能從客觀上反映一段文字的側重點.

```python

import jieba

text = '蒸饃饃鍋鍋蒸饃饃,饃饃蒸了一鍋鍋,饃饃擱上桌桌,桌桌上面有饃饃。'

with open('stopwords.txt', 'r+', encoding = 'utf-8')as fp:

stopwords = fp.read().split('\n')

word_dict = {}

jieba.suggest_freq(('桌桌'), true)

seg_list = jieba.cut(text)

for seg in seg_list:

if seg not in stopwords:

if seg in word_dict.keys():

word_dict[seg] += 1

else:

word_dict[seg] = 1

print(word_dict)

輸出:

基於python中jieba包的中文分詞中詳細使用

為了教別人jieba庫的使用,順便自己把這個整理一下,記錄下來,省的之後使用又來找資料 jieba 中文分詞比較好,但是英文分詞就用其他的 3種分詞模式 精確模式,將句子精確地切開,不存在冗餘,適合文字分析 全模式,把句子中所有的可以成詞的詞語都掃瞄出來,速度非常快,但是不能解決歧義,有冗餘 搜尋引...

Python基於jieba的中文詞云

今日學習了python的詞云技術 from os import path from wordcloud import wordcloud import matplotlib.pyplot as plt d path.dirname file text open path.join d,data re...

Python基於jieba的中文詞云

python基於jieba的中文詞云。from os import path from wordcloud import wordcloud import matplotlib.pyplot as plt d path.dirname file text open path.join d,data ...