1

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

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

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

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

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

这是最好的方法吗?提前谢谢了 :)

4

2 回答 2

2

可以使用以下提到的类之一来自定义标记器:

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

于 2012-01-24T18:11:55.840 回答
1

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

于 2011-11-14T20:43:26.147 回答