我是PyLucene的新手。我设法在我的Ubuntu上安装了它,并查看了如何实现自定义分析器的[示例代码][1]。我尝试通过添加一个NGramTokenFilter来修改它。但是我在打印出自定义分析器的结果时一直得到一个错误。如果我删除ngram过滤器,它会工作得很好。
基本上,我尝试做的是白色分割所有传入的文本,小写,转换为ascii代码,并做ngram。
代码如下:
class myAnalyzer(PythonAnalyzer):
def createComponents(self, fieldName):
source = WhitespaceTokenizer()
filter = LowerCaseFilter(source)
filter = ASCIIFoldingFilter(filter)
filter = NGramTokenFilter(filter,1,2)
return self.TokenStreamComponents(source, filter)
def initReader(self, fieldName, reader):
return reader
analyzer = myAnalyzer()
stream = analyzer.tokenStream("", StringReader("MARGIN wondêrfule"))
stream.reset()
tokens=[]
while stream.incrementToken():
tokens.append(stream.getAttribute(CharTermAttribute.class_).toString())
print(tokens)
我不断得到的错误是:
InvalidArgsError: (<class 'org.apache.lucene.analysis.ngram.NGramTokenFilter'>, '__init__', (<ASCIIFoldingFilter: ASCIIFoldingFilter@192d74fb term=,bytes=[],startOffset=0,endOffset=0,positionIncrement=1,positionLength=1,type=word,termFrequency=1>, 2, 3))
我做错了什么?
1条答案
按热度按时间5f0d552i1#
查看JavaDoc for NGramTokenFilter,您必须使用以下内容:
对于固定的ngram大小;或者这个:
对于ngram大小的范围,
preserveOriginal
为布尔值,确定:当它短于minGram或大于maxGram时是否保留原始项
你有的不是这两个。
(Side注意:我不确定1号的ngram是否有很大的意义,但也许这正是您所需要的。)
更新
为了完整起见,这里是我的(有些修改)独立版本的代码的问题。最相关的部分是这一行:
该程序(使用PyLucene 9.4.1和Java 11):
输出: