1

我想做一些基本的希伯来语词干。

我能找到的所有自定义分析器的示例总是合并其他分析器和过滤器,但从不自己进行任何字符串级别的处理。

例如,如果我想创建一个分析器,对于它获取的流中的每个术语,我必须做什么,按照以下规则发出一个或两个术语:如果传入术语以“a”以外的任何其他内容开头,它应该按原样通过。如果传入的术语以“a”开头,则应使用两个术语:原始术语和第二个不带前导“a”且具有较低提升的术语。

因此,如果文档有“help away”,它将返回“help”、“away”和“way^0.8”。

我应该覆盖分析器的哪些方法来执行此操作?(指向类似性质示例的指针将非常有帮助)。

谢谢

4

1 回答 1

1

这是一个例子:http ://www.java2s.com/Open-Source/Java-Document/Search-Engine/lucene/org/apache/lucene/wordnet/SynonymTokenFilter.java.htm

简要扫描代码,它似乎应该在同一位置发出额外的标记(同义词)。它通过覆盖你必须为你的问题做的 incrementToken() 来做到这一点(维护一堆下一个令牌,一个一个地返回)。

如果此示例不起作用,请尝试找到一个解释如何使用 Lucene 实现同义词过滤器的示例,它几乎与您的问题相同。Lucene in Action这本书有一个很好的例子,代码可以在这里找到: http : //www.manning.com/hatcher3/LIAsourcecode.zip,classSynonymFilter

于 2012-01-16T11:45:44.783 回答