Morphologische Analyse mit Igo + mecab-ipadic-neologd in Python (mit Ruby-Bonus)

Einführung

Ich möchte eine morphologische Analyse mit Python durchführen. Dieses Mal verwenden wir "Igo" als morphologischen Analysator und "mecab-ipadic-neologd" als Wörterbuch.

Die morphologische Analyse besteht darin, "Wortteilung" und "Teilnahme" durchzuführen.

Zuerst erkläre ich Igo und mecab-ipadic-neologd und richte es dann so ein, dass es tatsächlich in Python verwendet werden kann.

Was ist Igo?

Da "Mecab" als morphologische Analyse-Engine bekannt ist, haben viele von Ihnen vielleicht schon davon gehört. Dieses Mal werde ich "Igo" verwenden. "Mecab" ist in C-Sprache geschrieben und "Igo" scheint in Java gemacht zu sein. "Igo" scheint so konzipiert zu sein, dass es dieselben Analyseergebnisse wie Mecab liefert. Es scheint, dass es sich im Vergleich zur Geschwindigkeit mit der gleichen Geschwindigkeit bewegt. Es scheint schwierig zu sein, es zu verwenden, da ich die "Mecab" -Binärdatei erstellen muss, also habe ich mich für "Igo" entschieden.

Was ist Mecab-Ipadic-Neologd?

Ein wichtiges Element der morphologischen Analyse ist das "Wörterbuch". Der folgende Link erläutert den Mechanismus der morphologischen Analyse (in diesem Fall Mecab) als Referenz. Blick hinter die Kulissen der japanischen morphologischen Analyse! Wie MeCab morphologisch analysiert

Wenn es einen Satz "in Tokio leben" gibt, können Sie das Gefühl haben, dass er nur dann gut analysiert werden kann, wenn jedes Wort "in Tokio leben, Hauptstadt" registriert ist.

Ob beispielsweise "Sazae-san" in der Animation als "Sazae-san (Titel)" oder "Sazae (persönlicher Name) + san (Titel)" erkannt wird, hängt auch vom Vorhandensein von "Sazae-san" im Wörterbuch ab. Daher ist es wichtig, dass "Sazae-san" im Wörterbuch im Satz "Haben Sie Sazae-san gestern gesehen? Es war interessant."

Für "Igo" erstelle und verwende ich das IPA-Wörterbuch von Mecab für Igo, aber es fehlt die richtige Nomenklatur. "Mecab-ipadic-neologd" ergänzt das. "Mecab-ipadic-neologd" zeichnet Notationen wie die richtige Nomenklatur auf, die vom Mecab-Standard nicht abgedeckt werden können. Außerdem wird das Wörterbuch zweimal pro Woche aktualisiert und die neuesten Wörter werden aktualisiert, was nützlich ist.

installieren

$ pip install igo-python

Sie können Igo jetzt über Python verwenden.

neologd Klon

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

Da neologd ein Wörterbuch für Mecab ist, muss es für Igo erstellt werden, damit es mit Igo verwendet werden kann.

Für neologd ist das Folgende hilfreich. mecab-ipadic-neologd

Erstellen Sie ein Wörterbuch für Igo

Laden Sie igo-0.4.5.jar von der Seite Igo herunter. neologd ist ein Wörterbuch für Mecab, also baue es für Igo.

Gehen Sie zum Verzeichnis mecab-ipadic-neologd

$ bin/install-mecab-ipadic-neologd

Ausführen. Dadurch wird ein "Build" -Verzeichnis erstellt.

Im Verzeichnis "build" sollte sich ein Verzeichnis wie "mecab-ipadic-2.7.0-20070801-neologd-20160826" befinden. (Der Nummernteil kann jedoch unterschiedlich sein.) Kopieren Sie das heruntergeladene igo-0.4.5.jar in dieses Verzeichnis. Sie können kompilieren, indem Sie das Verzeichnis mecab-ipadic-2.7.0-20070801-neologd-20160826 eingeben und den folgenden Befehl ausführen.

$ 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 (Name des Wörterbuchausgabezielverzeichnisses) (Name des Extraktionsverzeichnisses des Mecab-Wörterbuchs) (Wörterbuch-Zeichencode)

