【问题标题】:Creating a Lucene Analyzer创建 Lucene 分析器
【发布时间】:2012-01-15 17:11:00
【问题描述】:

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

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

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

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

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

谢谢

【问题讨论】:

    标签: lucene tokenize analyzer stemming


    【解决方案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, class SynonymFilter

    【讨论】:

    • 这看起来很有希望。在我关闭这个 Q 之前,我可能需要一两天的时间来确保我做对了。但这看起来确实是一个很好的基础。 (我只需要用我自己需要的值填充堆栈)。有什么办法可以让它们变得不那么重要吗?
    • 是的,玩代码。如果你有这本书,lucene in action,那里有详细解释,还有代码示例(顺便说一句,你可以从书中获取代码示例,只是谷歌)。
    • 为了让它们不那么重要,如果它们进入同一个领域,我想你必须使用有效负载机制,并实现你自己的记分器。
    • "i guess you'd have to use the payload mechanism, and implement your own scorer"你能提供更多关于这方面的信息吗?
    • 你为什么不将此作为另一个问题发布,它可能对其他人有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2014-08-07
    相关资源
    最近更新 更多