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.
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".
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.
$ pip install igo-python
Vous pouvez désormais utiliser Igo via Python.
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
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épertoire
mecab-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.
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.
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
Utilisez mecab-ipadic-neologd avec igo-python mecab-ipadic-NEologd : Neologism dictionary for MeCab J'ai essayé d'utiliser igo-python
Recommended Posts