【发布时间】:2020-07-08 11:13:49
【问题描述】:
我正在尝试编写一个 Lucene 过滤器,它将“what's”替换为“what is”、“can't”替换为“cannot”等。
在incrementToken() 中,如果术语是我要替换的字符串之一,我会计算一个替换字符串(例如 what's -> what is)并将其推送到 CharTermAttribute:
termAttr.copyBuffer(replacement.toCharArray, 0, replacement.length)
但这似乎不起作用,当我搜索'what's'时,我仍然得到包含'what's'的结果,而不是被视为'what's'的字符串。
实现此目的的正确方法是什么?我需要创建分词器吗? (理想情况下,我想保留 StandardTokenizer 并添加到它而不是替换它)
【问题讨论】:
-
我不确定您如何可靠地替换诸如
he's之类的东西 - 它可能是he has或he is,具体取决于上下文(“他在这里”与“他明白了” ”)。另一方面,Lucene 可以使用同义词来扩充您的索引词(其中he has和he is是he's的同义词)。我有一个例子,如果你认为它可能有用的话。但这不是一个替代过程 - 所以它可能没有帮助。