我正在尝试在我正在进行的python项目中优化某些自然语言处理的性能。基本上我想将计算密集型部分外包,以使用用Java编写的apache OpenNLP。
我的问题是将Java函数/类链接回我的python代码的推荐方法是什么?我想到的三种主要方式是
在python中使用 C / C ++绑定,然后在我的C程序中嵌入JVM。这是我倾向于的,因为我有点熟悉C语言扩展到python,但使用C语言的三角形,其中C仅作为中介使用似乎不正确。
使用 Jython 。我主要担心的是CPython是我所知道的绝大多数流行的python实现,我不想破坏与其他协作者或包的兼容性。
将输入和输出流式传输到OpenNLP附带的二进制文件。 Apache提供了标记器,例如可以将数据传入和传出的独立二进制文件。这可能是最容易实施的选择,但它似乎也是最粗略的选择。
我想知道是否有任何有经验连接python和java的人知道这些选项之间的性能差异有多大,以及在这种情况下哪一个被“推荐”或被视为最佳实践 - 当然,如果有的话是一种完全不同的做法,我没有想到。
我确实搜索了SO以寻找现有答案并找到了this,但这是3.5年前的答案,并提到了一些已经死亡,难以集成/配置/安装或仍在开发中的项目。
有些评论提到,与运行实际NLP代码所需的时间相比,所有三种方法的开销可能都是微不足道的。这可能是真的,但我仍然对从更一般的角度来看答案感兴趣。
谢谢!
答案 0 :(得分:0)
考虑使用现有的语言独立RPC机制(thrift,....)构建java服务器。并使用python作为RPC客户端与服务器通信。松耦合。