1

我试图通过 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)(见评论)。但是我收到了同样的错误信息。

有人可以告诉我我在这里做错了什么吗?

4

0 回答 0