中文與英文做文本分析很多時候會多一個分詞步驟,因為默認情況下,文本分析軟體會默認用空格作為分隔符處理文本,所以很多軟體需要先將中文文本分詞,整理成像英文那樣用空格間隔單詞的數據形式。
在R中有一個jiebaR中文分詞包,可以幫我們做分詞操作~
安裝install.packages("jiebaR")
分詞jiebaR::segment(code, jiebar)
jiebar: 老闆segment, 員工是jiebaR包中的worker()函數對字符串分詞
library(jiebaR)## Loading required package: jiebaRD#初始化jiebaR中的worker,將這個工人命名為tokenizer
tokenizer <- worker()
#segment函數僱傭tokenizer幹分詞的活
words <- segment("市長江大橋視察長江大橋", tokenizer)
words## [1] "市長" "江大橋" "視察" "長江大橋"
worker()剛剛給segment僱傭的worker時沒有設置工作要求,所以幹的活比較粗糙。現在我們把分詞這個工作細緻化。
worker(
type = "mix",
user = USERPATH,
stop_word =
STOPPATH,
topn = 5,
symbol = F)
type默認type="mix"
hmm(HMM模型)- 基於 HMM 模型,可以發現詞典中沒有的詞mix(混合模型)- 先用 mp 分,mp 分完調用 hmm 再來把剩餘的可能成詞的單字分出來。分詞結果帶著詞性
tokenizer <- worker(type='tag')
words <- segment("市長江大橋視察長江大橋", tokenizer)
words## n x v ns
## "市長" "江大橋" "視察" "長江大橋"
user有時候jiebaR分詞容易把感興趣的詞分成更細粒度的詞,中國大媽這個詞,默認是會被分為中國 和 大媽 兩個詞。例如
tokenizer <- worker()
text <- "在黃金市場上,中國大媽戰勝華爾街金融大鱷"
segment(text, tokenizer)## [1] "在" "黃金市場" "上" "中國" "大媽" "戰勝"
## [7] "華爾街" "金融" "大" "鱷"這時候我們需要把中國大媽加到用戶自定義詞典中,通過詞典告訴worker,凡是遇到中國大媽,一律不許亂分,保持詞語其完整性。
diydict.txt我放到了data文件夾內,每行存放一個詞語。
library(jiebaR)
tokenizer <- worker(user="data/diydict.txt")
text <- "在黃金市場上,中國大媽戰勝華爾街金融大鱷"
segment(text, tokenizer)## [1] "在" "黃金市場" "上" "中國大媽" "戰勝" "華爾街" "金融"
## [8] "大" "鱷"
symbol是否保留符號,默認不保留
tokenizer <- worker()
text <- "在黃金市場上,大媽戰勝華爾街金融大鱷!!!"
segment(text, tokenizer)## [1] "在" "黃金市場" "上" "大媽" "戰勝" "華爾街" "金融"
## [8] "大" "鱷"保留符號
tokenizer <- worker(symbol = TRUE)
text <- "在黃金市場上,大媽戰勝華爾街金融大鱷!!!"
segment(text, tokenizer)## [1] "在" "黃金市場" "上" "," "大媽" "戰勝"
## [7] "華爾街" "金融" "大" "鱷" "!" "!"
## [13] "!"