使用Jython从Java调用的带有NLTK导入的Python函数 - 版本兼容性?

时间:2016-08-04 15:31:36

标签: java python nltk jython

我有一个带有NLTK导入的Python函数,我试图使用Jython从Java调用。如果有人成功地这样做,请你提供你正在使用的Python,Jython和NLTK的版本,因为在我看来,如果它可以工作,你必须得到正确的版本组合。

我使用的是Python27,NLTK 3.2.1和Jython 2.7-b2

使用Java和Jython来调用一个接受一些自由文本的简单Python函数并从文本中返回关键字或概念的集合是没有问题的。 Python函数是在文件“keyConceptParser.py”中定义的类“KeyConceptParser”中的“run()”,工作的Java / Jython代码如下:

String text = "The cat sat on the mat";
PythonInterpreter interpreter = new PythonInterpreter(null);
PyString inputText = new PyString(text);
interpreter.execfile("python/keyConceptParser.py");
PyInstance parser = (PyInstance) interpreter.eval("KeyConceptParser()");
PyList keyConcepts = (PyList) parser.invoke("run", inputText);

但是,当我增强keyConceptParser.py(包括导入nltk)时,上面的代码失败,因为无法导入nltk。

我可以通过扩展构造PythonInterpreter类的代码来遵循Getting Python's nltk.wordnet module working for Jython中的建议来解决这个问题。

PythonInterpreter interpreter = new PythonInterpreter(null, new PySystemState());
PySystemState sys = Py.getSystemState();
sys.path.append(new PyString("C:\\Python27\\Lib\\site-packages"));

再次尝试,现在找到nltk模块,但这次找不到“future”模块。但是因为它位于Python的Lib目录中,所以可以通过使用两个追加到路径而不是一个来修复,如下所示......

 sys.path.append(new PyString("C:\\Python27\\Lib"));
 sys.path.append(new PyString("C:\\Python27\\Lib\\site-packages"));

现在找到“未来”,但缺少模块“信号”。这就是我坚持的观点,因为在Python27下载的目录中没有任何“信号”模块(它必须使用C中的某些东西)。

从我上面链接的StackOverflow帖子(超过6年)看来,人们过去曾经使用过NLTK来处理Java,但我找不到有关各种组件的哪些版本协同工作的任何信息。

(使用NLTK的Python代码在Java外部执行时工作正常)

提前感谢您提供任何帮助

0 个答案:

没有答案