在PyLucene中,有一个名为StopFilter的过滤器,可根据给定的停用词过滤令牌。示例调用如下:

result = StopFilter(True, result, StopAnalyzer.ENGLISH_STOP_WORDS_SET)


似乎可以很容易地将参数替换为一组停用词,但这实际上有点挑战:

>>> StopAnalyzer.ENGLISH_STOP_WORDS_SET

<Set: [but, be, with, such, then, for, no, will, not, are, and, their, if, this, on, into, a, or, there, in, that, they, was, is, it, an, the, as, at, these, by, to, of]>


这是一个Set,无法实现:

>>> Set()

NotImplementedError: ('instantiating java class', <type 'Set'>)


有人建议在其他地方使用PyLucene随附的PythonSet,但是事实证明这不是Set的实例,并且不能与StopFilter一起使用。

如何给StopFilter一整套新的停用词?

最佳答案

通过在pylucene开发人员列表上的以下线程编写此问题,我中途发现了答案:

http://mail-archives.apache.org/mod_mbox/lucene-pylucene-dev/201202.mbox/thread

您可以使用自定义列表定义StopFilter,如下所示:

mystops = HashSet(Arrays.asList(['a','b','c']))
result = StopFilter(True, result, mystops)

10-08 04:23