jieba分詞的Python與R語言基礎用法介紹

2021-09-09 09:18:18 字數 4022 閱讀 8057

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

這裡介紹著名的分詞方法:結巴分詞以及基本分詞方法在python和r語言中的用法。

python

中文分詞的三種常用模式

三種模式預設都採用隱馬爾科夫模型分詞;同時,結巴分詞支援繁體分詞和自定義字典方法。

匯入模組:import jieba

(1)、精確模式:

>>> test = '**有道家發源地武當山'

>>> cut1 = jieba.cut(test)

>>> type(cut1)

>>> print('精確分詞結果:',' '.join(cut1))

cut1

不能直接檢視,『 『.join(cut1)函式指用空格分開cut1裡面的元素,然後通過print()函式才能檢視。

精確分詞結果: ** 有 道家 發源地 武當山

(2)、全模式:

>>> cut2 = jieba.cut(test,cut_all = true)

>>> print('全模式分詞結果:',' '.join(cut2))

全模式分詞結果: ** 有 道家 發源 發源地 源地 武當 武當山

把所有可能的詞都考慮進來了。「精確模式」其實有預設引數cut_all = false。

顯然,全模式不管分詞後意思會不會有歧義,只管快速分出所有可能的詞,不適合做文字分析。

(3)、搜尋引擎模式:

>>> cut3 = jieba.cut_for_search(test)

>>> print('搜尋引擎模式分詞結果:',' '.join(cut3))

搜尋引擎模式分詞結果: ** 有 道家 發源 源地 發源地 武當 武當山

搜尋引擎模式也會給出所有可能的分詞結果,但是搜尋引擎模式對於詞典中不存在的詞,比如一些很少見、新詞,卻能給出正確的分詞結果。

新增自定義詞典

path = 『詞典路徑』

jieba.load_userdict (path2)

然後分詞即可。

jieba.analyse.extract_tags(dat,topk = 5)
注意

:親測,詞典一般是.txt,預設是ascii格式,應該另存為utf8模式,為什麼?——有中文。其實,幫助文件裡面有的。

"

>install.packages('jiebard')

>install.packages('jiebar')

> library(jiebard)

> library(jiebar)

分詞

> test <- '革命尚未成功,同志仍需努力!'

首先需要建立分詞引擎

> seg<-worker()

這裡「<=」表示分詞運算子

> seg<=test

[1] "革命" "尚未" "成功" "同志" "仍" "需" "努力"

與下面這句效果一樣

> segment(test,seg)

[1] "革命" "尚未" "成功" "同志" "仍" "需" "努力"

也就是有兩種寫法:

(1)、seg<=test

(2)、segment(test,seg)

後面的類似都有兩種寫法。

詞性標註:可以使tag來進行分詞和詞性標註, 詞性標註使用混合模型分詞,標註採用和 ictclas 相容的標記法。

>seg<-woker('tag')

> test <- '革命尚未成功,同志仍需努力!'

> segment(test,seg)

vn      d      a      n     zg      v     ad 

"革命" "尚未" "成功" "同志"   "仍"   "需" "努力"

這裡seg <= test也是一樣的,後面一樣有這樣寫法,只寫一種,不再強調指出。

> seg2<-worker('keywords',topn = 1)

> keywords(test,seg2)

6.13553 

"同志"

simhash與海明距離:

> test <- '革命尚未成功,同志仍需努力!'

> seg3<-worker('simhash',topn = 2)

> simhash(test,seg3)

$simhash

[1] "13489182016966018967"

$keyword

6.13553 6.0229 

"同志" "努力"

列表分詞:

支援一次性對多個列表(每個元素為文字)進行分詞。

test2 <- '**有道家發源地武當山'

[[1]]

vn      d      a      n     zg      v     ad 

"革命" "尚未" "成功" "同志"   "仍"   "需" "努力" 

[[2]]

ns        v        n        n       ns 

"**"     "有"   "道家" "發源地" "武當山"

去除停止詞

>seg <- worker(stop_word = stoppath)
還有一些其它設定,比如:

show_dictpath()

:edit_dict(name = "user")

:預設編輯使用者自定義詞典,還有system(可以開啟編輯jieba.dict.utf8),stop_word(停用詞典)兩個引數值供選擇。

還有一些其它引數,具體參見help("jiebar"),獲取更多詳細資訊,學習利用幫助資訊對於r語言的學習很重要。

其實,具體分詞引擎worker()怎麼設定,我們可以幫助一下:help('worker')就會有:

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")
這裡的一些引數:

type, 引擎型別 

dict, 系統詞典 

hmm, hmm模型路徑 

user, 使用者詞典 

idf, idf詞典 

write, 是否將檔案分詞結果寫入檔案,預設false 

qmax, 最大成詞的字元數,預設20個字元 

encoding, 輸入檔案的編碼,預設utf-8 

detect, 是否編碼檢查,預設true 

symbol, 是否保留符號,預設false 

lines, 每次讀取檔案的最大行數,用於控制讀取檔案的長度。大檔案則會分次讀取。 

output, 輸出路徑 

bylines, 按行輸出 

user_weight, 使用者權重

python 中文jieba分詞

import os import jieba from collections import counter def words txt print jieba.cut txt lista jieba.cut txt 返回的結構都是乙個可迭代的 generator,可以使用 for 迴圈來獲得分詞後...

關於jieba分詞 Python

做詞云視覺化的時候,一般都用乙個庫叫jieba,它是用來分詞的。jieba庫在安裝時,會附帶乙個詞庫,這個詞庫中包含了日常漢語的詞語和詞性。在分詞時,jieba庫會先基於詞庫對文字進行匹配,生成文字中的漢字最有可能形成的詞。然後將這些詞組成乙個dag,用動態規劃演算法來查詢最大的概率路徑,盡可能不將...

jieba 利用jieba分詞

目錄 三種分詞模式 新增自定義詞典進行分詞 jieba提供了三種分詞模式,分別是全模式,精確模式和搜尋引擎模式。全模式下會將所有可能的詞語都進行分詞,精確模式下會盡可能的將句子精確切開,搜尋引擎模式實在精確模式的基礎上,對長詞再進行劃分,提高分詞的召回率。使用cut和cut for search即可...