Java Lucene 8巴西葡萄牙语分析器中的奇怪标记化
我在Windows 10上使用Lucene 8.6.2(目前最新的可用版本)和AdoptOpenJDK 11,我在葡萄牙语和巴西葡萄牙语分析器破坏标记化时遇到了一些奇怪的问题 让我们举一个简单的例子:Jorge Aragão著名的samba歌曲“合唱”的第一行,首先使用Java Lucene 8巴西葡萄牙语分析器中的奇怪标记化,java,lucene,
elasticsearch-analyzers,Java,Lucene,
elasticsearch Analyzers,我在Windows 10上使用Lucene 8.6.2(目前最新的可用版本)和AdoptOpenJDK 11,我在葡萄牙语和巴西葡萄牙语分析器破坏标记化时遇到了一些奇怪的问题 让我们举一个简单的例子:Jorge Aragão著名的samba歌曲“合唱”的第一行,首先使用org.apache.lucene.analysis.standard.StandardAnalyzer作为参考 这是我的梦想 String text=“Pra onde vocêfor”; 尝试(Analyzer=new Sta
org.apache.lucene.analysis.standard.StandardAnalyzer
作为参考
这是我的梦想
String text=“Pra onde vocêfor”;
尝试(Analyzer=new StandardAnalyzer()){
try(final-TokenStream-TokenStream=analyzer.TokenStream(“text”,text)){
CharTermAttribute CharTermAttribute=tokenStream.addAttribute(CharTermAttribute.class);
tokenStream.reset();
while(tokenStream.incrementToken()){
System.out.println(“术语:chartermatAttribute.toString());
}
tokenStream.end();
}
}
这给了我以下术语(为了可读性,折叠成一行):
这是我的梦想
好的,这正是我对任何分析器的期望。但是如果我使用org.apache.lucene.analysis.pt.PortugueseAnalyzer
而不是使用无参数构造函数,我会得到以下结果:
普拉昂德
哈?也许它认为“você”(“你”)和“for”(“可能去”)是停止词,并将它们删除
但是现在让我们尝试一下org.apache.lucene.analysis.br.BrazilianAnalyzer
,再次使用无参数构造函数:
预处理挥发性有机化合物
现在这个词已经被弄坏了。它把“onde”(“where”)改成了“ond”,据我所知,这甚至不是一个葡萄牙语单词。而对于“você”,它只是去掉了“ond”
其他线路同样糟糕或更糟:
- 文字:“一个沙特人,沃尔塔·缪·阿莫尔”
:StandardAnalyzer
saudadeédor volta meu amor
:PortugueseAnalyzer
saudadédor volt amor
:巴西分析仪
索达多伏特阿莫尔
我是否在Lucene核心库和语言分析器上犯了一些严重错误?输出毫无意义,而且我很惊讶这样一种通用语言的分析器会像那样损坏标记。查看
葡萄牙语分析器
和巴西语分析器
的代码,它看起来像这些分析器正在执行词干分析。(我对Lucene编码有点陌生,所以这不是我所期望的。)所以对于索引,也许这就是作者的意图。也许“você”是“você”和“vocês”的词干。我猜“volt”是动词(不定式)“voltar”的词干。(但“saudad”不是我所期望的“saudade”的词干。)“,但同样,文本分析的这一方面对我来说有点陌生。)
对于我的特定用例,我只想标记这些词并跳过停止词。我找不到一种方法来关闭葡萄牙分析器
和巴西分析器
的词干分析,因此我想我将只使用标准分析器
,但使用特定语言分析器中的停止词,如下所示:
最终分析仪;
try(巴西利亚分析仪ptBRAnalyzer=新巴西利亚分析仪()){
analyzer=新的StandardAnalyzer(ptBRAnalyzer.getStopwordSet());
}
这有点迂回,但至少这给了我更多我想要的:
- 文字:“一个沙特人,沃尔塔·缪·阿莫尔”
:StandardAnalyzer
saudadeédor volta meu amor
withStandardAnalyzer
stop words:PortugueseAnalyzer
saudadeédor volta amor
withStandardAnalyzer
stop words:BrazilianAnalyzer
saudadeédor volta meu amor