Enregistrer des mots dans le dictionnaire utilisateur GiNZA (SudachiPy)

introduction

Je suis impliqué dans le traitement du langage naturel depuis quelques semaines, et j'ai souvent utilisé R et MeCab, mais récemment, j'ai entendu dire que GiNZA de python est un excellent outil pour le traitement du langage naturel, et je migre. Tout d'abord, j'avais besoin d'ajouter un mot qui n'est pas dans le dictionnaire, j'ai donc résumé le flux.

environnement

0. Installation de GiNZA

Il peut être facilement installé avec la commande pip.

$ pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"

1. Préparez un dictionnaire

Il semble que "Sudachi Py" soit en cours pour l'analyse morphologique de GiNZA. Par conséquent, l'ajout d'un mot est fondamentalement identique à l'ajout d'un mot au dictionnaire utilisateur "Sudachi". Tout d'abord, préparez un dictionnaire avec un fichier csv. Le format du dictionnaire est `En-tête, ID de concaténation à gauche, ID de concaténation à droite, coût, en-tête, mots de partie 1,2,3,4, mots de partie (type d'utilisation), mots de partie (type d'utilisation), lecture, notation de normalisation, ID de type de dictionnaire, type de division, A Informations de division d'unité, informations de division d'unité B, non utilisées Organisez dans l'ordre de.

$ vim add_term.csv
Congelé,4786,4786,5000,Congelé,nom,固有nom,Général,*,*,*,Anato Yukinojoou,Congelé,*,*,*,*,*

Chaque élément est décrit en détail dans ici, mais cette fois, j'ai attribué l'ID et le coût recommandés. .. Entrez "*" pour les éléments inutiles. Un exemple est publié sur le site ci-dessus, donc je pense que vous devriez sélectionner celui qui s'en rapproche le plus.

2. Créez un dictionnaire

Puisque SudachiPy a également été installé lors de l'installation de GiNZA, utilisez la commande sudapipy pour créer le dictionnaire. La commande est suda chipy ubuild -s [chemin du dictionnaire système] [chemin du fichier csv créé].

$ sudachipy ubuild \
  -s .pyenv/versions/anaconda3-5.2.0/envs/ginza/lib/python3.6/site-packages/sudachidict/resources/system.dic \
  add_term.csv

Le chemin est long car je construis l'environnement avec pyenv, mais veuillez le changer en fonction de votre propre environnement. Une fois exécuté, le message suivant s'affiche.

reading the source file...2 words
writing the POS table...2 bytes
writing the connection matrix...4 bytes
building the trie...done
writing the trie...1028 bytes
writing the word-ID table...14 bytes
writing the word parameters...16 bytes
writing the word_infos...96 bytes
writing word_info offsets...8 bytes

En cas de succès, "user.dic" sera ajouté au répertoire courant.

3. Ajoutez le dictionnaire utilisateur créé au fichier de configuration SudachiPy

Ajoutez le chemin user.dic généré. Ajoutez le chemin d'accès à l'emplacement suivant dans le fichier de paramètres.

$ vim ./pyenv/versions/anaconda3-5.2.0/envs/ginza/lib/python3.6/site-packages/sudachipy/resources/sudachi.json

{
  "characterDefinitionFile" : "char.def"
  "userDict" : ["user.chemin dic"] #Utilisateur ici.chemin dicを追記してください
  "inputTextPlugin" : [
  ...
  ...

Contrôle de fonctionnement

--Vérifier depuis la ligne de commande

SudachiPy est installé lorsque GiNZA est installé, alors utilisez-le.

$ sudachipy

#Avant l'ajout
Congelé
Ana substantif,Nomenclature commune,Général,*,*,*Anna
Et des mots auxiliaires,Assistant de cas,*,*,*,*Quand
Neige substantif,Nomenclature commune,Général,*,*,*neige
Mots auxiliaires,Assistant de cas,*,*,*,*de
Reine substantif,Nomenclature commune,Général,*,*,*Reine
EOS

#Après l'addition
Congelé
Anna et la reine des neiges Noun,Nomenclature propriétaire,Général,*,*,*Congelé
EOS

--Utilisé avec GiNZA de python

python3


import spacy

nlp = spacy.load('ja_ginza')
doc = nlp('Je veux aller voir Anna et la reine des neiges')

for sent in doc.sents:
    for token in sent:
        print(token.orth_)

Résultat d'exécution

Congelé
À
Vue
À
Aller
Vouloir

J'ai pu le diviser en morphologie correctement!

Conclusion

Puisque SudachiPy est utilisé pour l'analyse morphologique de GiNZA, je pense que c'était plus facile que d'ajouter des mots dans MeCab. Je vous serais reconnaissant si vous pouviez signaler des erreurs.

Site de référence

Recommended Posts

Enregistrer des mots dans le dictionnaire utilisateur GiNZA (SudachiPy)
Ajouter des mots au dictionnaire utilisateur de MeCab sur Ubuntu pour une utilisation en Python
N'y a-t-il pas une valeur par défaut dans le dictionnaire?
Changer les mots réservés du moteur de modèle Flask
[AWS IoT] Enregistrer des éléments dans AWS IoT à l'aide du SDK AWS IoT Python
Enregistrer une tâche dans cron pour la première fois
Implémentez l'extension utilisateur Django et enregistrez les informations jointes