我在Java中使用Bloom Filter实现了一个字典/检查器。但是,我发现最适合我的应用程序找到多字词的最长匹配前缀。
例如,在我的Bloom Filter中,我有以下几个字:
{'mac', 'macbook', 'macbookpro'}
经过一些文本分析后,我发现人们倾向于改变他们写某个单词的方式,例如
'I love my mac book pro' or 'I love my MacBook Pro' or 'I love my macbookpro'
现在让我处理这样的句子,如果这是在布隆过滤器中,我会单独检查每个单词。如果没有,我希望过滤掉这个词。例如,
I -> no
love -> no
my -> no
但现在是棘手的部分。 “Mac”肯定在字典中,但“macbook”也是如此,甚至更好的是“macbookpro”
mac -> yes
book -> no
pro -> no
macbook -> yes
macbookpro -> yes
由于'macbookpro'是最长的,我希望将这个词作为最终输出。
是否有一些算法或有效的方法让我用Bloom Filter完成这个?
修改 需要注意的是,这样的多词术语不一定需要先匹配,然后可能不匹配才能成为最长的词。
例如,在我的字典中只有单词{'macbook', 'macbookpro'}
我有句'I love my mac book pro'
此处,'mac'
一词会首先导致不匹配,但'macbook'
和'macbookpro'
会匹配。