中文与英文做文本分析很多时候会多一个分词步骤,因为默认情况下,文本分析软件会默认用空格作为分隔符处理文本,所以很多软件需要先将中文文本分词,整理成像英文那样用空格间隔单词的数据形式。
在R中有一个jiebaR中文分词包,可以帮我们做分词操作~
install.packages("jiebaR")
jiebaR::segment(code, jiebar)
code: 中文文本
jiebar: 老板segment, 员工是jiebaR包中的worker()函数
对字符串分词
library(jiebaR)
## Loading required package: jiebaRD
#初始化jiebaR中的worker,将这个工人命名为tokenizer
tokenizer <- worker()
#segment函数雇佣tokenizer干分词的活
words <- segment("市长江大桥视察长江大桥", tokenizer)
words
## [1] "市长" "江大桥" "视察" "长江大桥"
刚刚给segment雇佣的worker时没有设置工作要求,所以干的活比较粗糙。现在我们把分词这个工作细致化。
worker(
type = "mix",
user = USERPATH,
stop_word =
STOPPATH,
topn = 5,
symbol = F)
默认type="mix"
mp(最大概率模型)- 基于词典和词频
hmm(HMM模型)- 基于 HMM 模型,可以发现词典中没有的词
mix(混合模型)- 先用 mp 分,mp 分完调用 hmm 再来把剩余的可能成词的单字分出来。
tag(标记模型)- 词性标记,基于词典的
分词结果带着词性
tokenizer <- worker(type='tag')
words <- segment("市长江大桥视察长江大桥", tokenizer)
words
## n x v ns
## "市长" "江大桥" "视察" "长江大桥"
有时候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] "大" "鳄"
是否保留符号,默认不保留
tokenizer <- worker()
text <- "在黄金市场上,大妈战胜华尔街金融大鳄!!!"
segment(text, tokenizer)
## [1] "在" "黄金市场" "上" "大妈" "战胜" "华尔街" "金融"
## [8] "大" "鳄"
保留符号
tokenizer <- worker(symbol = TRUE)
text <- "在黄金市场上,大妈战胜华尔街金融大鳄!!!"
segment(text, tokenizer)
## [1] "在" "黄金市场" "上" "," "大妈" "战胜"
## [7] "华尔街" "金融" "大" "鳄" "!" "!"
## [13] "!"
R语言 | 读写txt、csv、excel文件
R语言 | 数据操作dplyr包
Python相关[更新] Python网络爬虫与文本数据分析
读完本文你就了解什么是文本分析
文本分析在经管领域中的应用概述
综述:文本分析在市场营销研究中的应用
plotnine: Python版的ggplot2作图库
小案例: Pandas的apply方法
stylecloud:简洁易用的词云库
用Python绘制近20年地方财政收入变迁史视频
Wow~70G上市公司定期报告数据集
漂亮~pandas可以无缝衔接Bokeh
YelpDaset: 酒店管理类数据集10+G
后台回复关键词【jiebaR】获取本文代码和数据
“分享”和“在看”是更好的支持!