首页 > 代码库 > NLP: 中文分词---正向匹配 (Forward Matching)

NLP: 中文分词---正向匹配 (Forward Matching)

在采用FMM (正向最大匹配) 进行中文分词的时候, 可能会存在比较多的交集歧义, 这个时候为了解决交集歧义的问题, 可以采用 FM (Forwar Matching, 正向匹配) 进行中文分词, 正向匹配会在最大匹配的路径上查找所有可能成词的term(这里所有可能成词的term的意思是在构建索引的时候所有切分出来的词, 因为不是路径上的所有节点都会是切分成的词)。


http://blog.csdn.net/watkinsong/article/details/37696389  这个文章中给出了FMM(正向最大匹配) 的算法实现。


算法描述如下图给出, 下面的图比较多, 但是描述的比较详细。 图后给出代码实现。

FM算法最大的问题就是切分的结果太琐碎, 因为在一次FMM(正向最大匹配)的过程中, 路径上所有是term的节点都会作为一个切分结果。 这样做的好处就是可以减少交集歧义的影响。
























 接下来根据算法给出代码。 代码假设已经存在索引, 并且索引采用trie树进行保存。

仍然是JS代码。。。


var lunr = require("./lunr.js")
var idxdata = http://www.mamicode.com/require("./idx.json")>
测试: 

query: "互联网金宝"

切分结果: [ ‘互联网‘, ‘网‘, ‘网金宝‘, ‘金‘, ‘宝‘ ]


这里, 因为在切分 “联网金宝”子句时, “联” 在索引中出现, 但是并不是一个term, 所以跳过“联”, 进行下一次切分“网金宝