我正在尝试从Python序列构建一个TokenStream。只是为了好玩,我希望能够将我自己的令牌直接传递给
pylucene.Field("MyField", MyTokenStream)我试着把"MyTokenStream“写成...
terms = ['pant', 'on', 'ground', 'look', 'like', 'fool']
stream = pylucene.PythonTokenStream()
for t in terms:
stream.addAttribute(pylucene.TermAttribute(t))但不幸的是,"TermAttribute“的包装器并不存在,也不存在lucene中的任何其他Attribute类,因此在调用它们时,我会得到一个NotImplemented错误。
这不会引发异常--但我不确定它是否设置了条件。
PythonTokenStream(terms)发布于 2011-11-29 01:51:16
Python*类旨在通过子类化来自定义行为。在使用TokenStream的情况下,需要覆盖incrementToken方法。
class MyTokenStream(lucene.PythonTokenStream):
def __init__(self, terms):
lucene.PythonTokenStream.__init__(self)
self.terms = iter(terms)
self.addAttribute(lucene.TermAttribute.class_)
def incrementToken(self):
for term in self.terms:
self.getAttribute(lucene.TermAttribute.class_).setTermBuffer(term)
return True
return False
mts = MyTokenStream(['pant', 'on', 'ground', 'look', 'like', 'fool'])
while mts.incrementToken():
print mts
<MyTokenStream: (pant)>
<MyTokenStream: (on)>
<MyTokenStream: (ground)>
<MyTokenStream: (look)>
<MyTokenStream: (like)>
<MyTokenStream: (fool)>还可以存储addAttribute的结果,从而消除了对getAttribute的需要。我的lupyne项目就有一个这样的example。
https://stackoverflow.com/questions/8114545
复制相似问题