如何解决在ASCIIFoldingFilter
我一直在使用ASCII折叠过滤器来处理变音符号,不仅用于弹性搜索中的文档,还用于处理其他各种字符串。
public static String normalizeText(String text,boolean shouldTrim,boolean shouldLowerCase) {
if (Strings.isNullOrEmpty(text)) {
return text;
}
if (shouldTrim) {
text = text.trim();
}
if (shouldLowerCase) {
text = text.toLowerCase();
}
char[] charArray = text.toCharArray();
// once a character is normalized it could become more than 1 character. Official document says the output
// length should be of size >= length * 4.
char[] out = new char[charArray.length * 4 + 1];
int outLength = ASCIIFoldingFilter.foldToASCII(charArray,out,charArray.length);
return String.copyValueOf(out,outLength);
}
但是,根据official documentation,该方法有一个注释This API is for internal purposes only and might change in incompatible ways in the next release.
,替代方法是使用foldToASCII(char[] input,int length)
非静态方法(此方法内部调用相同的静态方法),但使用它需要准备ascii折叠过滤器,令牌过滤器,令牌流,分析器(这需要选择分析器的类型,我可能必须创建一个自定义的分析器)。我找不到开发人员完成后者的示例。
我尝试编写自己的解决方案,但非静态的foldingToAscii不会返回确切的output
,而是在末尾附加了一系列不需要的字符。我想知道各种开发人员如何处理这个问题?
编辑:我还看到一些开源项目正在使用静态foldToAscii,因此另一个问题是使用非静态foldToAscii是否真的值得
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。