Ändern Sie gegebenenfalls den Namen des Ausgabezielverzeichnisses des Wörterbuchs. Ich habe es hier "neologd" genannt. (Name des Mecab-Wörterbucherweiterungsverzeichnisses) ist das erstellte Verzeichnis. Diesmal ist es "mecab-ipadic-2.7.0-20070801-neologd-20160826".

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

Wenn Sie den Fehler erhalten, können Sie -Xmx1024m wie unten gezeigt hinzufügen.

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

Wenn dies nicht funktioniert, funktioniert das Erhöhen des Werts von 1024.

Ausführungsbestätigung

Versuchen Sie Folgendes in dem Verzeichnis auszuführen, in dem sich das kompilierte neologd befindet.

$ python
>>> import igo
>>> tagger = igo.tagger.Tagger('neologd')
>>> for t in tagger.parse('Am 10., "Masahiro Nakais Mi Naru Library" (TV Asahi), enthüllte SMAP Masahiro Nakai Shinichi Shinoharas frühere Missverständnisse.')
...   print(t)
...
surface:Der 10 .., feature:Substantiv,Proprietäre Nomenklatur,Allgemeines,*,*,*,Der 10 ..,Junichi,Junichi, start=0
surface:Übertragung, feature:Substantiv,Verbindung ändern,*,*,*,*,Übertragung,Housou,Horso, start=3
surface:von, feature:Partikel,Union,*,*,*,*,von,Nein,Nein, start=5
surface: 「, feature:Symbol,Klammern öffnen,*,*,*,*,「,「,「, start=6
surface:Masahiro Nakais Bibliothek, feature:Substantiv,Proprietäre Nomenklatur,Allgemeines,*,*,*,Masahiro Nakais Bibliothek,Masahiro Nakais Minimal Library,Masahiro Nakais Minimal Library, start=7
surface: 」, feature:Symbol,In Klammern geschlossen,*,*,*,*,」,」,」, start=19
surface: (, feature:Symbol,Klammern öffnen,*,*,*,*,(,(,(, start=20
surface:TV Asahi, feature:Substantiv,Proprietäre Nomenklatur,Organisation,*,*,*,TV Asahi,TV Asahi,TV Asahi, start=21
surface:System, feature:Substantiv,Suffix,Allgemeines,*,*,*,System,Kay,Kay, start=26
surface: ), feature:Symbol,In Klammern geschlossen,*,*,*,*,),),), start=27
surface:damit, feature:Partikel,Fallassistent,Allgemeines,*,*,*,damit,De,De, start=28
surface: 、, feature:Symbol,Lesepunkt,*,*,*,*,、,、,、, start=29
surface: SMAP, feature:Substantiv,Proprietäre Nomenklatur,Name der Person,Allgemeines,*,*,SMAP,Smap,Smap, start=30
surface:von, feature:Partikel,Union,*,*,*,*,von,Nein,Nein, start=34
surface:Masahiro Nakai, feature:Substantiv,Proprietäre Nomenklatur,Name der Person,Allgemeines,*,*,Masahiro Nakai,Nakai Masahiro,Nakai Masahiro, start=35
surface:Aber, feature:Partikel,Fallassistent,Allgemeines,*,*,*,Aber,Ga,Ga, start=39
surface: 、, feature:Symbol,Lesepunkt,*,*,*,*,、,、,、, start=40
surface:Shinichi Shinohara, feature:Substantiv,Proprietäre Nomenklatur,Name der Person,Allgemeines,*,*,Shinichi Shinohara,Shinohara Shinichi,Shinohara Shinichi, start=41
surface:von, feature:Partikel,Union,*,*,*,*,von,Nein,Nein, start=45
surface:Vergangenheit, feature:Substantiv,Anwalt möglich,*,*,*,*,Vergangenheit,Kako,Kako, start=46
surface:von, feature:Partikel,Union,*,*,*,*,von,Nein,Nein, start=48
surface:Missverständnis, feature:Substantiv,Verbindung ändern,*,*,*,*,Missverständnis,Canchigai,Canchigai, start=49
surface:Zu, feature:Partikel,Fallassistent,Allgemeines,*,*,*,Zu,Wo,Wo, start=52
surface:Verraten, feature:Verb,Unabhängigkeit,*,*,Godan / Sa Linie,Grundform,Verraten,Akas,Akas, start=53
surface:Ein Akt, feature:Substantiv,Allgemeines,*,*,*,*,Ein Akt,Hitomak,Hitomak, start=56
surface:Aber, feature:Partikel,Fallassistent,Allgemeines,*,*,*,Aber,Ga,Ga, start=58
surface:Ah, feature:Verb,Unabhängigkeit,*,*,Fünf Schritte, La Linie,Kontinuierliche Verbindung,Gibt es,Ah,Ah, start=59
surface:Ta, feature:Hilfsverb,*,*,*,Besondere,Grundform,Ta,Ta,Ta, start=61
surface: 。, feature:Symbol,Phrase,*,*,*,*,。,。,。, start=62

