LoginSignup
18
15

More than 5 years have passed since last update.

python から jar を使いたい

Last updated at Posted at 2015-04-20

python から jar を使いたい

JNIだとCPython使わないとならないみたいなので、
py4j とかいうのがよさげ。
別プロセスでjavaを起動してソケット通信でpythonとブリッジする的なやつ。

kuromojiと自作のjarで試してみた。
っていうか、pythonからkuromojiが使えると嬉しかったので、いろいろ試してみた結果。

準備

  • py4jの中から py4j0.8.2.1.jar を取り出して用意しておく
  • kuromoji-0.7.7.jar を用意しておく

コード

まず自作のやつ

org/kuryu/Sample.java
package org.kuryu;

public class Sample {
  public String foo() {
    return "FOO!!!!!!!!";
  }

  public static String bar() {
    return "BAR!!!!!!!!";
  }
}
jarにする
$ javac org/kuryu/Sample.java
$ jar cvf kuryu.jar org/kuryu/*.class

py4jのjava側のコード

J4Py.java
import py4j.GatewayServer;

public class J4Py {
  public static void main(String[] args) {
    J4Py app = new J4Py();
    GatewayServer server = new GatewayServer(app);
    server.start();
  }
}

manifestに自作のjarとkuromojiも加えておく。

manifest.mf
Main-Class: J4Py
Class-Path: py4j0.8.2.1.jar kuromoji-0.7.7.jar kuryu.jar
jarにする
$ javac -cp py4j0.8.2.1.jar J4Py.java
$ jar cvfm J4Py.jar manifest.mf J4Py.class

GatewayServerの起動

classpath通して起動すれば、py4j側からも使えるらしい。

jarで起動する場合
$ java -jar J4Py.jar
classで起動する場合
$ java -cp py4j0.8.2.1.jar:kuromoji-0.7.7.jar:kuryu.jar:. J4Py

py4jのpython側のコード

javaのGatewayServerを起動した状態で、こう。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

from py4j.java_gateway import JavaGateway

gateway = JavaGateway()

# java.util.Random
random = gateway.jvm.java.util.Random()
n1 = random.nextInt(10)
n2 = random.nextInt(10)
print "%d + %d = %d" % (n1, n2, n1+n2)

# 自作のjar
kuryu = gateway.jvm.org.kuryu.Sample
print kuryu.bar()
ins = kuryu()
print ins
print ins.foo()

# kuromoji の Tokenizer
KuroTokenizer = gateway.jvm.org.atilika.kuromoji.Tokenizer
tokenizer = KuroTokenizer.builder().build();
a = tokenizer.tokenize(u"寿司が食べたい。")
for token in a:
    print token.getSurfaceForm() + "\t" + token.getAllFeatures()

参考にしたとこ

主にこのへん。

http://www.atilika.com/ja/products/kuromoji.html
http://py4j.sourceforge.net/py4j_java_gateway.html
http://qiita.com/mojaie/items/f16b97b1388f73e56b86

18
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
15