溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

結(jié)巴分詞的Python與R語言基礎(chǔ)用法是怎樣的

發(fā)布時(shí)間:2021-11-22 14:16:39 來源:億速云 閱讀:220 作者:柒染 欄目:云計(jì)算

本篇文章給大家分享的是有關(guān)結(jié)巴分詞的Python與R語言基礎(chǔ)用法是怎樣的,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

人們說話不是一個(gè)詞一個(gè)詞崩出來的,文章也就由句子組成。要想讓機(jī)器識(shí)別美文,體會(huì)中華名族漢語的博大精深,不是不可能。但是,首先需要將其轉(zhuǎn)化成其可以識(shí)別的模式——詞語。分詞是自然語言處理(NLP)中最底層、最基本的模塊,分詞精度的好壞將直接影響文本分析的結(jié)果。

這里介紹著名的分詞方法:結(jié)巴分詞以及基本分詞方法在Python和R語言中的用法。

Python中的結(jié)巴分詞

 Python中文分詞的三種常用模式

  • 精確模式:

  • 全模式

  • 搜索引擎模式

三種模式默認(rèn)都采用隱馬爾科夫模型分詞;同時(shí),結(jié)巴分詞支持繁體分詞和自定義字典方法。

導(dǎo)入模塊:import jieba
(1)、精確模式:
>>> test = '十堰有道家發(fā)源地武當(dāng)山'
>>> cut1 = jieba.cut(test)
>>> type(cut1)
<class 'generator'>
>>> print('精確分詞結(jié)果:',' '.join(cut1))

Cut1不能直接查看,‘ ‘.join(cut1)函數(shù)指用空格分開cut1里面的元素,然后通過print()函數(shù)才能查看。

精確分詞結(jié)果: 十堰 有 道家 發(fā)源地 武當(dāng)山

(2)、全模式:
>>> cut2 = jieba.cut(test,cut_all = True)
>>> print('全模式分詞結(jié)果:',' '.join(cut2))
全模式分詞結(jié)果: 十堰 有 道家 發(fā)源 發(fā)源地 源地 武當(dāng) 武當(dāng)山

把所有可能的詞都考慮進(jìn)來了。“精確模式”其實(shí)有默認(rèn)參數(shù)cut_all = False。顯然,全模式不管分詞后意思會(huì)不會(huì)有歧義,只管快速分出所有可能的詞,不適合做文本分析。

(3)、搜索引擎模式:
>>> cut3 = jieba.cut_for_search(test)
>>> print('搜索引擎模式分詞結(jié)果:',' '.join(cut3))
搜索引擎模式分詞結(jié)果: 十堰 有 道家 發(fā)源 源地 發(fā)源地 武當(dāng) 武當(dāng)山

搜索引擎模式也會(huì)給出所有可能的分詞結(jié)果,但是搜索引擎模式對(duì)于詞典中不存在的詞,比如一些很少見、新詞,卻能給出正確的分詞結(jié)果。

添加自定義詞典
Path = ‘詞典路徑’
jieba.load_userdict (path3)
然后分詞即可。

提取關(guān)鍵詞

對(duì)于一篇文章,提取關(guān)鍵詞,比如指定提取5個(gè)關(guān)鍵詞:

jieba.analyse.extract_tags(dat,topK = 5)

注意:親測(cè),詞典一般是.txt,默認(rèn)是ASCII格式,應(yīng)該另存為utf8模式,為什么?——有中文。其實(shí),幫助文檔里面有的。

更多用法:help('jieba')獲得更多詳細(xì)介紹。

R語言結(jié)巴分詞

"結(jié)巴"中文分詞的R語言版本,支持最大概率法,隱式馬爾科夫模型,索引模型,混合模型,共四種分詞模式,同時(shí)有詞性標(biāo)注,關(guān)鍵詞提取,文本Simhash相似度比較等功能。

包的下載與安裝:
>install.packages('jiebaRD')

>install.packages('jiebaR')

> library(jiebaRD)
> library(jiebaR)

分詞
> test <- '革命尚未成功,同志仍需努力!'
首先需要建立分詞引擎
> seg<-worker()
這里“<=”表示分詞運(yùn)算符
> seg<=test
 [1] "革命" "尚未" "成功" "同志" "仍" "需" "努力"
與下面這句效果一樣
> segment(test,seg)
 [1] "革命" "尚未" "成功" "同志" "仍" "需" "努力"
也就是有兩種寫法:
(1)、seg<=test
(2)、segment(test,seg)
后面的類似都有兩種寫法。

