1

我正在尝试将一些 Java Lucene 代码移植到 pylucene (v 2.3.1) 中。我正在使用 http://svn.apache.org/viewcvs.cgi/lucene/pylucene/trunk/samples/中的示例,并且大部分 pylucene 似乎都进入了我的 python (ubuntu 12.04、pydev 2.6.0、eclipse 3.7.2)环境就好了。例如,我可以执行 lucene.initVM() (显示 JCC 已就位)并按照从 .../samples/PorterStemmerAnalyzer.py 中获取的示例定义一个 Porter 词干分析器:

self.analyzer = PorterStemmerAnalyzer()

但是当我尝试创建一个新的 IndexWriter 时,它偶然发现了它的构造函数的最后一个参数:

self.writer = lucene.IndexWriter(self.store, self.analyzer, True, lucene.IndexWriter.MaxFieldLength.LIMITED)

我收到此错误:

AttributeError: type object 'IndexWriter' has no attribute 'MaxFieldLength'.

这是目前让我难过的错误,但我也做过其他几个黑客(来自他们的版本.../samples)(但也担心):

  • 用 lucene.LucenePackage 替换 lucene.Version.LUCENE_CURRENT

  • lucene.SimpleFSDirectory 和 lucene.MMapDirectory

为了能走到这一步。

http://lucene.apache.org/pylucene/features.html说“PyLucene API 在 PyLucene 模块的平面命名空间中公开所有 Java Lucene 类。” 这似乎并不完全正确, lucene.StopAnalyzer.ENGLISH_STOP_WORDS_SET 是 pydev 已知的,而 lucene.ENGLISH_STOP_WORDS_SET 不是。

所以看来我正在成为/的一部分/旧版本/...?pylucene 正确接合,但不是全部!?为什么会这样?

4

2 回答 2

1

几乎可以肯定,问题与作为 .deb 的 pylucene 的最新版本有关,它是 2.3.1,而 pylucene 现在是 v. 3.6.1!

从源代码分发中进行制作需要一些接触。JohnW 在 http://john.wesorick.com/2011/11/installing-pylucene-on-ubuntu-1110.html的说明很有帮助。对于它的价值,这是我最终做出的改变,首先是 linux2 的 JDK 规范jcc/setup.py

JDK = {
    'darwin': JAVAHOME,
    'ipod': '/usr/include/gcc',
    'linux2': '/usr/lib/jvm/java-7-openjdk-amd64',
    'sunos5': '/usr/jdk/instances/jdk1.6.0',
    'win32': JAVAHOME,
    'mingw32': JAVAHOME,
    'freebsd7': '/usr/local/diablo-jdk1.6.0'
}

然后到 Makefile:

PREFIX_PYTHON=/usr
ANT=JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 /usr/bin/ant
PYTHON=$(PREFIX_PYTHON)/bin/python
JCC=$(PYTHON) -m jcc --shared
NUM_FILES=4
于 2012-09-19T20:33:53.090 回答
0

我使用了 rikb 的答案,它奏效了,但我不得不改变

'linux2': '/usr/lib/jvm/java-7-openjdk-amd64',

至...

'linux2': '/usr/lib/jvm/java-6-openjdk-amd64',

由于我使用的是 Java 6。看来他也是,所以也许他没有在 Linux 上使用该配置。

另请注意,如果您为 Makefile 复制和粘贴全部或部分 rikb 的内容块,则每行可能会有尾随空格。然后'sudo make'步骤将失败,相当神秘,并显示类似“make: execvp: /usr: Permission denied”的消息。这是因为“PREFIX_PYTHON=/usr”后面的空格导致make尝试执行目录/usr。

于 2013-04-03T20:22:07.033 回答