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 コード (スタンフォード パーサーから) の関数 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)(コメントを参照)。しかし、それと同じエラーメッセージが表示されます。
誰かが私がここで間違っていることを教えてもらえますか?