Analyse morphologique avec Igo + mecab-ipadic-neologd en Python (avec bonus Ruby)

introduction

J'aimerais faire une analyse morphologique avec Python. Cette fois, nous utiliserons "Igo" comme analyseur morphologique et "mecab-ipadic-neologd" comme dictionnaire.

L'analyse morphologique consiste à effectuer la «division des mots» et la «participation».

Tout d'abord, je vais expliquer Igo et mecab-ipadic-neologd, puis je vais le configurer pour qu'il puisse réellement être utilisé en Python.

Qu'est-ce que Igo?

Puisque "Mecab" est réputé comme moteur d'analyse morphologique, beaucoup d'entre vous en ont peut-être entendu parler. Cette fois, j'utiliserai "Igo". "Mecab" est écrit en langage C, et "Igo" semble être fait en java. "Igo" semble être conçu pour renvoyer les mêmes résultats d'analyse que Mecab. Il semble qu'il se déplace à la même vitesse par rapport à la vitesse. Il semble que cela puisse être difficile à utiliser car je dois construire le binaire "Mecab", j'ai donc décidé d'utiliser "Igo".

Qu'est-ce que mecab-ipadic-neologd?

Un élément important de l'analyse morphologique est le «dictionnaire». Le lien ci-dessous explique le mécanisme de l'analyse morphologique (Mecab dans ce cas) pour votre référence. Découvrez les coulisses de l'analyse morphologique japonaise! Comment MeCab analyse morphologiquement

Quand il y a une phrase «vivre à Tokyo», on sent qu'elle ne peut être bien analysée que si chaque mot «vivre à Tokyo, capitale» est enregistré.

Aussi, par exemple, si "Sazae-san" est reconnu comme "Sazae-san (titre)" ou "Sazae (nom personnel) + san (titre)" dans l'animation dépend de la présence de "Sazae-san" dans le dictionnaire. Par conséquent, il est important que "Sazae-san" soit inscrit dans le dictionnaire dans la phrase "Avez-vous vu Sazae-san hier? C'était intéressant."

Pour "Igo", je construis et utilise le dictionnaire IPA de Mecab pour Igo, mais il manque une nomenclature appropriée. "Mecab-ipadic-neologd" complète cela. "Mecab-ipadic-neologd" enregistre les notations telles que la nomenclature appropriée qui ne peuvent pas être couvertes par la norme Mecab. De plus, le dictionnaire est mis à jour deux fois par semaine et les derniers mots sont mis à jour, ce qui est utile.

installer

$ pip install igo-python

Vous pouvez désormais utiliser Igo via Python.

clone neologd

git clone https://github.com/neologd/mecab-ipadic-neologd

Puisque neologd est un dictionnaire pour mecab, il est nécessaire de le construire pour Igo afin qu'il puisse être utilisé avec Igo.

Pour neologd, ce qui suit sera utile. mecab-ipadic-neologd

Construire un dictionnaire pour Igo

Téléchargez ʻigo-0.4.5.jar` depuis la page Igo. neologd est un dictionnaire pour Mecab, alors construisez-le pour Igo.

Allez dans le répertoire mecab-ipadic-neologd

$ bin/install-mecab-ipadic-neologd

Éxécuter. Cela créera un répertoire build.

Dans le répertoire build, il devrait y avoir un répertoire comme mecab-ipadic-2.7.0-20070801-neologd-20160826. (Cependant, la partie numérique peut être différente.) Copiez le fichier ʻigo-0.4.5.jartéléchargé dans ce répertoire. Vous pouvez compiler en entrant le répertoiremecab-ipadic-2.7.0-20070801-neologd-20160826` et en exécutant la commande suivante.

$ java -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic neologd . "utf-8"
java -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic (Nom du répertoire de destination de sortie du dictionnaire) (Nom du répertoire d'extraction du dictionnaire Mecab) (Code de caractère du dictionnaire)

Modifiez (le nom du répertoire de destination de sortie du dictionnaire) si nécessaire. Je l'ai nommé «neologd» ici. (Nom du répertoire d'extension du dictionnaire Mecab) sera le répertoire construit. Cette fois, il s'agit de mecab-ipadic-2.7.0-20070801-neologd-20160826.

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

