结巴分词及可视化

来源:转载

结巴分词

shangfr

2015年11月14日

  • 中文分词
  • 结巴中文分词的R语言版本
  • 原理
  • 特点
  • 特性
  • 参考
  • 安装
  • 实例

中文分词

中文分词(Chinese Word Segmentation) 就是将连续的字序列按照一定的规范重新组合成词序列的过程。现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。准确度较高的是统计分词算法,常用的有最大概率法和隐式马尔科夫模型。

最大概率法通过计算两个汉字X、Y的相邻共现概率,使得其后验概率P(X|Y)最大,先生成可信度较高的词语。

隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。

分词结束后,接下来使用TF-IDF文本关键词特征提取算法,TF-IDF是一种统计方法,用以评估一字词对于一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降,按词语重要性从中提取特定数量的词语组成这篇文章的关键词集合。

结巴中文分词的R语言版本

结巴中文分词的R语言版本,支持最大概率法(Maximum Probability),隐式马尔科夫模型(Hidden Markov Model),索引模型(QuerySegment),混合模型(MixSegment),共四种分词模式,同时有词性标注,关键词提取,文本Simhash相似度比较等功能。


原理

中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词。其基本实现原理有三点:1. 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)2. 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合3. 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法

特点

  • 结巴中文分词支持三种分词模式:

    • 精确模式,试图将句子最精确地切开,适合文本分析;
    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,* * 适合用于搜索引擎分词。
  • 支持繁体分词
  • 支持自定义词典

特性

  • 支持 Windows , Linux操作系统(Mac 暂未测试)。
  • 通过Rcpp Modules实现同时加载多个分词系统,可以分别使用不同的分词模式* 和词库。
  • 支持多种分词模式、中文姓名识别、关键词提取、词性标注以及文本Simhash相似度比较等功能。
  • 支持加载自定义用户词库,设置词频、词性。
  • 同时支持简体中文、繁体中文分词。
  • 支持自动判断编码模式。
  • 比原“结巴”中文分词速度快,是其他R分词包的5-20倍。
  • 安装简单,无需复杂设置。
  • 可以通过Rpy2,jvmr等被其他语言调用。
  • 基于MIT协议。

参考

参考qinwf-GitHub使用指南Shiny 演示细胞词库转换

安装

install.packages("jiebaR")

install.packages("jiebaRD")

实例

library(jiebaRD)

library(jiebaR)

#jiebaR提供了四种分词模式,可以通过jiebar()来初始化分词引擎,使用segment()进行分词。

# 默认参数,建立分词引擎

# jiebar( type = "mix", dict = "inst/dict/jieba.dict.utf8",

# hmm = "inst/dict/hmm_model.utf8", # HMM模型数据

# user = "inst/dict/user.dict.utf8") # 用户自定义词库

mixseg = worker()

mixseg <= "江州市长江大桥参加了长江大桥的通车仪式" # <= 分词运算符

## [1] "江州" "市长" "江大桥" "参加" "了" "长江大桥"

## [7] "的" "通车" "仪式"

segment( "江州市长江大桥参加了长江大桥的通车仪式" , mixseg ) #第二种方式

## [1] "江州" "市长" "江大桥" "参加" "了" "长江大桥"

## [7] "的" "通车" "仪式"

文本关键词提取

在加载分词引擎时,可以自定义词库路径,同时可以启动不同的引擎:

  • 最大概率法(MPSegment),负责根据Trie树构建有向无环图和进行动态规划算法,是分词算法的核心。

  • 隐式马尔科夫模型(HMMSegment)是根据基于人民日报等语料库构建的HMM模型来进行分词,主要算法思路是根据(B,E,M,S)四个状态来代表每个字的隐藏状态。 HMM模型由dict/hmm_model.utf8提供。分词算法即viterbi算法。

  • 混合模型(MixSegment)是四个分词引擎里面分词效果较好的类,结它合使用最大概率法和隐式马尔科夫模型。

  • 索引模型(QuerySegment)先使用混合模型进行切词,再对于切出来的较长的词,枚举句子中所有可能成词的情况,找出词库里存在。

mixseg2 = worker( type = "mix" , dict = "dict/jieba.dict.utf8" ,

hmm = "dict/hmm_model.utf8" ,

user = "dict/test.dict.utf8" ,

detect=T, symbol = F,

lines = 1e+05, output = NULL

)

可以通过R语言常用的 \(符号重设一些worker的参数设置 , 如 WorkerName\)symbol = T,在输出中保留标点符号。一些参数在初始化的时候已经确定,无法修改, 可以通过WorkerName$PrivateVarible来获得这些信息。

关键词提取

关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径,使用方法与分词类似。topn参数为关键词的个数。

Simhash 与海明距离对中文文档计算出对应的simhash值。simhash是谷歌用来进行文本去重的算法,现在广泛应用在文本处理中。Simhash引擎先进行分词和关键词提取,后计算Simhash值和海明距离。

所用新闻文本

#设定参数,提取前二十个关键词

keys = worker("keywords", topn = 20)

#从网上下载一篇新闻稿,保存在桌面上:中国哪个地方到了最危险的时候.txt

outkey=keys <= "C:/Users/ShangFR/Desktop/中国哪个地方到了最危险的时候.txt"

outkey

## 254.521 120.77 98.5047 89.3766 85.7803 59.6143

## "东北" "东北地区" "增速" "发展" "经济" "振兴"

## 54.883 53.4812 47.6742 46.9568 45.7707 43.7176

## "企业" "农业" "中小企业" "GDP" "排名" "产业"

## 40.4343 40.2656 39.8852 39.1413 38.7185 37.3709

## "名义" "战略" "城市" "制造业" "吉林" "服务业"

## 37.0726 36.4983

## "辽宁" "信心"

关键词可视化

详 见 word-cloud-in-r

library(wordcloud)#可视化

## Loading required package: RColorBrewer

library(RColorBrewer)

wordcloud(outkey,as.numeric(names(outkey)), scale = c(7, 1),colors = rainbow(100))

title(main = "结巴分词-关键词")

<embed src="http://files2.17173.com/__flash/2011/10/21/honehone_clock_tr.swf"width="150" height="110">

Author:shangfr

邮箱:shangfr@foxmail.com

分享给朋友:
您可能感兴趣的文章:
随机阅读: