欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中文分詞庫(kù)jieba,pkusegwg性能準(zhǔn)確度比較

 更新時(shí)間:2020年02月11日 14:23:41   作者:簡(jiǎn)楊君  
這篇文章主要介紹了Python中文分詞庫(kù)jieba,pkusegwg性能準(zhǔn)確度比較,需要的朋友可以參考下

中文分詞(Chinese Word Segmentation),將中文語(yǔ)句切割成單獨(dú)的詞組。英文使用空格來(lái)分開(kāi)每個(gè)單詞的,而中文單獨(dú)一個(gè)漢字跟詞有時(shí)候完全不是同個(gè)含義,因此,中文分詞相比英文分詞難度高很多。

分詞主要用于NLP 自然語(yǔ)言處理(Natural Language Processing),使用場(chǎng)景有:

  • 搜索優(yōu)化,關(guān)鍵詞提?。ò俣戎笖?shù))
  • 語(yǔ)義分析,智能問(wèn)答系統(tǒng)(客服系統(tǒng))
  • 非結(jié)構(gòu)化文本媒體內(nèi)容,如社交信息(微博熱榜)
  • 文本聚類,根據(jù)內(nèi)容生成分類(行業(yè)分類)

Python的中文分詞

Python的中文分詞庫(kù)有很多,常見(jiàn)的有:

  • jieba(結(jié)巴分詞)
  • THULAC(清華大學(xué)自然語(yǔ)言處理與社會(huì)人文計(jì)算實(shí)驗(yàn)室)
  • pkuseg(北京大學(xué)語(yǔ)言計(jì)算與機(jī)器學(xué)習(xí)研究組)
  • SnowNLP
  • pynlpir
  • CoreNLP
  • pyltp

通常前三個(gè)是比較經(jīng)常見(jiàn)到的,主要在易用性/準(zhǔn)確率/性能都還不錯(cuò)。我個(gè)人常用的一直都是結(jié)巴分詞(比較早接觸),最近使用pkuseg,兩者的使用后面詳細(xì)講。

結(jié)巴分詞

簡(jiǎn)介

“結(jié)巴”中文分詞:做最好的 Python 中文分詞組件

  • 支持三種分詞模式:
    • 精確模式,試圖將句子最精確地切開(kāi),適合文本分析;
    • 全模式,把句子中所有的可以成詞的詞語(yǔ)都掃描出來(lái), 速度非常快,但是不能解決歧義;
    • 搜索引擎模式,在精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞。
  • 支持繁體分詞
  • 支持自定義詞典

jieba分詞實(shí)例

我們使用京東商場(chǎng)的美的電器評(píng)論來(lái)看看結(jié)巴分詞的效果。如果你沒(méi)有安裝結(jié)巴分詞庫(kù)則需要在命令行下輸入pip install jieba,安裝完之后即可開(kāi)始分詞之旅。

評(píng)論數(shù)據(jù)整理在文件meidi_jd.csv文件中,讀取數(shù)據(jù)前先導(dǎo)入相關(guān)庫(kù)。因?yàn)橹形牡奈谋净蛭募木幋a方式不同編碼選擇gb18030,有時(shí)候是utf-8、gb2312、gbk自行測(cè)試。

# 導(dǎo)入相關(guān)庫(kù)
import pandas as pd
import jieba

# 讀取數(shù)據(jù)
data = pd.read_csv('meidi_jd.csv', encoding='gb18030')

# 查看數(shù)據(jù)
data.head()

# 生成分詞
data['cut'] = data['comment'].apply(lambda x : list(jieba.cut(x)))

data.head()

到這里我們僅僅通過(guò)一行代碼即可生成中文的分詞列表,如果你想要生成分詞后去重可以改成這樣。

data['cut'] = data['comment'].apply(lambda x : list(set(jieba.cut(x))))

自定義詞典

經(jīng)過(guò)前面的分詞后,我們可以通過(guò)查看分詞是否準(zhǔn)確,會(huì)發(fā)現(xiàn)實(shí)際上有些詞被分隔成單獨(dú)的漢字,例如:

print(data['cut'].loc[14])

['很', '好', '很', '好', '很', '好', '很', '好', '很', '好', '很', '好', '很', '好', '很', '好', '很', '好', '很', '好', '很', '好']

