文本预处理:分词

分词是文本分析工作的第一步,分词的准确性直接影响对后续任务的表现。

1. 分词任务

根据语言特点,分词任务主要可分类两大类。一类是英文等拉丁语系文本的分词,英文单字成词,且词与词之间由空格隔开,该类任务较为简单,直接按空格分开即可。

另一类是中文文本分词,中文多字成词,且词与词之间没有明显区分标志,因此中文分词较为复杂,需借助词表和算法等工具实现分词需求。而幸运的是,目前分词技术已相对成熟,实际工作中可使用Jieba分词等开源工具直接完成分词需求。

2. 分词算法

中文分词都是基于词库匹配实现的,分词方法主要分为不考虑句子语义,直接基于词库匹配规则的分词方法,和考虑句子语义,基于概率统计的分词方法两大类。其中,按匹配规则分词常使用最大匹配算法

而考虑语义的概率统计分词方法,要先基于词库获取所有可能的分词组合结果,然后将所有结果输入语言模型,计算出概率最大的组合作为最终的分词结果。针对分词任务实时性的需求,出于效率考虑,常用unigram语言模型 + 维特比算法快速得到考虑语义的分词结果。

(更近一步说,HMM、CRF等时间序列模型可以得到更好的概率统计分词效果,它们在成熟开源工具中被广泛使用)

2.1 最大匹配算法

最大匹配是一种基于匹配单词长度最大化的贪心算法,它分为前向最大匹配、后向最大匹配和双向最大匹配三种分词方式。

前向最大匹配算法按从前向后顺序,将文本子字符串与词库中单词进行匹配,匹配时词库单词按长度从大到小排列依次参与匹配(文本子字符串切片长度与匹配词库单词长度相同),匹配成功则将字符子串划分为一个独立的单词并继续匹配后续文本。后向最大匹配算法则是将文本按从后向前顺序完成上述过程。

小贴士:将词典中同长度单词编制成一哈希表,然后将文本子字符串进行哈希查找有无匹配项,可最大匹配算法的时间复杂度从 O ( n 2 ) O(n^2) O(n2)降低到 O ( n ) O(n) O(n)

2.2 unigram模型 + 维特比算法

unigram模型假设词与词之间相互独立,即多个词语共同出现的概率等于它们各自单独出现的概率的乘积。

维特比算法将文本改造成一个具有n+1个节点的有向图(n等于文本字数),然后将文本中的每一个字依次放到初始节点到终止节点的连线上(每条连接仅放一个字),如下图所示。
在这里插入图片描述
然后连接自始向终方向的所有可能连线,每条连线所包含的单字组成此连线所代表的词,每条从始至终的路径代表一种可能的分词结果。在寻找最大概率分词结果前,还应遍历每条表所代表的词是否在词库中出现,若未在词库中出现应删除这条边。

维特比算法是一种基于贪心策略的动态规划算法,可用它找出从初始节点到终止节点的最短路径,为概率最大的分词结果。

3. 分词工具

工具名称适用语言项目网址
Jieba分词中文https://github.com/fxsjy/jieba
SnowNLP中文https://github.com/isnowfy/snownlp
LTP中文http://www.ltp-cloud.com/
HanLP中英日俄法德等104种语言https://github.com/hankcs/HanLP
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值