我是pylucene的新手,我正在尝试构建一个自定义分析器,它只根据下划线来标记文本,即它应该保留空格。 示例:“Hi_this is_awesome”应该被标记为[“hi”,“this is”,“awesome”]标记。
从各种代码示例中我了解到我需要覆盖CustomTokenizer的incrementToken方法,并编写一个CustomAnalyzer,TokenStream需要使用CustomTokenizer,然后使用LowerCaseFilter来实现相同的目标。
我在实现incrementToken方法和连接点时遇到了问题(如何使用tokenizer,因为分析器通常依赖于依赖于TokenStreams的TokenFilter),因为pylucene上的文档很少。
答案 0 :(得分:3)
最终通过创建一个新的tokenzier来实现它的工作,这个新的tokenzier将除了下划线之外的每个字符都视为生成的令牌的一部分(基本上下划线成为分隔符)
class UnderscoreSeparatorTokenizer(PythonCharTokenizer): def __init__(self, input): PythonCharTokenizer.__init__(self, input) def isTokenChar(self, c): return c != "_" class UnderscoreSeparatorAnalyzer(PythonAnalyzer): def __init__(self, version): PythonAnalyzer.__init__(self, version) def tokenStream(self, fieldName, reader): tokenizer = UnderscoreSeparatorTokenizer(reader) tokenStream = LowerCaseFilter(tokenizer) return tokenStream