【发布时间】:2021-07-16 17:57:10
【问题描述】:
我有以下适用于 Lucene.Net 3.0.3 的自定义 TokenFilter,我需要将其迁移到 Lucene.Net 4.8:
public sealed class AccentFoldingFilter : TokenFilter
{
private ITermAttribute termAttribute;
public AccentFoldingFilter(TokenStream input) : base(input)
{
termAttribute = this.input.GetAttribute<ITermAttribute>();
}
public override bool IncrementToken()
{
if (this.input.IncrementToken())
{
termAttribute.SetTermBuffer(termAttribute.Term.RemoveDiacritics());
return true;
}
return false;
}
}
ITermAttribute 不再存在,我想我需要使用ICharTermAttribute 但我不知道该怎么做。
如何在 4.8 中做同样的事情?
作为参考,这是RemoveDiacritics 扩展方法:
public static string RemoveDiacritics(this string text)
{
var normalizedString = text.Normalize(NormalizationForm.FormD);
var stringBuilder = new StringBuilder();
foreach (var c in normalizedString)
{
var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
if (unicodeCategory != UnicodeCategory.NonSpacingMark)
{
stringBuilder.Append(c);
}
}
return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
}
【问题讨论】:
标签: c# lucene.net