我终于解决了这个问题!!现在,我在这里粘贴我的代码和注释,以帮助其他人。
我的示例代码是计算两个单词之间的相似度得分。在Java中,它向Python发送两个单词,查找得分。然后,Python得到两个参数并打印它们的相似性得分。最后,它在Java中读取Python代码的结果。
爪哇:
import java.io.*;
public class RuntimeTest
{
public static void main(String[] args)
{
try
{
Runtime r = Runtime.getRuntime();
String[] cmd={"/usr/bin/python",
"/home/parallels/Desktop/.../src/ConceptNetSimilarity.py",
"cat",
"dog"};
Process p = r.exec(cmd);
#exec(String[] cmd) - cmd[0]:path of python-3.x cmd[1]:path of your python code cmd[2],[3]:arguments
#if you only invoke python code without arguments, `Process p = r.exec("python path-of-your-code");` instead.
p.waitFor();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = br.readLine()) != null)
{
System.out.println(line);
}
p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
的Python:
import sys
import divisi2
assoc = divisi2.network.conceptnet_assoc('en')
U, S, _ = assoc.svd(k=100)
spread = divisi2.reconstruct_activation(U, S)
print spread.entry_named(sys.argv[1],sys.argv[2])
#argv=['/home/parallels/Desktop/.../src/ConceptNetSimilarity.py', 'cat', 'dog']
结果: 0.819618978389
答案 0 :(得分:0)
这只是一种感觉,但我认为你应该有:
print spread.entry_named(sys.argv[1],sys.argv[2])
代替
print spread.entry_named(sys.argv[0],sys.argv[1])
argv [0]是python脚本。
另一方面,我不确定p.getInputStream()
在这里的意思是什么。
一个好建议? 获取良好的Java和Python参考,并至少阅读与您尝试在此处使用的API相关的内容。在那之后,如果你仍然不知道该怎么做,那就回来吧。