如何解决通过Lucene使用多种语言的停用词
我使用Apache的Lucene(8.6.3)和以下Java 8代码(这是缩短的版本)从字符串中删除停用词,然后以原始的大写/小写返回其余的词:
Path resources = Paths.get(stopWordFolder);
String stopWordsFile = "";
if(Files.exists(resources)) {
//"stopWordsFile" is set here,depending on language
try {
Analyzer analyzer = CustomAnalyzer.builder(resources)
.withTokenizer("icu")
.addTokenFilter("stop","ignoreCase","true","words",stopWordsFile,"format","wordset")
.build();
TokenStream tokenStream = analyzer.tokenStream(CONTENTS,new StringReader(text));
CharTermAttribute term = tokenStream.addAttribute(CharTermAttribute.class);
tokenStream.reset();
ArrayList<String> remaining = new ArrayList<String>();
while(tokenStream.incrementToken()) {
remaining.add(term.toString());
}
tokenStream.close();
analyzer.close();
return remaining;
} catch(IOException e) {
//Handle exception
}
}
根据我要使用的语言,我将stopWordsFile
设置为不同的停用词“ .txt”文件的名称,这些停用词的格式均为UTF-8
。
在我的other question中,我得到了修复代码的帮助,以使其完全起作用,并且还提供了一个包含ascii文件夹过滤器的提示。
虽然以上代码在到目前为止已经测试过的所有语言中都可以正常工作,但我仍然想知道:在我的情况下,文件夹过滤器的用途是什么,为什么我需要一个(我呢?),还有什么我应该考虑添加的,以使分析仪可以用多种语言“更好地”工作(但一次只能使用一种语言)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。