這時(shí)候我們就需要導(dǎo)入自定義的詞典,以便包含 jieba 詞庫(kù)里沒(méi)有的詞。雖然 jieba 有新詞識(shí)別能力,但是自行添加新詞可以保證更高的正確率。自定義詞典采用一詞一行,為了演示我添加了“很好”并保存在dict.txt文件中,讓我們開(kāi)始用自定義的詞典吧!

data['cut'] = data['comment'].apply(lambda x : list(jieba.cut(x)))

data.head()

print(data['cut'].loc[14])

['很好', '很好', '很好', '很好', '很好', '很好', '很好', '很好', '很好', '很好', '很好']

現(xiàn)在已經(jīng)按照我們計(jì)劃的正確分詞出來(lái)了!很好!

停用詞

分詞的過(guò)程中我們會(huì)發(fā)現(xiàn)實(shí)際上有些詞實(shí)際上意義不大,比如:標(biāo)點(diǎn)符號(hào)、嗯、啊等詞,這個(gè)時(shí)候我們需要將停用詞去除掉。首先我們需要有個(gè)停用詞詞組,可以自定義也可以從網(wǎng)上下載詞庫(kù),這里我們使用網(wǎng)上下載的停用詞文件StopwordsCN.txt。

# 讀取停用詞數(shù)據(jù)
stopwords = pd.read_csv('StopwordsCN.txt', encoding='utf8', names=['stopword'], index_col=False)

stopwords.head()

接下里我們只要適當(dāng)更改分詞的代碼即可在分詞的時(shí)候去掉停用詞:

# 轉(zhuǎn)化詞列表
stop_list = stopwords['stopword'].tolist()

# 去除停用詞
data['cut'] = data['comment'].apply(lambda x : [i for i in jieba.cut(x) if i not in stop_list])

data.head()

pkuseg

pkuseg簡(jiǎn)單易用,支持細(xì)分領(lǐng)域分詞,有效提升了分詞準(zhǔn)確度。

簡(jiǎn)介

pkuseg具有如下幾個(gè)特點(diǎn):

  1. 多領(lǐng)域分詞。不同于以往的通用中文分詞工具,此工具包同時(shí)致力于為不同領(lǐng)域的數(shù)據(jù)提供個(gè)性化的預(yù)訓(xùn)練模型。根據(jù)待分詞文本的領(lǐng)域特點(diǎn),用戶可以自由地選擇不同的模型。 我們目前支持了新聞?lì)I(lǐng)域,網(wǎng)絡(luò)文本領(lǐng)域和混合領(lǐng)域的分詞預(yù)訓(xùn)練模型,同時(shí)也擬在近期推出更多的細(xì)領(lǐng)域預(yù)訓(xùn)練模型,比如醫(yī)藥、旅游、專利、小說(shuō)等等。
  2. 更高的分詞準(zhǔn)確率。相比于其他的分詞工具包,當(dāng)使用相同的訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù),pkuseg可以取得更高的分詞準(zhǔn)確率。
  3. 支持用戶自訓(xùn)練模型。支持用戶使用全新的標(biāo)注數(shù)據(jù)進(jìn)行訓(xùn)練。

注:pkuseg目前僅支持Python3,目前已經(jīng)很多主流庫(kù)開(kāi)始不支持Python2,建議使用Python3版本,如需使用Python2可創(chuàng)建虛擬環(huán)境來(lái)搭建。

Python中文分詞庫(kù)jpkuseg實(shí)例

pkuseg的使用跟結(jié)巴分詞有一點(diǎn)不一樣,pkuseg需要先創(chuàng)建模型實(shí)例再使用實(shí)例方法cut。前面有提到pkuseg是支持加載與訓(xùn)練模型的,這也大大提高了分詞準(zhǔn)確性,特別是對(duì)細(xì)分領(lǐng)域數(shù)據(jù)集進(jìn)行分詞,詳細(xì)查看GitHub文檔。

import pkuseg

# 以默認(rèn)配置加載模型
seg = pkuseg.pkuseg() 

# 進(jìn)行分詞
data['cut'] = data['comment'].apply(lambda x: [i for i in seg.cut(x) if i not in stop_list])

data.head()

自定義詞典

同樣的,pkuseg也支持自定義詞典來(lái)提高分詞準(zhǔn)確率。

