我需要使lucene的StandardTokenizer适应有关Twitter数据的某些特殊目的。目前,我使用StandardTokenizer对一些tweet进行标记化,我想在这些tweet上工作。它工作得很好,但现在我想扩展行为(例如,同时考虑#hashtags和@somebody,考虑表情符号:),删除网址,...)。
有人可以告诉我-甚至给我一个方向-我如何轻松做到这一点?我知道,编写自己的Tokenizer是最好的选择,但是我对Lucene还是很陌生,我也不知道如何开始。
我希望有人可以帮助我:)
最好,
麦可
最佳答案
您可以使用lucene的CharFilter API(也可以是TokenFilters,具体取决于您希望搜索的工作方式)来扩展StandardTokenizer的标记化。
最终,如果StandardTokenizer与您想要的完全不同,则它是错误的令牌生成器,但是如果关闭,则可以轻松得多。
CharFilter本质上是一个FilterReader,它使您可以在Tokenizer运行之前修改文本。它还跟踪偏移调整,以便突出显示仍然有效!
要添加CharFilters,最简单的方法是扩展ReusableAnalyzerBase并覆盖其initReader方法,并用所需的CharFilters包装传入的阅读器。
您可能想将MappingCharFilter作为一个开始,它使您可以预先定义一些映射来处理特殊的twitter语法。这里有一些示例/想法:
http://markmail.org/message/abo2hysvfy2clxed