【问题标题】:Tokenizing Keywords in Lucene.Net在 Lucene.Net 中标记关键字
【发布时间】:2011-11-14 19:02:38
【问题描述】:

我正在使用 Lucene.Net 2.9.2,我认为我需要编写一个自定义标记器,但我想检查一下我是否遗漏了一些明显的东西。

该文档由标题、关键字和内容以及一些元数据(如作者、日期等)组成,每个元数据都存储为一个字段。这些文档是软件技术文档,可能在标题、关键字和/或内容中包含“.Net”、“C++”、“C#”等短语。

我将 KeywordAnalyzer 用于 Keyword 字段,StandardAnalyzer 用于 Title 和 Content - StopWords 和 LowerCase 等是必需的,因为文档可能很长。

我还为搜索编写了一个同义词自定义过滤器,因为我想搜索例如“C#”但也识别“CSharp”、“C#.Net”等。标记器已经删除了“#” 'C#' 或 C++ 中的 '++',因此可能会与“C”语言参考混淆

我的想法是,当我索引标题和内容时,我需要根据当前标记是关键字短语的一部分还是它的任何同义词来分支标记化。

这是最好的方法吗?非常感谢提前:)

【问题讨论】:

    标签: lucene lucene.net tokenize analyzer


    【解决方案1】:

    tokenizer 的自定义可以使用以下提到的类之一来完成:

    1)。 Lucene.Net.Analysis.CharTokenizer 2)。 Lucene.Net.Analysis.Tokenizer

    public class AlphaNumbericTokenizer : Lucene.Net.Analysis.CharTokenizer
    {
         public AlphaNumbericTokenizer (System.IO.TextReader input) : base(input)
         {
         }
         protected override bool IsTokenChar(char c)
         {
           //TODO: Logic for identifying token or token separator
           return char.IsLetterOrDigit(c);
         }
    }
    

    请参考http://karticles.com/NoSql/lucene_custom_tokenizer.html

    【讨论】:

    • 我在解决这个问题时采取了稍微不同的方法 - 我将在博客文章中写下来,并在此处发布链接以及解决方案的概要。感谢您的回答vrluckyin :)
    【解决方案2】:

    我认为您可以使用WhitespaceTokenizer,然后插入KeywordMarkerFilter 将一些标记标记为“不可侵犯”,最后提供您自己的过滤器来去除标点符号。也许了解 Lucene.Net 的人会提出一些建议;例如在 Solr WordDelimiterFilter 中可以使用。

    【讨论】:

    • 嗨,阿图尔,感谢您的回答。我相信/认为 KeywordMarkerFilter 是在 3.1 版中引入 Java API 的——它目前不受 .net 支持,因为 2.9.2 是最新版本。但是,我认为您的建议就是我的想法,即使用自定义标记器在 .net 中模拟它。再次感谢:)
    • 你说得对,我是从 Lucene 的角度回答这个问题,但希望它有所帮助。
    • 感谢 Artur,绝对有帮助,因为它有助于缩小我的方法中的潜在选择。如果其他人有观点,我将把这个问题再开放几天。再次感谢
    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多