# 使用默認(rèn)模型,并使用自定義詞典
seg = pkuseg.pkuseg(user_dict='dict.txt') 

# 進(jìn)行分詞
data['cut'] = data['comment'].apply(lambda x: [i for i in seg.cut(x) if i not in stop_list])

print(data['cut'].loc[14])

自定義預(yù)訓(xùn)練模型

分詞模式下,用戶需要加載預(yù)訓(xùn)練好的模型。pkuseg提供三種不同數(shù)據(jù)類型訓(xùn)練得到的模型。

  • MSRA: 在MSRA(新聞?wù)Z料)上訓(xùn)練的模型。下載地址
  • CTB8: 在CTB8(新聞文本及網(wǎng)絡(luò)文本的混合型語(yǔ)料)上訓(xùn)練的模型。下載地址
  • WEIBO: 在微博(網(wǎng)絡(luò)文本語(yǔ)料)上訓(xùn)練的模型。下載地址
  • MixedModel: 混合數(shù)據(jù)集訓(xùn)練的通用模型。隨pip包附帶的是此模型。下載地址
# 下載后解壓出來(lái),并復(fù)制文件夾路徑
file_path = '/Users/jan/anaconda3/lib/python3.6/site-packages/pkuseg/ctb8'

# 加載其他預(yù)訓(xùn)練模型
seg = pkuseg.pkuseg(model_name=file_path)

text = seg.cut('京東商城信得過(guò),買的放心,用的省心、安心、放心!')

print(text)

jieba與pkusegwg性能對(duì)比

結(jié)巴的分詞速度說(shuō)明比較簡(jiǎn)單,描述中也沒(méi)有性能對(duì)比,更像是分詞內(nèi)容和環(huán)境。。

  • 1.5 MB / Second in Full Mode
  • 400 KB / Second in Default Mode
  • 測(cè)試環(huán)境: Intel(R) Core(TM) i7-2600 CPU @ 3.4GHz;《圍城》.txt

相比之下pkuseg選擇jieba、THULAC等國(guó)內(nèi)代表分詞工具包與pkuseg做性能比較。以下是在不同數(shù)據(jù)集上的對(duì)比結(jié)果:

從結(jié)果看pkuseg在精確度、召回率和F分?jǐn)?shù)上表現(xiàn)得相當(dāng)不錯(cuò)。性能方面我使用jupyter notebook進(jìn)行簡(jiǎn)單測(cè)試。

%%timeit
data['cut'] = data['comment'].apply(lambda x : [i for i in jieba.cut(x) if i not in stop_list])
%%timeit
data['cut'] = data['comment'].apply(lambda x: [i for i in seg.cut(x) if i not in stop_list])

輸出結(jié)果:

結(jié)巴:2.54 s ± 3.77 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

pkuseg:7.45 s ± 68.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

從數(shù)據(jù)結(jié)果上看,pkuseg分詞的時(shí)間要高于結(jié)巴分詞的時(shí)間,當(dāng)然pkuseg提供多進(jìn)程來(lái)進(jìn)行分詞,性能方面也是可以提高的。

詞頻統(tǒng)計(jì)

到這里我們基本是已經(jīng)學(xué)會(huì)用Python庫(kù)進(jìn)行分詞,關(guān)于詞頻統(tǒng)計(jì)的方式也很多,我們先將所有分詞合并在一起方便統(tǒng)計(jì)。

# 將所有的分詞合并
words = []

for content in data['cut']:
 words.extend(content)

方式一:

# 創(chuàng)建分詞數(shù)據(jù)框
corpus = pd.DataFrame(words, columns=['word'])
corpus['cnt'] = 1

# 分組統(tǒng)計(jì)
g = corpus.groupby(['word']).agg({'cnt': 'count'}).sort_values('cnt', ascending=False)

g.head(10)

方式二:

# 導(dǎo)入相關(guān)庫(kù)
from collections import Counter
from pprint import pprint
counter = Counter(words)

# 打印前十高頻詞
pprint(counter.most_common(10))

[('不錯(cuò)', 3913),

('安裝', 3055),

('好', 2045),

('很好', 1824),

('買', 1634),

('熱水器', 1182),

('挺', 1051),

('師傅', 923),

('美', 894),

('送貨', 821)]

結(jié)尾