Si vous obtenez l'erreur, vous pouvez ajouter -Xmx1024m comme indiqué ci-dessous.

java -Xmx1024m -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic neologd . "utf-8"

Si cela ne fonctionne pas, augmenter la valeur de 1024 fonctionnera.

Confirmation d'exécution

Essayez d'exécuter ce qui suit dans le répertoire où se trouve le neologd compilé.

$ python
>>> import igo
>>> tagger = igo.tagger.Tagger('neologd')
>>> for t in tagger.parse('Le 10, "Masahiro Nakai's Mi Naru Library" (TV Asahi), SMAP Masahiro Nakai a révélé les malentendus passés de Shinichi Shinohara.')
...   print(t)
...
surface:Le 10, feature:nom,Nomenclature propriétaire,Général,*,*,*,Le 10,Junichi,Junichi, start=0
surface:diffuser, feature:nom,Changer de connexion,*,*,*,*,diffuser,Housou,Horso, start=3
surface:de, feature:Particule,syndicat,*,*,*,*,de,Non,Non, start=5
surface: 「, feature:symbole,Ouvrir les parenthèses,*,*,*,*,「,「,「, start=6
surface:Bibliothèque de Masahiro Nakai, feature:nom,Nomenclature propriétaire,Général,*,*,*,Bibliothèque de Masahiro Nakai,Bibliothèque minimale de Masahiro Nakai,Bibliothèque minimale de Masahiro Nakai, start=7
surface: 」, feature:symbole,Fermé entre parenthèses,*,*,*,*,」,」,」, start=19
surface: (, feature:symbole,Ouvrir les parenthèses,*,*,*,*,(,(,(, start=20
surface:TV Asahi, feature:nom,Nomenclature propriétaire,Organisation,*,*,*,TV Asahi,TV Asahi,TV Asahi, start=21
surface:système, feature:nom,suffixe,Général,*,*,*,système,Kay,Kay, start=26
surface: ), feature:symbole,Fermé entre parenthèses,*,*,*,*,),),), start=27
surface:alors, feature:Particule,Assistant de cas,Général,*,*,*,alors,De,De, start=28
surface: 、, feature:symbole,Point de lecture,*,*,*,*,、,、,、, start=29
surface: SMAP, feature:nom,Nomenclature propriétaire,Nom d'une personne,Général,*,*,SMAP,Smap,Smap, start=30
surface:de, feature:Particule,syndicat,*,*,*,*,de,Non,Non, start=34
surface:Masahiro Nakai, feature:nom,Nomenclature propriétaire,Nom d'une personne,Général,*,*,Masahiro Nakai,Nakai Masahiro,Nakai Masahiro, start=35
surface:Mais, feature:Particule,Assistant de cas,Général,*,*,*,Mais,Géorgie,Géorgie, start=39
surface: 、, feature:symbole,Point de lecture,*,*,*,*,、,、,、, start=40
surface:Shinichi Shinohara, feature:nom,Nomenclature propriétaire,Nom d'une personne,Général,*,*,Shinichi Shinohara,Shinohara Shinichi,Shinohara Shinichi, start=41
surface:de, feature:Particule,syndicat,*,*,*,*,de,Non,Non, start=45
surface:passé, feature:nom,Avocat possible,*,*,*,*,passé,Kako,Kako, start=46
surface:de, feature:Particule,syndicat,*,*,*,*,de,Non,Non, start=48
surface:Malentendu, feature:nom,Changer de connexion,*,*,*,*,Malentendu,Canchigai,Canchigai, start=49
surface:À, feature:Particule,Assistant de cas,Général,*,*,*,À,Wo,Wo, start=52
surface:Révéler, feature:verbe,Indépendance,*,*,Ligne Godan / Sa,Forme basique,Révéler,Akas,Akas, start=53
surface:Un acte, feature:nom,Général,*,*,*,*,Un acte,Hitomak,Hitomak, start=56
surface:Mais, feature:Particule,Assistant de cas,Général,*,*,*,Mais,Géorgie,Géorgie, start=58
surface:Ah, feature:verbe,Indépendance,*,*,Cinq étapes, La ligne,Connexion continue,y a-t-il,Ah,Ah, start=59
surface:Ta, feature:Verbe auxiliaire,*,*,*,Spécial,Forme basique,Ta,Ta,Ta, start=61
surface: 。, feature:symbole,Phrase,*,*,*,*,。,。,。, start=62

Je l'ai bien fait! La phrase d'exemple utilise la phrase d'exemple de mecab-ipadic-NEologd: Neologism dictionary for MeCab.

Autres langues (édition Ruby)

Igo est maintenant facilement disponible dans d'autres langues telles que ʻigo-php et ʻigo-ruby. Je vais également l'essayer sur Ruby. Si le dictionnaire est jusqu'à présent prêt, vous pouvez le faire facilement.

$ gem install igo-ruby
require 'igo-ruby'

tagger = Igo::Tagger.new('neologd')
t = tagger.parse('Le 10, "Masahiro Nakai's Mi Naru Library" (TV Asahi), SMAP Masahiro Nakai a révélé les malentendus passés de Shinichi Shinohara.')

t.each do |m|
  puts "#{m.surface} #{m.feature} #{m.start}"
end
10e nomenclature,Nomenclature propriétaire,Général,*,*,*,Le 10,Junichi,Junichi 0
Nomenclature de diffusion,Changer de connexion,*,*,*,*,diffuser,Housou,Horso 3
Mots auxiliaires,syndicat,*,*,*,*,de,Non,Non 5
"Bibliothèque Mi Naru de Masahiro Nakai" (substantif,Nomenclature propriétaire,Général,*,*,*,Corée accrochée à un cheval chinois,Chugokunoshiriumanishigamitsukukankoku,Chugokunashiriumanishigamitsukukankoku 6
TV Asahi substantif,Nomenclature propriétaire,Organisation,*,*,*,TV Asahi,TV Asahi,TV Asahi 21
Nomenclature du système,suffixe,Général,*,*,*,système,Kay,Kay 26
) Symbole,Fermé entre parenthèses,*,*,*,*,),),) 27
Auxiliaire,Assistant de cas,Général,*,*,*,alors,De,De 28
, Symbole,Point de lecture,*,*,*,*,、,、,、 29
SMAP substantif,Nomenclature propriétaire,Nom d'une personne,Général,*,*,SMAP,Smap,Smap 30
Mots auxiliaires,syndicat,*,*,*,*,de,Non,Non 34
Masahiro Nakai Noun,Nomenclature propriétaire,Nom d'une personne,Général,*,*,Masahiro Nakai,Nakai Masahiro,Nakai Masahiro 35
Est un assistant,Assistant de cas,Général,*,*,*,Mais,Géorgie,Géorgie 39
, Symbole,Point de lecture,*,*,*,*,、,、,、 40
Shinichi Shinohara,Nomenclature propriétaire,Nom d'une personne,Général,*,*,Shinichi Shinohara,Shinohara Shinichi,Shinohara Shinichi 41
Mots auxiliaires,syndicat,*,*,*,*,de,Non,Non 45
Nomenclature passée,Avocat possible,*,*,*,*,passé,Kako,Kako 46
Mots auxiliaires,syndicat,*,*,*,*,de,Non,Non 48
Malentendu substantif,Changer de connexion,*,*,*,*,Malentendu,Canchigai,Canchigai 49
Auxiliaire,Assistant de cas,Général,*,*,*,À,Wo,Wo 52
Révéler le verbe,Indépendance,*,*,Ligne Godan / Sa,Forme basique,Révéler,Akas,Akas 53
Un substantif acte,Général,*,*,*,*,Un acte,Hitomak,Hitomak 56
Est un assistant,Assistant de cas,Général,*,*,*,Mais,Géorgie,Géorgie 58
Ah verbe,Indépendance,*,*,Cinq étapes, La ligne,Connexion continue,y a-t-il,Ah,Ah 59
Verbe auxiliaire,*,*,*,Spécial,Forme basique,Ta,Ta,Ta 61
.. symbole,Phrase,*,*,*,*,。,。,。 62

