使用 Jython 从 Java 代码调用 Python 导致错误:ImportError: no module named nltk

Posted

技术标签:

【中文标题】使用 Jython 从 Java 代码调用 Python 导致错误:ImportError: no module named nltk【英文标题】:Call Python from Java code using Jython cause error: ImportError: no module named nltk 【发布时间】:2014-07-17 12:49:39 【问题描述】:

我正在使用 PythonInterpreter 的 jython 从 java 代码中调用 python 代码。 python代码只是标记句子

import nltk
import pprint

tokenizer = None
tagger = None   

def tag(sentences):
    global tokenizer
    global tagger
    tagged = nltk.sent_tokenize(sentences.strip())
    tagged = [nltk.word_tokenize(sent) for sent in tagged]
    tagged = [nltk.pos_tag(sent) for sent in tagged]
    return tagged

def PrintToText(tagged):
    output_file = open('/Users/ha/NetBeansProjects/JythonNLTK/src/jythonnltk/output.txt', 'w')
    output_file.writelines( "%s\n" % item for item in tagged )
    output_file.close()  

def main():
    sentences = """What is the salary of Jamie"""  
    tagged = tag(sentences)
    PrintToText(tagged)
    pprint.pprint(tagged)

if __name__ == 'main':    
    main()

我收到了这个错误:

run:
Traceback (innermost last):
  (no code object) at line 0
  File "/Users/ha/NetBeansProjects/JythonNLTK/src/jythonnltk/Code.py", line 42
        output_file.writelines( "%s\n" % item for item in tagged )
                                              ^
SyntaxError: invalid syntax
BUILD SUCCESSFUL (total time: 1 second)

如果我在 python 项目中打开它但从 java 调用它会触发此错误,则此代码工作得很好。我该如何解决?

提前致谢

更新: 我已按照@User 的建议将行编辑为output_file.writelines( ["%s\n" % item for item in tagged] ),但我收到了另一条错误消息:

Traceback (innermost last):
  File "/Users/ha/NetBeansProjects/JythonNLTK/src/jythonnltk/Code.py", line 5, in ?
ImportError: no module named nltk
BUILD SUCCESSFUL (total time: 1 second)

【问题讨论】:

这对我来说似乎是一个错误。尝试output_file.writelines(( "%s\n" % item for item in tagged ))output_file.writelines([ "%s\n" % item for item in tagged ]) 并考虑举报。 @User 我按照你说的做了,我收到一条新的错误消息。我已经用新的错误更新了我的问题。谢谢! 【参考方案1】:

现在编译时语法错误已解决,您会遇到运行时错误。 nltk 是什么? nltk 在哪里? ImportError 表示 nltk 不在您的导入路径中。

尝试编写一个简单的小程序并检查sys.path;您可能需要在导入之前附加 nltk 的位置。

### The import fails if nltk is not in the system path:
>>> import nltk
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named nltk

### Try inspecting the system path:
>>> import sys
>>> sys.path
['', '/usr/lib/site-python', '/usr/share/jython/Lib', '__classpath__', '__pyclasspath__/', '/usr/share/jython/Lib/site-packages']

### Try appending the location of nltk to the system path:
>>> sys.path.append("/path/to/nltk")

#### Now try the import again.

【讨论】:

你好@Jacob,我检查了系统路径,它仍然给我同样的错误信息!似乎它与从 Java 调用我的代码有关,因为它在 python 代码中工作得很好。谢谢

以上是关于使用 Jython 从 Java 代码调用 Python 导致错误:ImportError: no module named nltk的主要内容,如果未能解决你的问题,请参考以下文章

Jython 2.5.1:从 Java 调用到 __main__ - 如何传入命令行参数?

Java调用Python程序

Java调用Python程序方法Jpython使用

Java调用Python程序方法Jpython使用

Java调用Python程序方法Jpython使用

java调用python问题