提问者:小点点

pylucene的自定义标记器,仅基于下划线标记文本(保留空格)


我是pylucene的新手,我试图构建一个自定义分析器,它只在下划线的基础上标记文本,即它应该保留空白空间。示例:“hi_this is_awesome”应该标记为[“hi”,“this is”,“awesome”]标记。

从各种代码示例中,我了解到需要重写CustomTokenizer的incrementToken方法,并编写CustomAnalyzer,TokenStream需要使用CustomTokenizer后跟LowerCaseFilter来实现相同的功能。

我在实现incrementToken方法和连接点时遇到了一些问题(标记器是如何使用的,通常分析器依赖于TokenFilter,而TokenFilter依赖于TokenStreams),因为关于Pylucene的文档很少。


共1个答案

匿名用户

通过创建一个新的标记器,将除下划线以外的每个字符视为生成的标记的一部分(基本上下划线成为分隔符),最终使其工作

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