[JAVA] Je veux utiliser jar de python

Je veux utiliser jar de python

JNI semble devoir utiliser CPython, donc py4j est une bonne idée. Un gars qui démarre java dans un autre processus et établit des ponts avec python par communication socket.

Je l'ai essayé avec kuromoji et mon propre pot. Je veux dire, j'étais heureux de pouvoir utiliser kuromoji de python, alors j'ai essayé diverses choses.

Préparation

code

Tout d'abord, celui que j'ai fait

org/kuryu/Sample.java


package org.kuryu;

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

  public static String bar() {
    return "BAR!!!!!!!!";
  }
}

Faites-en un pot


$ javac org/kuryu/Sample.java
$ jar cvf kuryu.jar org/kuryu/*.class

Code du côté java de py4j

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();
  }
}

Ajoutez votre propre pot et kuromoji au manifeste.

manifest.mf


Main-Class: J4Py
Class-Path: py4j0.8.2.1.jar kuromoji-0.7.7.jar kuryu.jar

Faites-en un pot


$ javac -cp py4j0.8.2.1.jar J4Py.java
$ jar cvfm J4Py.jar manifest.mf J4Py.class

Démarrer le serveur de passerelle

Si vous le démarrez via classpath, il semble que vous puissiez également l'utiliser du côté py4j.

Au début avec jar


$ java -jar J4Py.jar

Au début de la classe


$ java -cp py4j0.8.2.1.jar:kuromoji-0.7.7.jar:kuryu.jar:. J4Py

Code du côté python de py4j

Avec le serveur de passerelle Java en cours d'exécution, procédez comme suit.

#!/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)

#Pot fait maison
kuryu = gateway.jvm.org.kuryu.Sample
print kuryu.bar()
ins = kuryu()
print ins
print ins.foo()

#Tokenizer kuromoji
KuroTokenizer = gateway.jvm.org.atilika.kuromoji.Tokenizer
tokenizer = KuroTokenizer.builder().build();
a = tokenizer.tokenize(u"Je veux manger des sushis.")
for token in a:
    print token.getSurfaceForm() + "\t" + token.getAllFeatures()

Je l'ai utilisé comme référence

Principalement cet étrange.

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

Recommended Posts

Je veux utiliser jar de python
Je veux utiliser le solveur ceres de python
Je veux utiliser MATLAB feval avec python
Je souhaite envoyer un e-mail depuis Gmail en utilisant Python.
[Python] Je veux gérer 7DaysToDie depuis Discord! 1/3
Je souhaite utiliser le répertoire temporaire avec Python2
[Python] Je veux gérer 7DaysToDie depuis Discord! 2/3
Je veux créer du code C ++ à partir de code Python!
Je voulais utiliser la bibliothèque Python de MATLAB
Je veux utiliser le jeu de données R avec python
Je veux déboguer avec Python
Je veux démarrer beaucoup de processus à partir de python
[Python] Je souhaite utiliser l'option -h avec argparse
Je souhaite envoyer un message de Python à LINE Bot
Je veux créer un environnement Python
Je veux utiliser Linux sur mac
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
Je souhaite utiliser la console IPython Qt
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Utilisez MySQL depuis Python
Utiliser MySQL depuis Python
Utilisez BigQuery depuis Python.
Utilisez mecab-ipadic-neologd de Python
Je souhaite me connecter à PostgreSQL à partir de plusieurs langues
Je veux mémoriser, y compris les arguments de mots clés de Python
Je veux créer une fenêtre avec Python
Je veux faire un jeu avec Python
[Bash] Obtenez la puissance de python de bash en utilisant la documentation ici
Je veux fusionner des dictionnaires imbriqués en Python
Je veux faire des crises de ma tête
Je ne veux pas utiliser -inf avec np.log
#Unresolved Je veux compiler gobject-introspection avec Python3
Je souhaite utiliser ip vrf avec SONiC
Je veux résoudre APG4b avec Python (chapitre 2)
Ce que j'ai fait lors de la mise à jour de Python 2.6 vers 2.7
Je souhaite vendre les produits que j'ai listés par python scraping Mercari
Je veux écrire dans un fichier avec Python
Je souhaite utiliser la fonction d'activation Mish
Je veux afficher la progression en Python!
Utilisez Tor pour vous connecter depuis urllib2 [Python] [Mac]
Python: décompressez depuis l'entrée standard en utilisant zipfile
Conseils pour manipuler numpy.ndarray à partir de c ++ -Je veux utiliser un itérateur-
Utilisez Python de Java avec Jython. J'étais aussi accro.
Je veux écrire en Python! (1) Vérification du format de code
Je veux voir le nom de fichier de DataLoader
Même les débutants veulent dire "Je comprends parfaitement Python"
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Je veux répéter plusieurs fois un générateur Python
Publier de Python vers Slack
python3: Comment utiliser la bouteille (2)
J'ai essayé de résumer comment utiliser matplotlib de python
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
Flirter de PHP à Python
Je veux utiliser self avec Backpropagation (tf.custom_gradient) (tensorflow)