【Python】Python调用Java jar包方式 ——Jpype使用
背景
有些时候,项目中已经有现场功能的包,但是相关的包使用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<List<String>> seg(List<String> sentences){List<List<String>> result = new ArrayList<>();for (String sentence : sentences) {List<String> strings = segmenter.sentenceProcess(sentence);result.add(strings);}return result;}public static void main(String[] args) {String test = "自然语言处理爱好者用NLP技术改变未来";List<String> inputStrings = new ArrayList<>();inputStrings.add(test);List<List<String>> lists = jiebaSeg.seg(inputStrings);System.out.println(lists);}
}
该Java程序是一个maven项目,引用了jieba对应的包,如下:
<dependencies><!-- https://mvnrepository.com/artifact/com.huaban/jieba-analysis --><dependency><groupId>com.huaban</groupId><artifactId>jieba-analysis</artifactId><version>1.0.2</version></dependency></dependencies>
打包
程序书写调试完之后就是将其打包,打的包就是python要调用的jar包了,所以此时还需要将其以来全部打进来,具体操作如不,
先做以下配置:
然后就是ok,apply了。然后就是打包了,
然后得到的jar包就供Python调用了。
有了jar包之后就是准备中使用Python进行调用了。
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 FileNotFoundErrorself.jar_path = jar_pathself._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中需要根据接口需要的参数类型传入。
【Python】Python调用Java jar包方式 ——Jpype使用相关推荐
- python文件转换成jar包_Python一键转Jar包,Java调用Python新姿势!
粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 今天的这篇文章,聊一个轩辕君之前工作中遇到的需求:如何在Jav ...
- JPype:实现在python中调用JAVA 和 错误处理
JPype使用说明 1.安装jpype 安装的时候输入: pip install jpype1 (后面要加一个1) 2.启动JVM JPype 提供的 startJVM() 函数的作用是启动 JA ...
- Python利用JPype调用Java对象方法【实现在Python中调用JAVA】
一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...
- 如何用pycharm调用Java_JPype实现在python中调用JAVA的实例
一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...
- 通过ClassLoader调用外部jar包
通过ClassLoader调用外部jar包 我们大家都知道,每个运行中的线程都有一个成员contextClassLoader,用来在运行时动态地载入其它类. 系统默认的contextClassLoad ...
- springboot读取linux文件_spring\-boot以jar包方式时读取resource或是template文件 | Prayer's Laputa...
现象 以jar包方式部署系统,想读取resource或是template下面的文件时,报 File Not Found 我遇到的情况是,整个项目达成了一个包,在开发环境(windows + idea) ...
- Spring Boot 以 jar 包方式运行在后台
spring-boot jar 包方式启动: 首先,为了防止和常用的 Tomcat 8080 端口冲突,将 Spring-boot 项目的端口号设置为 9090. 具体方法:在 application ...
- Jmeter调用自定义jar包
一. 场景 在测试过程中经常需要调用第三方jar包来生成测试数据,或者使用java工具类来实现业务场景,普遍的做法是手动调用jar包,再把这些值赋给jmeter中的某个参数,以满足业务测试需求目的,j ...
- java jar包签名
JAR文件可以用 jarsigner工具或者直接通过 java.securityAPI 签名.签名后的JAR 本身的文件 文件与原来JAR本身的 文件完全相同,只是更新了它的 manifest文件,并 ...
- centos 开机启动java_Centos 7将java jar包自定义开机启动服务
Centos 7将java jar包自定义开机启动服务 1. 先上 jar包的启动脚本 vim service.sh #!/bin/bash # 需要变更的参数 # 先查看java绝对路径:which ...
最新文章
- 怎样在C++Builder中创建使用DLL
- CentOS7 配置ISCSI targetcli 共享存储
- 【JFreeChart】JFreeChart简介
- ROC和AUC介绍以及如何计算AUC(转载+自己重新排版整理)
- oracle 表 视图 存储过程 序列 job
- 【转】医学影像技术(中国普通高等学校本科专业)
- Java 算法 打水问题
- 【Flink】Flink 源码之ExecutionGraph
- 嵌入式工作笔记0001---认识SoC
- 详解 meta http-equiv = X-UA-Compatible content = IE=edge,chrome=1 /
- shell 脚本检测端口状态
- WIN32汇编语言中位图的使用
- 台式计算机如何连接投影仪,台式机PC怎样与投影仪连接
- 团队领导力(一)规划+落实
- SQL AUTO INCREMENT
- 极验3forbidden,易盾d包
- Quantopian单因子分析工具:Alphalens
- Java实现是否为节假日、工作日判断(调用“http://api.goseek.cn/Tools/holiday”接口)
- 勾股定理的证明(转载)
- linux开发工具列表