3

谁能给我指出一个像这样标准化令牌的过滤器?

L.A. Reid -> LA Reid
O'Callaghan -> OCallaghan

搜索LA Reid将匹配L.A. Reid

4

1 回答 1

1

您不能在 StandardAnalyzer 的输出上使用过滤器,因为 StandardAnalyzer 会在您的过滤器有机会组合标记之前去除标点符号。

您可以通过修改标准分析器来创建自己的分析器。StandardAnalyzer 使用JFlex创建分词器。源 jflex 文件在这里,我没有尝试过,但你可以更改这一行,

ALetter = ([\p{WB:ALetter}] | {ALetterSupp})

到类似的东西,

ALetter = ([\p{WB:ALetter}] | {ALetterSupp} | "." | "'" )

您还需要更改 jflex 文件中的类名和包声明。完成此操作后,使用 jflex 生成新的分析器。

分析器将生成类似 的标记L.A.,因此将分析器的输出传递给TokenFilter,从标记中去除特殊字符,查看ISOLatin1AccentFilter示例代码。

于 2012-06-13T04:50:01.650 回答