JNI scheint also CPython verwenden zu müssen py4j ist eine gute Idee. Ein Typ, der Java in einem anderen Prozess startet und über Socket-Kommunikation eine Brücke mit Python schlägt.
Ich habe es mit Kuromoji und meinem eigenen Glas versucht. Ich war froh, dass ich Kuromoji aus Python verwenden konnte, also habe ich verschiedene Dinge ausprobiert.
py4j0.8.2.1.jar
aus py4j und bereite es vor.kuromoji-0.7.7.jar
bereitorg/kuryu/Sample.java
package org.kuryu;
public class Sample {
public String foo() {
return "FOO!!!!!!!!";
}
public static String bar() {
return "BAR!!!!!!!!";
}
}
Mach es zu einem Glas
$ javac org/kuryu/Sample.java
$ jar cvf kuryu.jar org/kuryu/*.class
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();
}
}
Fügen Sie dem Manifest Ihr eigenes Glas und Kuromoji hinzu.
manifest.mf
Main-Class: J4Py
Class-Path: py4j0.8.2.1.jar kuromoji-0.7.7.jar kuryu.jar
Mach es zu einem Glas
$ javac -cp py4j0.8.2.1.jar J4Py.java
$ jar cvfm J4Py.jar manifest.mf J4Py.class
Wenn Sie es über den Klassenpfad starten, können Sie es anscheinend auch von der py4j-Seite aus verwenden.
Wenn Sie mit dem Glas beginnen
$ java -jar J4Py.jar
Wenn Sie mit dem Unterricht beginnen
$ java -cp py4j0.8.2.1.jar:kuromoji-0.7.7.jar:kuryu.jar:. J4Py
Führen Sie dies aus, während der Java Gateway Server ausgeführt wird.
#!/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)
#Selbstgemachtes Glas
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"Ich möchte Sushi essen.")
for token in a:
print token.getSurfaceForm() + "\t" + token.getAllFeatures()
Hauptsächlich so seltsam.
http://www.atilika.com/ja/products/kuromoji.html http://py4j.sourceforge.net/py4j_java_gateway.html http://qiita.com/mojaie/items/f16b97b1388f73e56b86
Recommended Posts