我是pylucene的新手,我试图构建一个自定义分析器,它只在下划线的基础上标记文本,即它应该保留空白空间。示例:“hi_this is_awesome”应该标记为[“hi”,“this is”,“awesome”]标记。
从各种代码示例中,我了解到需要重写CustomTokenizer的incrementToken方法,并编写CustomAnalyzer,TokenStream需要使用CustomTokenizer后跟LowerCaseFilter来实现相同的功能。
我在实现incrementToken方法和连接点时遇到了一些问题(标记器是如何使用的,通常分析器依赖于TokenFilter,而TokenFilter依赖于TokenStreams),因为关于Pylucene的文档很少。
通过创建一个新的标记器,将除下划线以外的每个字符视为生成的标记的一部分(基本上下划线成为分隔符),最终使其工作
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