2012-01-15 74 views
1

我想做一些基本的希伯来词干。创建一个Lucene分析器

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

例如,如果我想创建一个分析器,对于流中的每个术语,按以下规则发出一个或两个术语: 如果传入术语以其他任何“a”应该按原样传递。 如果即将到来的术语以“a”开始,那么应该修改两个术语:原始术语和第二个术语,没有前导“a”并且具有较低的提升。

因此,如果文档有“帮助”,它将返回“帮助”,“离开”和“方式^ 0.8”。

我应该重写哪些分析仪的方法来做到这一点? (指向一个类似自然例子的指针会非常有帮助)。

由于

回答

1

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

简言之扫描代码,似乎它应该在相同的位置(的同义词)发射附加令牌。它通过重写incrementToken()来完成,你必须为你的问题做些事情(维护一堆下一个令牌,一个接一个地返回)。

如果这个例子不起作用,试着找到一个解释你如何用Lucene实现同义词过滤器的例子,它几乎和你的问题一样。 Lucene在行动这本书有一个很好的例子,代码在这里可用:http://www.manning.com/hatcher3/LIAsourcecode.zip,类SynonymFilter

+0

这看起来很有希望。我可能需要一两天的时间才能确定在我结束这个问答之前我已经做到了这一点,但它看起来确实是一个很好的基础。 (我只需要用我自己需要的值填充堆栈)。任何想法,如果我可以使他们不那么重要是任何方式? – epeleg 2012-01-16 11:59:06

+0

是的,玩代码。如果你有这本书,lucene就在行动中,在这里详细解释了代码示例(你可以从书btw获取代码示例,只是谷歌)。 – milan 2012-01-16 12:03:25

+0

使它们不那么重要,如果它们进入同一个领域,我想你必须使用有效载荷机制,并实现你自己的得分手。 – milan 2012-01-16 12:13:07