ArabicAnalyzer
对输入进行了一些转换;它会将输入الله
转换为له
。这是由于其与记录...
词干提取被定义为ArabicStemFilter
(和ArabicStemmer
)的用法:
- 去除附着定冠词,连词,和介词的。
- 通常后缀的词干。
这不应该是一个问题,因为你应该通过同一个分析器解析用户提供的查询搜索时,产生相同的标记。
下面是我用来查看分析仪从给定输入产生的条件的示例代码。
using System;
using Lucene.Net.Analysis.AR;
using Lucene.Net.Analysis.Tokenattributes;
using System.IO;
namespace ConsoleApplication {
public static class Program {
public static void Main() {
var luceneVersion = Lucene.Net.Util.Version.LUCENE_30;
var input = "الله";
var analyzer = new ArabicAnalyzer(luceneVersion);
var inputReader = new StringReader(input);
var stream = analyzer.TokenStream("fieldName", inputReader);
var termAttribute = stream.GetAttribute<ITermAttribute>();
while(stream.IncrementToken()) {
Console.WriteLine("Term: {0}", termAttribute.Term);
}
Console.WriteLine("Done.");
Console.ReadLine();
}
}
}
可以克服这种行为通过编写自定义Analyzer
它使用ArabicNormalizationFilter
(删除词干),就像ArabicAnalyzer
做,但没有调用ArabicStemFilter
。
public class CustomAnalyzer : Analyzer {
public override TokenStream TokenStream(String fieldName, TextReader reader) {
TokenStream result = new ArabicLetterTokenizer(reader);
result = new LowerCaseFilter(result);
result = new ArabicNormalizationFilter(result);
return result;
}
}
你说得对,我该如何防止ArabicAnalyzer改变“الله”,并将这个词完全按照原样编入索引,而不是将其改为“له”? – MRP