Ich habe es gut gemacht! Der Beispielsatz verwendet den Beispielsatz von mecab-ipadic-NEologd: Neologism Dictionary for MeCab.

Andere Sprachen (Ruby Edition)

Igo ist jetzt leicht in anderen Sprachen wie "igo-php" und "igo-ruby" verfügbar. Ich werde es auch auf Ruby versuchen. Wenn das Wörterbuch bisher fertig ist, können Sie es einfach tun.

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

tagger = Igo::Tagger.new('neologd')
t = tagger.parse('Am 10., "Masahiro Nakais Mi Naru Library" (TV Asahi), enthüllte SMAP Masahiro Nakai Shinichi Shinoharas frühere Missverständnisse.')

t.each do |m|
  puts "#{m.surface} #{m.feature} #{m.start}"
end
10. Nomenklatur,Proprietäre Nomenklatur,Allgemeines,*,*,*,Der 10 ..,Junichi,Junichi 0
Broadcast-Nomenklatur,Verbindung ändern,*,*,*,*,Übertragung,Housou,Horso 3
Hilfswörter,Union,*,*,*,*,von,Nein,Nein 5
"Masahiro Nakais Mi Naru Bibliothek" (Substantiv,Proprietäre Nomenklatur,Allgemeines,*,*,*,Korea klammert sich an chinesisches Eselspferd,Chugokunoshiriumanishigamitsukukankoku,Chugokunashiriumanishigamitsukukankoku 6
TV Asahi Substantiv,Proprietäre Nomenklatur,Organisation,*,*,*,TV Asahi,TV Asahi,TV Asahi 21
Systemnomenklatur,Suffix,Allgemeines,*,*,*,System,Kay,Kay 26
) Symbol,In Klammern geschlossen,*,*,*,*,),),) 27
Hilfs,Fallassistent,Allgemeines,*,*,*,damit,De,De 28
, Symbol,Lesepunkt,*,*,*,*,、,、,、 29
SMAP Substantiv,Proprietäre Nomenklatur,Name der Person,Allgemeines,*,*,SMAP,Smap,Smap 30
Hilfswörter,Union,*,*,*,*,von,Nein,Nein 34
Masahiro Nakai Nomen,Proprietäre Nomenklatur,Name der Person,Allgemeines,*,*,Masahiro Nakai,Nakai Masahiro,Nakai Masahiro 35
Ist ein Assistent,Fallassistent,Allgemeines,*,*,*,Aber,Ga,Ga 39
, Symbol,Lesepunkt,*,*,*,*,、,、,、 40
Shinichi Shinohara,Proprietäre Nomenklatur,Name der Person,Allgemeines,*,*,Shinichi Shinohara,Shinohara Shinichi,Shinohara Shinichi 41
Hilfswörter,Union,*,*,*,*,von,Nein,Nein 45
Vergangene Nomenklatur,Anwalt möglich,*,*,*,*,Vergangenheit,Kako,Kako 46
Hilfswörter,Union,*,*,*,*,von,Nein,Nein 48
Missverständnis Substantiv,Verbindung ändern,*,*,*,*,Missverständnis,Canchigai,Canchigai 49
Hilfs,Fallassistent,Allgemeines,*,*,*,Zu,Wo,Wo 52
Verb enthüllen,Unabhängigkeit,*,*,Godan / Sa Linie,Grundform,Verraten,Akas,Akas 53
Ein Akt Nomen,Allgemeines,*,*,*,*,Ein Akt,Hitomak,Hitomak 56
Ist ein Assistent,Fallassistent,Allgemeines,*,*,*,Aber,Ga,Ga 58
Ah Verb,Unabhängigkeit,*,*,Fünf Schritte, La Linie,Kontinuierliche Verbindung,Gibt es,Ah,Ah 59
Hilfsverb,*,*,*,Besondere,Grundform,Ta,Ta,Ta 61
.. Symbol,Phrase,*,*,*,*,。,。,。 62

