Da ich das Programm mecab jetzt schon des öfteren hier im Forum erwähnt habe und es weder eine deutsche noch eine englische Dokumentation gibt, nutze ich diesen Thread mal, um eine kleine Anleitung zu schreiben. Natürlich kann dieser Thread auch dazu genutzt werden um generell über mecab und andere morphologische Analysetools zu diskutieren.
TL;DR
Hier klicken, japanischen Text eingeben und auf "Submit" klicken
Was ist mecab?
Mecab ist ein morphologisches Analysetool für die japanische Sprache. Es nimmt einen japanischen Text als Eingabe, analysiert diesen und gibt dann eine Liste mit den einzelnen Wörtern, deren Wortklassen, Lesungen, Grundformen etc. aus. Technisch gesehen arbeitet es mit einem besonderen statistischen Modell, was es schneller und besser als seine Konkurrenz (wie zum Beispiel das Programm ChaSen) macht.
Installation
Mecab braucht man gar nicht zu installieren. Man kann es
hier über ein
Web-Interface benutzen.
Möchte man das Programm dennoch lokal auf dem eigenen Rechner haben, kann man es sich natürlich auch herunterladen.
Windows: Hier reicht es, wenn man einfach die
Binary installiert.
Linux: Am besten im Repository der verwendeten Distribution nachschauen oder zur Not von Hand kompilieren:
Den Source-Code gibt's
auf GitHub).
Es müssen sowohl mecab selbst, als auch das ipadic-Wörterbuch kompilliert werden:
mecab:
Code:
cd mecab-master/mecab
./configure --with-charset=utf8
make
make check
sudo make install
ipadic
Code:
cd mecab-master/ipadic
./configure --with-charset=utf-8
make
sudo make install
Mac:
Mecab kann unter OS X genau so wie unter Linux installiert werden, sofern ein C-Compiler (→Xcode) vorhanden ist.
Eine andere Möglichkeit ist die Installation via
homebrew:
Code:
$ brew install mecab
$ brew install mecab-ipadic
Bei gewissen Versionen von OS X (10.5, 10.6, 10.10 mit Xcode, ...) ist bereits eine mecab-Bibliothek unter /usr/lib/mecab vorinstalliert (aber leider keine Binary). Wenn die Bibliothek bereits vorhanden ist, kann es zu Problemen bei der Verwendung von mecab.h in C(++)-Programmen kommen.
Bindings:
Es gibt ein
Python-3-Modul namens "mecab-python3", das sich am bequemsten mit pip installieren lässt.
Außerdem gibt es Bindings für
Perl,
Ruby und
Java (Details siehe
hier (japanisch) und in den entsprechenden readme-Dateien der
GitHub-Version).
Grundlagen
Web-Interface:
Zunächst erstmal muss man warten, bis die Download-Meldung erlischt. Danach kann man den zu analysierenden Text in das große schwarze Textfeld eingeben und auf "Submit" klicken. Auf die "Configuration Flags" komme ich später nochmal zu sprechen.
Linux:
Die Bedienung erfolgt ausschließlich über die Shell. Man kann entweder dem Programm eine Datei als Argument übergeben, die analysiert wird, oder mit echo einen String durch die Standardeingabe schleusen:
Code:
# Datei als Argument
mecab datei_zum_analysieren.txt
# String über stdin
echo "文字列" | mecab
Windows: Da ich momentan keinen Windows-Rechner zur Verfügung habe, kann ich nichts genaueres zur Benutzung unter Windows schreiben.
Output von mecab
Das Standard-Ausgabeformat von mecab sieht wie folgt aus:
Wort [Tab] Liste mit Eigenschaften (durch Kommatas getrennt)
Die Eigenschaften sind wie folgt:
Wortart,
genauere Wortart 1,
genauere Wortart 2,
genauere Wortart 3,
Flexionsgruppe,
Art der Flexion,
Grundform,
Lesung,
Aussprache
Ein paar Beispiele:
Code:
習う 動詞,自立,*,*,五段・ワ行促音便,基本形,習う,ナラウ,ナラウ
Hier wird als Wortart 動詞 (どうし), also "Verb" angegeben. Als "genauere Wortart 1" wird angezeigt, dass es sich um ein "eigenständiges Wort" handelt, "genauere Wortart" 2 und 3 sind leer, die Flexionsgruppe ist die der "fünfstufigen Verben", die Art der Flexion ist die Grundform und Lesung und Aussprache sind beide ナラウ.
Wozu braucht man dann überhaupt die beiden Felder "Lesung" und "Aussprache"?
Vieles wird im Japanischen so ausgesprochen wie es geschrieben wird. Es gibt allerdings ein paar Ausnahmen. Nehmen wir mal 高校 (こうこう). Würden wir die Lesung so sprechen, wie sie da steht, wäre das kein reines o, sondern ein o, das zu einem u wird. Hier unterscheidet sich also die Lesung von der eigentlichen Aussprache, weshalb wir für 高校 folgende Ausgabe bekommen:
Code:
高校 名詞,一般,*,*,*,*,高校,コウコウ,コーコー
Man beachte die letzten beiden Felder.
Das "EOS" im Output signalisiert das Ende einer Analyse, wobei zu beachten ist, dass mecab zeilenweise analysiert.
Lesungen mit mecab geneieren
Ist man nur an den Lesungen eines Satzes oder Textes interessiert, kann man mecab anweisen, die Eingabe einfach in Katakana zu konvertieren.
Im Web-Interface geht das, in dem man in das Feld "Configuration Flags" den Text "-Oyomi" einträgt.
Unter Linux geht das mit der Option "-Oyomi"
Die Ausgabe für "形態素解析" sieht dann zum Beispiel so aus:
Tokenizing (Zerlegen in Wörter) mit mecab
Wenn man nur an den einzelnen Wörtern (nicht aber an den ganzen Details) interessiert ist, weil man zum Beispiel Worthäufigkeiten berechnen will, kann man mit -Owakati (funktioniert analog zu -Oyomi im Abschnitt über diesem) sich die Eingabe mit Leerzeichen ausgeben lassen:
"今日は天気がいいですね。" wird zu
Code:
今日 は 天気 が いい です ね 。
Mehr Vorschläge anzeigen lassen
mecab ist natürlich nicht perfekt. Manchmal liegt es bei der Analyse eines Satzes daneben. Allerdings gibt es auch die Möglichkeit, sich nicht nur eine Analyse, sondern die N besten bzw. wahrscheinlichsten Analysen anzeigen zu lassen:
Das funktioniert mit -NX (analog zu den Optionen weiter oben), wobei X die Anzahl der darzustellenden Analysen ist.
Eine Analyse von "いってください" mit "-N2" ergibt zum Beispiel
Code:
いっ 動詞,自立,*,*,五段・ワ行促音便,連用タ接続,いう,イッ,イッ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
ください 動詞,非自立,*,*,五段・ラ行特殊,命令i,くださる,クダサイ,クダサイ
EOS
いっ 動詞,自立,*,*,五段・カ行促音便,連用タ接続,いく,イッ,イッ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
ください 動詞,非自立,*,*,五段・ラ行特殊,命令i,くださる,クダサイ,クダサイ
EOS
Hier kann man sehen, dass zuerst "いって" als いう und bei zweiten Mal als いく analysiert wurde.
Weiterführende Links
Die japanische Dokumentation von mecab
Wikipedia-Artikel zur japanischen Grammatik (u.a. gibt es dort eine Übersicht zu den Wortarten und den Flexionsarten der Verben)
Das Paper, aus dem mecab enstanden ist
Edit: Abschnitt "Installation" mit neuen Erkenntnissen der letzten Tage angepasst.