python nlp 分词算法 正向与方向匹配法
2019-02-28 本文已影响0人
雨夜剪魂
正向算法的思路
假设一段语句为:
南京市长江大桥
字典为:
江
南京
长江
大桥
市长
南京市
南京市长
长江大桥
那么, 在正向匹配中,需要从左到右,截取最大字典长度(也就是长江大桥等为4长度)的字符, 截取后,与字典匹配,如果找到了该词,则移动索引到该词后面。如果没找到就从左到右,截取第二最大长度的字符,截取后,再与字典进行匹配。找到该词后,移动到后面,再按照此方法递归查找匹配。
因为查找是从左到右进行匹配的,索引必须就是0到字符长度这样的范围,这个为正方向,所以名为,正向匹配法。
那么,在反向匹配中,需要从右到左,截取最大字典里面词语最大的长度的字符,截取后,与字典匹配,如果找到该词,则移动到它的签名。如果没有找到,就截取第二大长度的字符,再与字典进行匹配。
在这个例子中,正向匹配的结果为['南京市长', '江', '大桥'],形成了3个词,那么方向匹配方法呢,['南京市', '长江大桥'], 2个词。
这里,就可以看出反向匹配法的效果比正向匹配要好些。这个原因就是,汉语在进行用语的时候,主体会在前,宾语在后,所以从右至左,效果比较好。比如,通常的语句中——我在天安门广场吃炸鸡等。从左至右,往往会忽略后面的重要词,导致只与前面的匹配了。但也有其他方向歧义导致 效果也不理想。
最好的方法就是使用双向匹配,获取两种方向的分词,统计分词结果少的(说明分词信息读),比如上面一个是3个词,一个是2个词,很明显的,2个词的涵盖的信息更多。