詞性標(biāo)注:

可以使tag來進(jìn)行分詞和詞性標(biāo)注, 詞性標(biāo)注使用混合模型分詞,標(biāo)注采用和 ictclas 兼容的標(biāo)記法。
>seg<-woker('tag')
> test <- '革命尚未成功,同志仍需努力!'

> segment(test,seg)
    vn      d      a      n     zg      v     ad
"革命" "尚未" "成功" "同志"   "仍"   "需" "努力"
這里seg <= test也是一樣的,后面一樣有這樣寫法,只寫一種,不再強(qiáng)調(diào)指出。

關(guān)鍵詞提取:

關(guān)鍵詞提取所使用逆向文件頻率(IDF)文本語料庫可以切換成自定義語料庫的路徑,使用方法與分詞類似。topn參數(shù)為關(guān)鍵詞的個(gè)數(shù),這里只提取一個(gè)關(guān)鍵詞:
> seg2<-worker('keywords',topn = 1)
> keywords(test,seg2)
6.13553
 "同志"

Simhash 與海明距離:

對(duì)中文文檔計(jì)算出對(duì)應(yīng)的simhash值。simhash是谷歌用來進(jìn)行文本去重的算法,現(xiàn)在廣泛應(yīng)用在文本處理中。Simhash引擎先進(jìn)行分詞和關(guān)鍵詞提取,后計(jì)算Simhash值和海明距離。
> test <- '革命尚未成功,同志仍需努力!'
> seg3<-worker('simhash',topn = 2)
> simhash(test,seg3)
 $simhash
 [1] "13489182016966018967"
 $keyword
 6.13553 6.0229
 "同志" "努力"

列表分詞:
支持一次性對(duì)多個(gè)列表(每個(gè)元素為文本)進(jìn)行分詞。
test2 <- '十堰有道家發(fā)源地武當(dāng)山'
> apply_list(list(test,test2), seg)
[[1]]
    vn      d      a      n     zg      v     ad
"革命" "尚未" "成功" "同志"   "仍"   "需" "努力"
[[2]]
      ns        v        n        n       ns
  "十堰"     "有"   "道家" "發(fā)源地" "武當(dāng)山"

去除停止詞

>seg <- worker(stop_word = STOPPATH)

還有一些其它設(shè)置,比如:
show_dictpath():顯示默認(rèn)的詞典路徑,有jieba.dict.utf8(最大概率法)、hmm_model.utf8(隱式馬爾科夫模型),這兩個(gè)都是作為分詞需要用到的詞典;idf.utf8(TF-IDF算法)、stop_words.utf8(停用詞詞典),這兩個(gè)詞典是做關(guān)鍵詞抽取之用。
edit_dict(name = "user"):默認(rèn)編輯用戶自定義詞典,還有system(可以打開編輯jieba.dict.utf8),stop_word(停用詞典)兩個(gè)參數(shù)值供選擇。

還有一些其它參數(shù),具體參見help("jiebaR"),獲取更多詳細(xì)信息,學(xué)習(xí)利用幫助信息對(duì)于R語言的學(xué)習(xí)很重要。

其實(shí),具體分詞引擎worker()怎么設(shè)置,我們可以幫助一下:help('worker')就會(huì)有:

worker(type = "mix", dict = DICTPATH, hmm = HMMPATH, user = USERPATH,idf = IDFPATH, stop_word = STOPPATH, write = T, qmax = 20, topn = 5,encoding = "UTF-8", detect = T, symbol = F, lines = 1e+05,output = NULL, bylines = F, user_weight = "max")

這里的一些參數(shù):

type, 引擎類型
dict, 系統(tǒng)詞典
hmm, HMM模型路徑
user, 用戶詞典
idf, IDF詞典
stop_word, 關(guān)鍵詞用停止詞庫
write, 是否將文件分詞結(jié)果寫入文件,默認(rèn)FALSE
qmax, 最大成詞的字符數(shù),默認(rèn)20個(gè)字符
topn, 關(guān)鍵詞數(shù),默認(rèn)5個(gè)
encoding, 輸入文件的編碼,默認(rèn)UTF-8
detect, 是否編碼檢查,默認(rèn)TRUE
symbol, 是否保留符號(hào),默認(rèn)FALSE
lines, 每次讀取文件的最大行數(shù),用于控制讀取文件的長度。大文件則會(huì)分次讀取。
output, 輸出路徑
bylines, 按行輸出
user_weight, 用戶權(quán)重

以上就是結(jié)巴分詞的Python與R語言基礎(chǔ)用法是怎樣的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI