[PYTHON] Emballez le logiciel de traitement japonais dans une image Docker

Emballez le logiciel de traitement japonais dans une image Docker

J'ai essayé de regrouper le logiciel suivant qui est utile pour le traitement du langage naturel japonais dans une image Docker.


Lieu de publication


Comment utiliser

Démarrer Bash

Pour le moment, si vous souhaitez configurer un conteneur et y aller, vous pouvez le faire comme ceci:

$ docker run --rm -it ototadana/nlp-jp bash

Lancer Python (REPL)

Le démarrage de Python ressemble à ceci:

$ docker run --rm -it ototadana/nlp-jp python

MeCab Un exemple d'exécution de la commande mecab:

$ echo "Le crash d'OVNI qui est devenu un sujet brûlant l'année dernière n'est plus qu'une ressource touristique. Spécialités de la ville" | docker run --rm -i ototadana/nlp-jp mecab
L'année dernière,Avocat possible,*,*,*,*,l'année dernière,Sakunen,Sakunen
Nomenclature des sujets,Général,*,*,*,*,sujet,Wadai,Wadai
Auxiliaire,Assistant de cas,Général,*,*,*,À,ré,ré
Verbe naru,Indépendance,*,*,Cinq étapes, La ligne,Connexion continue,Devenir,Natsu,Natsu
Verbe auxiliaire,*,*,*,Spécial,Forme basique,Ta,Ta,Ta
OVNI substantif,Nom propre,Général,*,*,*,UFO,OVNI,OVNI
Crash substantif,Changer de connexion,*,*,*,*,crash,Twirac,Twirac
Nomenclature des cas,Général,*,*,*,*,Incident,Jiken,Jiken
, Symbole,Point de lecture,*,*,*,*,、,、,、
Maintenant nomenclature,Avocat possible,*,*,*,*,maintenant,Ima,Ima
Est un assistant,Assistance,*,*,*,*,Est,C,sensationnel
Juste un nom,Général,*,*,*,*,pourtant,gratuit,gratuit
Mots auxiliaires,syndicat,*,*,*,*,de,Non,Non
Ressource touristique substantif,Nom propre,Général,*,*,*,Ressources touristiques,Kankoushigen,Kanko Shigen
.. symbole,Phrase,*,*,*,*,。,。,。
Ville substantif,Général,*,*,*,*,Ville,Machi,Machi
Mots auxiliaires,syndicat,*,*,*,*,de,Non,Non
Nomenclature de spécialité,Général,*,*,*,*,Spécialité,Mabutsu,Mabutsu
EOS

CaboCha Exemple d'exécution de la commande cabocha:

$ echo "Le crash d'OVNI qui est devenu un sujet brûlant l'année dernière n'est plus qu'une ressource touristique. Spécialités de la ville" | docker run --rm -i ototadana/nlp-jp cabocha
l'année dernière---D
Vers le sujet-D
devenu-D
Crash d'OVNI,-----D
maintenant---D
Juste-D
Ressources touristiques.---D
la ville-D
Spécialité

WordNet japonais

Il est stocké sous forme de base de données au format sqlite dans WordNet japonais. Vous pouvez y accéder avec du code python comme ci-dessous:

example-wordnet.py:

import sqlite3

query = """
    select c.def from sense a, word b, synset_def c
      where b.lemma = ? and c.lang = 'jpn'
      and a.wordid = b.wordid and a.synset = c.synset
    """

with sqlite3.connect('/dictionary/wnjpn.db') as conn:
    print([row[0] for row in conn.cursor().execute(query, ['sujet'])])

Si vous avez écrit ce code côté hôte, montez et exécutez le répertoire courant côté hôte avec l'option -v comme suit:

$ docker run --rm -i -v $PWD:/app ototadana/nlp-jp python /app/example-wordnet.py
['Sujet de conversation ou de discussion']

MeCab + WordNet japonais

MeCab est également accessible à partir du code Python. À partir du code Python, vous pouvez utiliser MeCab en combinaison avec WordNet japonais comme suit:

example-mecab+wordnet.py:

import MeCab, sqlite3

def get_definition(word):
    query = """
        select c.def from sense a, word b, synset_def c
          where b.lemma = ? and c.lang = 'jpn'
          and a.wordid = b.wordid and a.synset = c.synset
        """
    with sqlite3.connect('/dictionary/wnjpn.db') as conn:
        return [row[0] for row in conn.cursor().execute(query, [word])]

tagger = MeCab.Tagger()
tagger.parse('')

node = tagger.parseToNode('Le crash d'OVNI qui est devenu un sujet brûlant l'année dernière n'est plus qu'une ressource touristique. Spécialités de la ville').next

while node:
    print('%s:' % node.surface)
    print('  - %s' % node.feature)
    for definition in get_definition(node.feature.split(',')[6]):
        print('  - %s' % definition)
    print()
    node = node.next

Quand je fais cela, cela ressemble à ceci:

$ docker run --rm -i -v $PWD:/app ototadana/nlp-jp python /app/example-mecab+wordnet.py
l'année dernière:
  -nom,Avocat possible,*,*,*,*,l'année dernière,Sakunen,Sakunen

sujet:
  -nom,Général,*,*,*,*,sujet,Wadai,Wadai
  -Sujet de conversation ou de discussion

À:
  -Particule,Assistant de cas,Général,*,*,*,À,ré,ré

Devenu:
  -verbe,Indépendance,*,*,Cinq étapes, La ligne,Connexion continue,Devenir,Natsu,Natsu
  -Accepter le changement ou le développement
  -Fort et joyeux
  -Tomber malade et être victime de maladie
  -Officiellement prendre un an
  -Approprié
  -Faire ou représenter:
  -Exister
  -Le calcul du nombre ou de la quantité correspond
  -Développer et atteindre la maturité
  -Gagner en maturité
  -Se produit d'une manière particulière
  -Atteindre ou entrer un état, une relation, une condition, une utilisation ou un statut
  -Peut, changer, être fait ou c'est possible
  -Passer progressivement à un état et présenter certaines propriétés ou attributs
  -Devenir
  -Être ou être dans un état ou un état particulier
  -Déformé ou sujet à des changements de position ou de comportement
  -Diriger ou distraire l'attention, les intérêts, les pensées ou les intérêts d'une personne de quelque chose
  -Développer

Ta:
  -Verbe auxiliaire,*,*,*,Spécial,Forme basique,Ta,Ta,Ta

UFO:
  -nom,Nom propre,Général,*,*,*,UFO,OVNI,OVNI

crash:
  -nom,Changer de connexion,*,*,*,*,crash,Twirac,Twirac
  -Chute libre rapide due à la gravité
  -Sous l'influence de la gravité, il tombe sans s'arrêter
  -Tomber ou tomber brusquement

Incident:
  -nom,Général,*,*,*,*,Incident,Jiken,Jiken
  -Tollé public
  -Problèmes qui doivent être étudiés
  -Un seul événement notable
  -Quelque chose est arrivé

、:
  -symbole,Point de lecture,*,*,*,*,、,、,、

maintenant:
  -nom,Avocat possible,*,*,*,*,maintenant,Ima,Ima
  -Actuel ou moderne
  -Présent momentané
  -Temps qui passe actuellement
  -Une série d'heures incluant le moment du discours
  -Juste un peu avant
  -Dans le présent historique
  -À ce stade de la narration d'une série d'événements passés
  -À l'heure actuelle, le modèle temporel
  -Juste maintenant
  -En ce moment
  -Courant
  -En ce moment

Est:
  -Particule,Assistance,*,*,*,*,Est,C,sensationnel

pourtant:
  -nom,Général,*,*,*,*,pourtant,gratuit,gratuit
  -Sans rien d'autre inclus ou lié
  -Et beaucoup ne sont rien

de:
  -Particule,syndicat,*,*,*,*,de,Non,Non

Ressources touristiques:
  -nom,Nom propre,Général,*,*,*,Ressources touristiques,Kankoushigen,Kanko Shigen

。:
  -symbole,Phrase,*,*,*,*,。,。,。

Ville:
  -nom,Général,*,*,*,*,Ville,Machi,Machi
  -Des situations qui donnent des opportunités
  -Une région de la ville aux caractéristiques distinctives

de:
  -Particule,syndicat,*,*,*,*,de,Non,Non

Spécialité:
  -nom,Général,*,*,*,*,Spécialité,Mabutsu,Mabutsu
  -Divertissement offert aux masses

:
  - BOS/EOS,*,*,*,*,*,*,*,*

Merci

L'exemple de phrase utilisé dans l'exemple ci-dessus est le début des paroles de Oedo Controller --Yunomi feat. TORIENA.

** Yunomi est le meilleur! ** (Bref, c'est l'entrée que je voulais juste dire ...)

Recommended Posts

Emballez le logiciel de traitement japonais dans une image Docker
Générer une image Docker à l'aide de Fabric
[Traitement d'image] Postérisation
traitement d'image python
Traitement d'image 100 coups ①
Traitement d'image avec Python (j'ai essayé de le binariser en art mosaïque 0 et 1)
100 coups sur le traitement d'image !! (021-030) Je veux faire une pause ...
Tutoriel [PyTorch] (version japonaise) ④ ~ FORMATION D'UN CLASSIFICATEUR (classification d'images) ~
[Python] Masquez l'image dans un cercle à l'aide de Pillow