Referenz: kyow / igo-ruby

Referenz

Verwenden Sie mecab-ipadic-neologd mit igo-python mecab-ipadic-NEologd : Neologism dictionary for MeCab Ich habe versucht, igo-python zu verwenden

Recommended Posts

Morphologische Analyse mit Igo + mecab-ipadic-neologd in Python (mit Ruby-Bonus)
[Python] Morphologische Analyse mit MeCab
Japanische morphologische Analyse mit Python
Text Mining mit Python ① Morphologische Analyse
Python: Vereinfachte morphologische Analyse mit regulären Ausdrücken
Von der Vorbereitung der morphologischen Analyse mit Python unter Verwendung von Polyglot bis zur Teilwortmarkierung
Ich habe versucht, Mecab mit Python2.7, Ruby2.3, PHP7 zu verwenden
Führen Sie eine Entitätsanalyse mit spaCy / GiNZA in Python durch
[Umgebungskonstruktion] Abhängigkeitsanalyse mit CaboCha mit Python 2.7
Datenanalyse mit Python 2
Sprachanalyse mit Python
Sprachanalyse mit Python
Datenanalyse mit Python
Regressionsanalyse mit Python
Text Mining mit Python ① Morphologische Analyse (re: Linux-Version)
Hauptkomponentenanalyse mit Python von nim mit nimpy
Schaben mit Selen in Python
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
[S3] CRUD mit S3 unter Verwendung von Python [Python]
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Betreiben Sie LibreOffice mit Python
Japanische morphologische Analyse mit Janome
Python: Japanischer Text: Morphologische Analyse
Überlappende Kombinationen mit Obergrenzen in Python / Ruby / PHP / Golang (Go)
Verwenden von Quaternion mit Python ~ numpy-quaternion ~
Debuggen mit pdb in Python
[Python] Verwenden von OpenCV mit Python (Basic)
Emotionsanalyse von Python (word2vec)
Umgang mit Sounds in Python
Axialsymmetrische Spannungsanalyse mit Python
Zundokokiyoshi mit Python / Rubin / Lua
Scraping mit Tor in Python
Tweet mit Bild in Python
Planare Skelettanalyse mit Python
Kombiniert mit Ordnungszahl in Python
Einfache Regressionsanalyse mit Python
Vorsichtsmaßnahmen bei der Verwendung von Python mit AtCoder
Dinge, die Sie bei der Verwendung von CGI mit Python beachten sollten.
Muskel-Ruck-Analyse mit Python
Übersetzt mit Googletrans in Python
Verwenden des Python-Modus in der Verarbeitung
[PowerShell] Morphologische Analyse mit SudachiPy
Verwenden von OpenCV mit Python @Mac
Senden Sie mit Python mit Google Mail
Aktivieren Sie die morphologische Analyse-Engine MeCab in Python 3 (Version März 2016).
Objektextraktion im Bild durch Mustervergleich mit OpenCV mit Python
Implementieren Sie die Ranking-Verarbeitung mit Bindungen in Python mithilfe von Redis Sorted Set
Vervollständigung von Python mit Emacs mit Company-Jedi
Zahlenerkennung in Bildern mit Python
Harmonischer Mittelwert von Python (mit SciPy)
GUI-Programmierung in Python mit Appjar
Testen mit Zufallszahlen in Python
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Erste einfache Regressionsanalyse in Python
Scraping mit Node, Ruby und Python
Dreidimensionale Skelettstrukturanalyse mit Python
GOTO in Python mit erhabenem Text 3
Verwenden von Rstan aus Python mit PypeR
Arbeiten mit LibreOffice in Python: Importieren