我试图通过 JPype 访问它的方法,在我的 python 代码中使用斯坦福解析器。这是我的相关(python3.4)代码:
tokens = ['The', 'monkey', 'was', 'shot', 'and', 'killed', '.']
jTokens = jpype.java.util.ArrayList()
for t in tokens:
jTokens.add(t)#jpype.java.lang.String(t))
print("DEBUGGING jTokens:", jTokens, type(jTokens))
self.parser.parseStrings(jTokens)
Java 代码(来自 stanford 解析器)中的函数 parseStrings 如下所示:
public Tree parseStrings(List<String> lst) {
List<Word> words = new ArrayList<Word>();
for (String word : lst) {
words.add(new Word(word));
}
return parse(words);
}
我收到的错误消息:
Loading parser from serialized file /home/igor/Downloads/stanford-parser-full-2015-01-30/edu/stanford/nlp/models/lexparser/englishPCFG.ser ... done [0.8 sec].
DEBUGGING jTokens: [The, monkey, was, shot, and, killed, .] <class 'jpype._jclass.java.util.ArrayList'>
Traceback (most recent call last):
File "./stanfordSnake.py", line 113, in <module>
sp.parse("The monkey was shot and killed.")
File "./stanfordSnake.py", line 92, in parse
self.parser.parseStrings(jTokens)
RuntimeError: No matching overloads found. at src/native/common/jp_method.cpp:121
我对Java的了解非常有限。我猜这个错误消息试图告诉我我传递给它的参数类型不正确。如果这确实是错误的,那么显然“jpype._jclass.java.util.ArrayList”与 List(String) 不匹配(这里的意思是 lessThan,greaterThan,但在帖子中表现不佳)。如果尝试将(python)列表中的字符串显式添加为(java)字符串,如下所示:jpype.java.lang.String(t)(见评论)。但是我收到了同样的错误信息。
有人可以告诉我我在这里做错了什么吗?