Référence: kyow / igo-ruby

référence

Utilisez mecab-ipadic-neologd avec igo-python mecab-ipadic-NEologd : Neologism dictionary for MeCab J'ai essayé d'utiliser igo-python

Recommended Posts

Analyse morphologique avec Igo + mecab-ipadic-neologd en Python (avec bonus Ruby)
[Python] Analyse morphologique avec MeCab
Analyse morphologique japonaise avec Python
Text mining avec Python ① Analyse morphologique
Python: analyse morphologique simplifiée avec des expressions régulières
De la préparation à l'analyse morphologique avec python en utilisant polyglotte au marquage des mots partiels
J'ai essayé d'utiliser mecab avec python2.7, ruby2.3, php7
Effectuer une analyse d'entité à l'aide de spaCy / GiNZA en Python
[Construction de l'environnement] Analyse des dépendances à l'aide de CaboCha avec Python 2.7
Analyse de données avec python 2
Analyse vocale par python
Analyse vocale par python
Analyse de données avec Python
Analyse de régression avec Python
Text mining avec Python ① Analyse morphologique (re: version Linux)
Analyse des composants principaux à l'aide de python de nim avec nimpy
Grattage au sélénium en Python
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
[S3] CRUD avec S3 utilisant Python [Python]
[Analyse de co-occurrence] Analyse de co-occurrence facile avec Python! [Python]
Exploitez LibreOffice avec Python
Analyse morphologique japonaise avec Janome
Python: texte japonais: analyse morphologique
Combinaisons qui se chevauchent avec des limites supérieures en Python / Ruby / PHP / Golang (Go)
Utilisation de Quaternion avec Python ~ numpy-quaternion ~
Débogage avec pdb en Python
[Python] Utilisation d'OpenCV avec Python (basique)
Analyse des émotions par Python (word2vec)
Gérer les sons en Python
Analyse des contraintes symétriques axiales avec Python
Zundokokiyoshi avec python / rubis / Lua
Grattage avec Tor en Python
Tweet avec image en Python
Analyse de squelette planaire avec Python
Combiné avec ordinal en Python
Analyse de régression simple avec Python
Précautions lors de l'utilisation de Python avec AtCoder
Choses à garder à l'esprit lors de l'utilisation de cgi avec python.
Analyse des secousses musculaires avec Python
Traduit à l'aide de googletrans en Python
Utilisation du mode Python dans le traitement
[PowerShell] Analyse morphologique avec SudachiPy
Utiliser OpenCV avec Python @Mac
Envoyer en utilisant Python avec Gmail
Activer le moteur d'analyse morphologique MeCab en Python3 (version mars 2016)
Extraction d'objets dans l'image par correspondance de modèles en utilisant OpenCV avec Python
Implémenter le traitement du classement avec des liens en Python à l'aide de Redis Sorted Set
Compléter python avec emacs en utilisant company-jedi
Reconnaissance des nombres dans les images avec Python
Moyenne harmonique par Python (en utilisant SciPy)
Programmation GUI en Python avec Appjar
Tester avec des nombres aléatoires en Python
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Précautions lors de l'utilisation de Pit avec Python
Première analyse de régression simple en Python
Scraping avec Node, Ruby et Python
Analyse de la structure du squelette en trois dimensions avec Python
GOTO en Python avec Sublime Text 3
Utilisation de Rstan de Python avec PypeR
Travailler avec LibreOffice en Python: import