我個(gè)人的使用建議,如果想簡(jiǎn)單快速上手分詞可以使用結(jié)巴分詞,但如果追求準(zhǔn)確度和特定領(lǐng)域分詞可以選擇pkuseg加載模型再分詞。另外jieba和THULAC并沒(méi)有提供細(xì)分領(lǐng)域預(yù)訓(xùn)練模型,如果想使用自定義模型分詞需使用它們提供的訓(xùn)練接口在細(xì)分領(lǐng)域的數(shù)據(jù)集上進(jìn)行訓(xùn)練,用訓(xùn)練得到的模型進(jìn)行中文分詞。

更多關(guān)于Python中文分詞庫(kù)jieba,pkusegwg的相關(guān)文章可以點(diǎn)擊下面的相關(guān)鏈接

相關(guān)文章

  • Python實(shí)現(xiàn)基于多線程、多用戶的FTP服務(wù)器與客戶端功能完整實(shí)例

    Python實(shí)現(xiàn)基于多線程、多用戶的FTP服務(wù)器與客戶端功能完整實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)基于多線程、多用戶的FTP服務(wù)器與客戶端功能,結(jié)合完整實(shí)例形式分析了Python多線程、多用戶FTP服務(wù)器端與客戶端相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-08-08
  • python按修改時(shí)間順序排列文件的實(shí)例代碼

    python按修改時(shí)間順序排列文件的實(shí)例代碼

    這篇文章主要介紹了python按修改時(shí)間順序排列文件的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07
  • python使用pandas實(shí)現(xiàn)篩選功能方式

    python使用pandas實(shí)現(xiàn)篩選功能方式

    在數(shù)據(jù)分析的過(guò)程中通常要對(duì)數(shù)據(jù)進(jìn)行清洗與處理,而其中比較重要和常見(jiàn)的操作就有對(duì)數(shù)據(jù)進(jìn)行篩選與查詢,下面這篇文章主要給大家介紹了關(guān)于python使用pandas實(shí)現(xiàn)篩選功能方式的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Qt Quick QML-500行代碼實(shí)現(xiàn)合成大西瓜游戲

    Qt Quick QML-500行代碼實(shí)現(xiàn)合成大西瓜游戲

    合成大西瓜游戲是前段時(shí)間比較火的小游戲,最近小編閑來(lái)無(wú)事,通過(guò)研究小球碰撞原理親自寫碰撞算法實(shí)現(xiàn)一個(gè)合成大西瓜游戲,下面小編把我的實(shí)現(xiàn)思路及核心代碼分析出來(lái),供大家參考
    2021-05-05
  • numpy.unique()使用方法

    numpy.unique()使用方法

    本文主要介紹了numpy.unique()使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python matplotlib 動(dòng)畫繪制詳情

    Python matplotlib 動(dòng)畫繪制詳情

    這篇文章主要介紹了Python matplotlib 動(dòng)畫繪制,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09
  • Selenium chrome配置代理Python版的方法

    Selenium chrome配置代理Python版的方法

    這篇文章主要介紹了Selenium chrome配置代理Python版的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 實(shí)例講解Python設(shè)計(jì)模式編程之工廠方法模式的使用

    實(shí)例講解Python設(shè)計(jì)模式編程之工廠方法模式的使用

    這篇文章主要介紹了Python設(shè)計(jì)模式編程之工廠方法模式的運(yùn)用實(shí)例,文中也對(duì)Factory Method模式中涉及到的角色作出了解析,需要的朋友可以參考下
    2016-03-03
  • 利用pygame完成動(dòng)畫精靈和碰撞檢測(cè)

    利用pygame完成動(dòng)畫精靈和碰撞檢測(cè)

    這篇文章主要介紹了利用pygame完成動(dòng)畫精靈和碰撞檢測(cè),代碼詳細(xì),內(nèi)容豐富,對(duì)于想要學(xué)習(xí)pygame的朋友來(lái)講是一個(gè)不錯(cuò)的練習(xí),需要的朋友可以參考下
    2021-04-04
  • pandas計(jì)算相關(guān)系數(shù)corr返回空的問(wèn)題解決

    pandas計(jì)算相關(guān)系數(shù)corr返回空的問(wèn)題解決

    本文主要介紹了pandas計(jì)算相關(guān)系數(shù)corr返回空的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評(píng)論