【中文分词】词典 正向最大匹配与逆向最大匹配【c语言实现】

分词是应用到人工智能中对话聊天机器人中的一种技术,英文的分词由于单词间是以空格进行分隔的,所以分词要相对的容易些,而中文就不同了,中文中一个句子的分隔就是以字为单位的了,而所谓的正向最大匹配和逆向最大匹配便是一种分词匹配的方法,这里以词典匹配说明

咋看起来好像很高科技的样子,其实也就是两个名词看起来比较高大上(小白是这么理解的),所谓词典正向最大匹配就是将一段字符串进行分隔,其中分隔的长度有限制,然后将分隔的子字符串与字典中的词进行匹配,如果匹配成功则下一轮匹配,只到所有字符串处理完毕,否则将子字符串从末尾去除一个字,再进行匹配,如此反复。逆向匹配与此类似,下面以一个例子来说明:

要进行分词的字符串:研究生命的起源
我们的字典中的内容:
研究
研究生
生命


起源

最大匹配字数设定为5

正向最大匹配过程:
研究生命的
研究生命
研究生 #第一个词匹配成功

命的起源
命的起
命的
命 #第二个词匹配成功,一个单字

的起源
的起
的 #第三个词匹配成功

起源 #第四个词匹配成功

那么正向最大匹配的结果就是

研究生 命 的 起源

现在我们来看看逆向最大匹配的过程:

生命的起源
命的起源
的起源
起源 #第一个词匹配成功

研究生命的
究生命的
生命的
命的
的 #第二个词匹配成功

研究生命
究生命
生命 #第三个词匹配成功

研究 #第四个词匹配成功

所以逆向最大匹配后的结果为

研究 生命 的 起源

因为中文比较复杂,逆向最大匹配有时候往往会比正向要准确

从上面可以看出来,其实进行匹配并不困难,当然首先我们得找到一个好的词典,我在做实验的时候找的是现代汉语常用词表
,然后将其加载进一个散列表里,最后从输入读取字符串进行匹配,下面放上代码(这里说一下,做中文分词这个还是使用脚本语言比较好,比如python,c语言做这个比较坑,特别是对字符串的分隔要掌握好,而且非常麻烦,我这里所处理的中文是UTF-8编码的,所以如果你输入的字符串不是UTF-8编码可能本程序会无法工作)

–阅读次数(72)

发表评论

电子邮件地址不会被公开。

*