可以';t让CJKAnalyzer/Tokenizer识别日语文本
本文关键字:Tokenizer 识别 日语 文本 CJKAnalyzer 可以 | 更新日期: 2023-09-27 18:19:31
我正在使用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只是CJKAnallyzer。
关于日语为什么不起作用,有什么建议吗?我发送的输入似乎很公平:
プーケット
是我将存储的内容,但无法读取。:(
编辑:我错了。。。中文也不起作用:如果搜索词超过2个字符,它就会停止工作。和日语一样。
编辑第2部分:我现在发现问题出在使用前缀搜索上如果我搜索前两个字符并使用星号,则它有效。我一超过2,它就停止工作了。我想这是因为这个词的标记方式吧?如果我搜索完整的术语,那么它确实找到了。有没有办法在Lucene.NET中使用CJK的前缀搜索?プ*会起作用,但是プーケ*什么也找不到。
我使用StandardTokenizer。至少对于日语和韩语文本,它可以标记包含3个字符或4个字符的单词。但唯一担心的是汉字。它确实对汉语进行了标记,但每次只标记一个字符。