有些时候,项目中已经有现场功能的包,但是相关的包使用Java开发的。为了能够减少Java转Python的时间,我们可以选择用Python调用Java。
Python是比较著名的胶水语言,他的特性就这么地显现出来了。本文就以Java使用Jieba分词构建一个jar包,供Python调用来做一个demo。
当然为了能够使用Python调用Jar当然少不了这个“胶水”,本文使用的是Jpype。Github地址:https://github.com/jpype-project/jpype。安装方式:pip install jpype1.
除此之外,因为需要运行jar包,当然我们运行环境中是需要有Java运行环境的。
Java 程序书写为了从0开始,这里书写一个java程序如下:
package com.aiasbcyd;
import com.huaban.analysis.jieba.JiebaSegmenter;
import java.util.ArrayList;
import java.util.List;
public class jiebaSeg {
private static JiebaSegmenter segmenter = new JiebaSegmenter();
public static List> seg(List sentences){
List> result = new ArrayList<>();
for (String sentence : sentences) {
List strings = segmenter.sentenceProcess(sentence);
result.add(strings);
}
return result;
}
public static void main(String[] args) {
String test = "自然语言处理爱好者用NLP技术改变未来";
List inputStrings = new ArrayList<>();
inputStrings.add(test);
List> lists = jiebaSeg.seg(inputStrings);
System.out.println(lists);
}
}
该Java程序是一个maven项目,引用了jieba对应的包,如下:
打包com.huaban jieba-analysis 1.0.2
程序书写调试完之后就是将其打包,打的包就是python要调用的jar包了,所以此时还需要将其以来全部打进来,具体操作如不,
先做以下配置:
然后就是ok,apply了。然后就是打包了,
然后得到的jar包就供Python调用了。
有了jar包之后就是准备中使用Python进行调用了。
在安装jpype包后,使用如下代码就可以进行调用了。不过更多的操作需要查看jpype官方文档了。
import os
import jpype
from jpype.types import *
class SDKUse(object):
def __init__(self, jar_path="./jar/jiebaSeg.jar"):
if not os.path.exists(jar_path):
raise FileNotFoundError
self.jar_path = jar_path
self._prepare_env()
self.main_class = jpype.JClass("com.aiasbcyd.jiebaSeg")
def _prepare_env(self):
jpype.startJVM(classpath=[self.jar_path], convertStrings=False)
def seg(self, content):
j_list = jpype.java.util.ArrayList()
j_list.append(JString(content))
res = self.main_class.seg(j_list)
print(res)
if __name__ == '__main__':
sdk_use = SDKUse()
sdk_use.seg("自然语言处理爱好者用NLP技术改变未来")
程序运行结果如下:
跨语言调用还是挺有意思的,主要是有前人把包写好了。当然,由于Java是强类型语言,在python中需要根据接口需要的参数类型传入。



