无法让CJKAnalyzer / Tokenizer识别日文文本

时间:2012-01-06 03:55:04

标签: c# unicode localization lucene.net

我正在使用Lucene.NET,这很棒。然后研究如何让它搜索亚洲语言。因此,我从StandardAnalyzer转移到了CJKAnalyzer。

这适用于韩国(虽然StandardAnalyzer适用于韩国!)和中文(没有),但我仍然无法让程序识别日文文本。

就像一个非常小的例子,我写了一个小数据库(使用CJKAnalyzer),里面有几个字,然后尝试从数据库中读取:

public void Write(string text, AnalyzerType type)
        {
            Document document = new Document();

            document.Add(new Field(
                "text",
                text,
                Field.Store.YES,
                Field.Index.ANALYZED));

            IndexWriter correct = this.chineseWriter;
            correct.AddDocument(document);            
        }

这是为了写作。并为阅读:

public Document[] ReadMultipleFields(string text, int maxResults, AnalyzerType type)
        {
            Analyzer analyzer = this.chineseAnalyzer;

            QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", analyzer);
            var query = parser.Parse(text);                        

            // Get the fields.
            TopFieldCollector collector = TopFieldCollector.create(
                new Sort(),
                maxResults,
                false,
                true,
                true,
                false);

            // Then use the searcher.            
            this.searcher.Search(
                query,
                null,
                collector);

            // Holds the results
            List<Document> documents = new List<Document>();

            // Get the top documents.
            foreach (var scoreDoc in collector.TopDocs().scoreDocs)
            {
                var doc = this.searcher.Doc(scoreDoc.doc);
                documents.Add(doc);
            }

            // Send the list of docs back.
            return documents.ToArray();
        }

其中chineseWriter只是一个传入CJKAnalyzer的IndexWriter,而chineseAnalyzer就是CJKAnalyzer。

关于为什么日本人不工作的任何建议?我发送的输入看起来很公平:

プーケット

是我要存储的内容,但无法读取。 :(

编辑:我错了......中文也不起作用:搜索字词超过2个字符,它停止工作。与日语相同。

编辑第2部分:我现在已经看到问题是使用前缀搜索。如果我搜索前2个字符并使用星号,那么它可以正常工作。一旦我超过2,它就会停止工作。我想这是因为这个词的标记方式?如果我搜索完整的术语,那么它确实找到了它。无论如何在Lucene.NET中使用前缀搜索CJK?プ*会起作用,但是プーケ*什么也没找到。

1 个答案:

答案 0 :(得分:0)

我使用StandardTokenizer。无论是日文和韩文文本,它都可以标记包含3个字符或4的单词。但只关心中文字符。它确实对中文进行了标记,但一次只有1个字符。