基于最大长度词语匹配的简单的汉语分词方法

 

我把做好的聊天机器人给群里的朋友测试,他测试的语句是这样的:“你好”,“你会说中文吗?”,“你吃饭了吗?”

因为我之前没告诉他只支持简单的英文,他就理所当然地用中文测试。测试后,他问我,可以加上中文支持吗?我说:“没问题,加上足够的关键字判断和语句库而已。”,后来思考一下,发觉没这么简单。

中文和英文有个最大的不同是,英文词组之间是分开的,有空格或标点符号,而中文因为字的表意功能太强,差不多每个字都有自己的意思,

 

所以词组之间没有空格隔开,而我用的机器人是基于词组工作的,如果要支持中文,就以为着必须把中文句子进行分词。

比如:我去学校上课

要转换为:我|去|学校|上课

 

那么具体如何分词呢?

我认为,之所以“我去学校上课”可以分割为"我|去|学校|上课"是因为"我","去","学校","上课"这几个元素都是词组,而且这么切分非常恰当,能表达需要表达的意思,而切分为

我去|学|校上|课

就会有一些词莫名其妙,“我去“不是个,词“校上”也什么都不是。

综上所诉,分词要以词为单位分,也就是分出的每个元素都能完整表意,都是个“词”。

 

还有个问题,那就是如果遇到这种情况

我学习编译原理

该如何切割呢?

我|学习|编译|原理

我|学习|编译原理

都满足我们上面提出的条件,切出的都是词。但是我们要选择后者,因为“编译原理“作为一个整体相对于“我学习编译“后再来个原理好理解。

 

当然也有反例,比如

我吃饭团

可以切割为

我|吃|饭团

我|吃饭|团

明显前者才是正确的切割法,但是又不符合我们刚才提出的切更长的词更好。我估计这个问题可以通过切出的全体词组的合理性分析,词组使用频率分析,语义分析等等方法解决,但是那样就复杂了,而我现在只是简单地做一个聊天机器人而已。

现在我们就按从左向右切词,切最长词的方法来切词。

 

首先,我们需要一个单词列表,作为切词的依据。单词列表我是从CEDIT汉英辞典提取的,总共包含31992个词,比较少,但是做为测试用也足够了。使用提取工具把辞典索引转换为单词列表。提取工具在:StarDict格式辞典单词列表提取工具

 

因为我们是根据最长词语进行匹配的,所以需要把提取的词语按长度进行排序,程序如下:

 

 

使用如下命令转换

 

就可以得到排序好的wordlist。

 

 

现在是匹配单词和分词程序的主体了:

 

我们可以测试一下分词效果

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值