2012-09-19 24 views
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就位)及定義一個波特 詞幹以下從 採取的示例... /樣品/ PorterStemmerAnalyzer.py經由:只有部分的pylucene可用?

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'. 

這是有我此刻難倒了錯誤,但也有 其他幾個黑客(從他們的版本... /樣本)我也取得了 (也擔心):

  • 與lucene.LucenePackage

  • lucene.SimpleFSDirectory與lucene.MMapDirectory

爲了遠得到這個替換lucene.Version.LUCENE_CURRENT。

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 正確使用,但不是全部!?爲什麼會這樣呢?

回答

1

幾乎可以肯定,問題與最新版本的pylucene有關,因爲.deb是2.3.1,而pylucene現在在3.6.1版本!

從源碼分發製作需要一點觸摸。 JohnW在 http://john.wesorick.com/2011/11/installing-pylucene-on-ubuntu-1110.html的指示很有幫助。 對於它的價值,這裏是我結束了進行更改,先以JDK規格爲linux2在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 
0

我用rikb的答案,它的工作,但我不得不改變

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

到...

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

因爲我使用Java 6。看起來他也是,所以也許他沒有在Linux上使用這種配置。

另請注意,如果您複製並粘貼所有或部分rikb的Makefile文件塊,則每行可能會有空格。然後,'sudo make'步驟會失敗,而且很神祕,例如「make:execvp:/ usr:Permission denied」。這是因爲「PREFIX_PYTHON =/usr」之後的尾部空格導致嘗試執行dir/usr。