[PYTHON] Sie werden in 100 Tagen Ingenieur. ――Tag 67 ――Programmieren ――Über morphologische Analyse

Klicken Sie hier bis gestern

Sie werden in 100 Tagen Ingenieur - Tag 66 - Programmierung - Über die Verarbeitung natürlicher Sprache

Sie werden in 100 Tagen Ingenieur - Tag 63 - Programmierung - Über Wahrscheinlichkeit 1

Sie werden in 100 Tagen Ingenieur - Tag 59 - Programmierung - Über Algorithmen

Sie werden in 100 Tagen Ingenieur --- Tag 53 - Git - Über Git

Sie werden in 100 Tagen Ingenieur - Tag 42 - Cloud - Über Cloud-Dienste

Sie werden in 100 Tagen Ingenieur - Tag 36 - Datenbank - Über die Datenbank

Sie werden Ingenieur in 100-Tage-24-Python-Grundlagen der Python-Sprache 1

Sie werden in 100 Tagen Ingenieur - Tag 18 - JavaScript - Grundlagen von JavaScript 1

Sie werden in 100 Tagen Ingenieur - 14. Tag - CSS - CSS-Grundlagen 1

Sie werden in 100 Tagen Ingenieur - Tag 6 - HTML - HTML-Grundlagen 1

Ab diesem Zeitpunkt geht es um die Verarbeitung natürlicher Sprache.

Was ist morphologische Analyse?

"Formularelementanalyse" trennt Sätze in die kleinste Worteinheit, die als "Formularelemente" bezeichnet wird. Es ist eine Methode, um den Teil jeder Morphologie zu unterscheiden.

** Trennung **

Es ist eine Schreibweise mit einem Leerzeichen zwischen Wörtern wie auf Englisch. Watashi Ga Hentai Tod Ich hatte Lewd Tod

** Englische morphologische Analyse **

In Sprachen wie Englisch ist es sehr einfach, wenn Wörter durch Leerzeichen getrennt sind. Das Verfahren zur morphologischen Analyse in englischer Sprache ist nachstehend zusammengefasst.

1.Machen Sie den ganzen Satz niedriger und verhindern Sie, dass Wörter durch die Position des Wortes unterschieden werden

2.it's und don'Geteilte Abkürzungen wie t (it's → it 's 、 don't → do n't)

3.Trennen Sie den Punkt am Ende des Satzes vom vorherigen Wort (Mr..Trennen Sie keine Punkte, die nicht mit dem Ende der Sätze zusammenhängen, für die verwendet wird

4.Durch Raum teilen

** Japanische morphologische Analyse **

Im Gegensatz zu Englisch hat Japanisch nur wenige Leerzeichen und Sie können die Unterbrechungen in Wörtern nicht sehen. Daher ist es notwendig, die Unterteilung nach Regeln auf Wörterbuchbasis unter Verwendung eines dedizierten "Wörterbuchs" in Betracht zu ziehen.

Wenn Sie die morphologische Analyse selbst durchführen möchten, müssen Sie diese Teilungsregel selbst festlegen und implementieren.

Für die japanische morphologische Analyse wurden mehrere "Bibliotheken" entwickelt. Es ist üblich, dies für die morphologische Analyse zu verwenden.

Eine typische Bibliothek heißt "MeCab".

https://ja.wikipedia.org/wiki/MeCab

Es gibt auch eine Bibliothek namens "janome" in der Python-Sprache.

https://mocobeta.github.io/janome/

Bei Implementierung unter Verwendung einer solchen Bibliothek kann eine morphologische Analyse relativ einfach durchgeführt werden.

Heute werden wir eine morphologische Analyse mit der "janome" -Bibliothek durchführen.

Was ist ein morphologisches Element?

Englisch: Morphem In sprachlicher Hinsicht die kleinste Einheit des sinnvollen Ausdruckselements Es ist eine Phrase, die bedeutungslos wird, wenn sie weiter zerlegt wird.

Beispiel: "Wie viel soll ich teilen?"

Was Sie tun, ist ein "Verb", aber wenn Sie es weiter teilen Es macht keinen Sinn. Do ⇒ Verb 〇

Linie ⇒ Nase × U ⇒ Beeindruckendes Verb ×

Daher ist es notwendig, die Demontage an einer geeigneten Stelle anzuhalten.

Japanische Teiltexte

Die japanischen Teiltexte sind wie folgt.

image.png

Probleme in der japanischen morphologischen Analyse

Bei der Analyse der japanischen Morphologie treten die folgenden Probleme auf.

・ Problem der Wortgrenzendiskriminierung ・ Problem der Teilwortunterscheidung ・ Problem unbekannter Sprache ・ Lose Grammatikprobleme ・ Das Problem, dass sich die Bedeutung abhängig vom Vorhandensein oder Fehlen von Modifikatoren ändert

** Wortabgrenzungsproblem **

Zum Beispiel gibt es verschiedene grammatikalisch korrekte Lesarten für den Satz "Uraniwa hat ein Eichhörnchen".

・ Es gibt / Huhn / im Hinterhof / ・ Es gibt / zwei / Federn / Vögel / im Hinterhof / ・ Zurück / an / Krokodil / ist / Huhn / ist / ・ Im Hinterhof / in / gibt es /

Selbst bei "Oberschenkeln" ist das Problem, wo man sich teilt. Um die perfekte Antwort zu erhalten, müssen Sie den Kontext verstehen, in den der Satz gestellt wird, und den Hintergrund der Absicht des Schriftstellers.

** Problem der Teilwortunterscheidung **

Zum Beispiel hat das Wort "Zeit" eine andere Bedeutung als die Bedeutung von "Zeit" als Substantiv. Es hat auch eine Bedeutung als Verb "--double", also hängt es davon ab, welche Bedeutung Sie annehmen. Die grammatikalische Struktur des Satzes und die abzuleitende Bedeutung sind völlig unterschiedlich.

Die Art des Teils des Wortes hängt eng mit der Struktur des Satzes zusammen, daher muss er zusammen betrachtet werden.

** Problem unbekannter Sprache ** Weil die morphologische Analyse normalerweise mit einem Wörterbuch durchgeführt wird, das Wörter in dieser Sprache enthält Wörter, die im zu analysierenden Satz nicht im Wörterbuch enthalten sind, werden als unbekannte Wörter bezeichnet.

Je nachdem, wie Sie mit unbekannten Wörtern umgehen, wirken sich die Ergebnisse der nachfolgenden Analyse stark auf Sie aus. Daher sollte das Wörterbuch regelmäßig aktualisiert werden. .. (Besonders richtige Nomenklatur: Name der Person, Name der Einrichtung, Produktname, Knebel usw.)

** Lose Grammatikprobleme ** Der Inhalt von Konversationen wie SNS, E-Mails und Talk-Apps ist häufig weit von einer bestimmten modellierten japanischen Grammatik entfernt. Um solche Inhalte zu analysieren, müssen die Notationsschwankungen von Sätzen und Wörtern sowie die Kalibrierungsmethode grundlegend berücksichtigt werden.

Das Problem, dass sich die Bedeutung abhängig vom Vorhandensein oder Fehlen von Modifikatoren ändert Modifikatoren ändern die Bedeutung von Verben und Adjektiven, wenn jedoch eine morphologische Analyse durchgeführt wird Es ist durch Worte geteilt. Wenn Sie es nicht als Kombination mehrerer Wörter interpretieren, ist die Bedeutung völlig anders.

Morphologische Analyse mit Janome

Lassen Sie uns eine morphologische Analyse mit der Python-Bibliothek "janome" durchführen.

Wenn Sie es nicht installiert haben, können Sie es nicht verwenden. Bitte installieren Sie mit dem folgenden Befehl.

pip install janome

Dies ist ein Beispiel für eine einfache morphologische Analyse.


from janome.tokenizer import Tokenizer
t = Tokenizer()

tokens = t.tokenize('Nicht süß, nicht scharf, nicht lecker')
for token in tokens:
    print(token)

Süß bis Adjektiv, Unabhängigkeit, *, *, Adjektiv / Auo-Stadium, Nu-Verbindung, süß, Amakara, Amakara Zu Hilfsverb, *, *, *, special / nu, fortlaufend zwei Verbindungen verwenden, nu, zu, zu Würzig bis Adjektiv, Unabhängigkeit, *, *, Adjektiv / auo dan, nu Verbindung, würzig, Karakara Zu Hilfsverb, *, *, *, special / nu, fortlaufend zwei Verbindungen verwenden, nu, zu, zu Von der Bedeutung, Adjektiv, Unabhängigkeit, *, *, Adjektiv / Auodan, nu Verbindung, lecker, Pferdefarbe, Pferdefarbe Zu Hilfsverb, *, *, *, special / nu, fortlaufend zwei Verbindungen verwenden, nu, zu, zu

Rufen Sie "Tokenizer" von "janome" auf und instanziieren Sie es.

from janome.tokenizer import Tokenizer
Variablennamen= Tokenizer()

Sie können das Ergebnis der morphologischen Analyse eines Satzes mit "Variablenname.tokenize (" Satz ")" zurückgeben.

Das Ergebnis der morphologischen Analyse ist ·Wort ・ Teil der Wörter ·lesen Es ist unterteilt in.

Das durch Wörter geteilte Ergebnis wird zurückgegeben, wenn Sie also jedes einzelne verarbeiten möchten Wiederholen Sie den Vorgang mit der for-Anweisung.

Ich werde den Satz ändern.

words = 'Von den Oberschenkeln und Oberschenkeln'
tokens = t.tokenize(words)
for token in tokens:
    print(token)

Sumomo-Nomenklatur, allgemein, *, *, *, *, Sumomo, Sumomo, Sumomo Mo Assistent, Angestellter, *, *, *, *, mo, mo, mo Oberschenkel-Nomenklatur, allgemein, *, *, *, *, Oberschenkel, Pfirsich, Pfirsich Mo Assistent, Angestellter, *, *, *, *, mo, mo, mo Oberschenkel-Nomenklatur, allgemein, *, *, *, *, Oberschenkel, Pfirsich, Pfirsich Hilfswörter, Vereinigung, *, *, *, *, Von welcher Nomenklatur, Nichtunabhängigkeit, befürworten möglich, *, *, *, davon Uchi, Uchi

Was passiert, wenn der folgende Satz morphologisch analysiert wird?

Nippon TV Tokyo

tokens = t.tokenize('Nippon Fernsehen Tokio')
for token in tokens:
    print(token)

Nippon TV Nomenklatur, richtige Nomenklatur, Organisation, *, *, *, Nippon TV, Nihon TV, Nihon TV Tokio Nomenklatur, Eigennomenklatur, Region, allgemein, *, *, Tokio, Tokio, Tokio

Dies ist das Ergebnis, das aus den in den Wörterbuchdaten für die morphologische Analyse gespeicherten "Kosten" berechnet wird. Wortumbrüche, die bekannter oder einfacher zu verbinden sind und geringere "Kosten" haben Aufgrund des Mechanismus der Wahl ist das Ergebnis wie folgt.

Weil es viele Fälle gibt, in denen das Wörterbuch die kürzlich erstellte "proprietäre Nomenklatur" usw. nicht unterstützt. Dies kann zu unerwünschten Ergebnissen führen.

tokens = t.tokenize(u'Ich habe heute an der Sky Tree Station einen Fisch gesehen')
for token in tokens:
    print(token)

Tou Adverbien, Hilfsverbindungen, *, *, *, *, Tou, Tou, Tou Heute Nomenklatur, Zusatz möglich, *, *, *, *, heute Kyo, Kyo Himmelsnomenklatur, allgemein, *, *, *, *, Himmel, Himmel, Himmel Baumnomenklatur, allgemein, *, *, *, *, Baum, Baum, Baum Stationsnomenklatur, Suffix, Region, *, *, *, Station, Aufregung, Aufregung In, Assistent, Fall, General, *, *, *, in, de, de Fischnomenklatur, allgemein, *, *, *, *, Fisch, Fisch, Fisch Auxiliary, Case Auxiliary, General, *, *, *, wo, wo Siehe Verb, Unabhängigkeit, *, *, ein Schritt, kontinuierliche Form, siehe, mi, mi Der Assistent, Verbindungsassistent, *, *, *, *, te, te, te Ki Verb, Nichtunabhängigkeit, *, *, kahen / kuru, kontinuierliche Form, kuru, ki, ki Masu Hilfsverb, *, *, *, Spezial / Masse, Endlosform, Masu, Maschi, Maschi Ta Hilfsverb, *, *, *, spezielles ta, Grundform, ta, ta, ta

Ursprünglich wollte ich "Tokyo Sky Tree Station" sagen, aber da es kein solches Wort im Wörterbuch gibt, wird es in entsprechende Wörter unterteilt.

Verwenden Sie in diesem Fall das "Benutzerwörterbuch". Erstellen Sie eine Wörterbuchdatei und lesen Sie sie.

Variablenname = Tokenizer ('Name der Wörterbuchdatei', udic_enc = 'Zeichencode')

userdic.csv


Tokyo Sky Tree,1288,1288,4569,Substantiv,固有Substantiv,Allgemeines,*,*,*,Tokyo Sky Tree,Tokyo Sky Tree,Tokyo Sky Tree
Tokyo Sky Tree Station,1288,1288,4143,Substantiv,固有Substantiv,Allgemeines,*,*,*,Tokyo Sky Tree Station,Tokyo Sky Tree Station,Tokyo Sky Tree Station
Tobu Sky Tree Line,1288,1288,4700,Substantiv,固有Substantiv,Allgemeines,*,*,*,Tobu Sky Tree Line,Tobu Sky Tree Line,Tobu Sky Tree Line
Tokyo Sky Tree Station,1288,1288,4143,Substantiv,固有Substantiv,Allgemeines,*,*,*,Tokyo Sky Tree Station,Tokyo Sky Tree Station,Tokyo Sky Tree Station
t = Tokenizer("userdic.csv", udic_enc="utf8")
tokens = t.tokenize(u'Ich habe heute an der Sky Tree Station einen Fisch gesehen')
for token in tokens:
    print(token)

Tokyo Sky Tree Station Nomenklatur, Proprietäre Nomenklatur, Allgemein, *, *, *, Tokyo Sky Tree Station, Tokyo Sky Tree Eki, Tokyo Sky Tree Eki In, Assistent, Fall, General, *, *, *, in, de, de Fischnomenklatur, allgemein, *, *, *, *, Fisch, Fisch, Fisch Auxiliary, Case Auxiliary, General, *, *, *, wo, wo Siehe Verb, Unabhängigkeit, *, *, ein Schritt, kontinuierliche Form, siehe, mi, mi Der Assistent, Verbindungsassistent, *, *, *, *, te, te, te Ki Verb, Nichtunabhängigkeit, *, *, kahen / kuru, kontinuierliche Form, kuru, ki, ki Masu Hilfsverb, *, *, *, Spezial / Masse, Endlosform, Masu, Maschi, Maschi Ta Hilfsverb, *, *, *, spezielles ta, Grundform, ta, ta, ta

Die in userdic.csv registrierte richtige Nomenklatur wird nun wiedergegeben. Unbekanntes Wort erstellt ein Wörterbuch und behandelt es.

Sie können den Wortteil mit token.surface erhalten.

for token in tokens:
    print(token.surface)

Tokyo Sky Tree Station damit Fisch Zu Sie sehen Hand Ki Besser Ta

Nur das Teilteil kann mit "token.part_of_speech" extrahiert werden. Weil der Teil Teil durch Trennzeichen unterteilt ist Wenn Sie die unterteilte erhalten, teilen Sie sie durch "," und nehmen Sie sie heraus.

for token in tokens:
    print(token.part_of_speech)

Nomenklatur, richtige Nomenklatur, allgemein, * Hilfs-, Falladjektiv, allgemein, * Nomenklatur, Nomenklatur, allgemein, * Hilfs-, Falladjektiv, allgemein, * Verb, Unabhängigkeit, *, * Hilfs-, Verbindungshilfsmittel, *, * Verb, nicht unabhängig, *, * Hilfsverb, *, *, * Hilfsverb, *, *, *

Sie können den Messwert mit "token.reading" überprüfen.

for token in tokens:
    print(token.reading)

Tokyo Sky Tree Station De Fisch Wo Mi. Te Ki Mashi Ta

Verwenden Sie die Teilwörter und Lesungen im for-Satz richtig und führen Sie die nachfolgende Verarbeitung durch.

Zusammenfassung

Die morphologische Analyse ist eine der Grundlagen der Sprachanalyse. Es gibt viele Bibliotheken, daher ist es eine gute Idee, zu experimentieren.

Die einzige Möglichkeit, mit neuen Wörtern umzugehen, besteht darin, ein Wörterbuch zu erstellen Wenn Sie die morphologische Analyse korrekt durchführen möchten, müssen Sie unbedingt ein Wörterbuch für unbekannte Wörter erstellen.

33 Tage, bis Sie Ingenieur werden

Informationen zum Autor

HP von Otsu py: http://www.otupy.net/

Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter: https://twitter.com/otupython

Recommended Posts

Sie werden in 100 Tagen Ingenieur. ――Tag 67 ――Programmieren ――Über morphologische Analyse
Sie werden in 100 Tagen Ingenieur. ――Tag 66 ――Programmieren ――Über die Verarbeitung natürlicher Sprache
In 100 Tagen sind Sie Ingenieur. ――Tag 71 ――Programmieren ――Über das Schaben 2
In 100 Tagen sind Sie Ingenieur. ――Tag 61 ――Programmieren ――Über Erkundung
In 100 Tagen sind Sie Ingenieur. ――Tag 74 ――Programmieren ――Über das Schaben 5
In 100 Tagen sind Sie Ingenieur. ――Tag 73 ――Programmieren ――Über das Schaben 4
In 100 Tagen sind Sie Ingenieur. ――Tag 75 ――Programmieren ――Über das Schaben 6
In 100 Tagen sind Sie Ingenieur. ――Tag 68 ――Programmieren ――Über TF-IDF
In 100 Tagen sind Sie Ingenieur. ――Tag 70 ――Programmieren ――Über das Schaben
In 100 Tagen sind Sie Ingenieur. ――Tag 82 ――Programmieren ――Über maschinelles Lernen 7
In 100 Tagen sind Sie Ingenieur. ――Tag 76 ――Programmieren ――Über maschinelles Lernen
In 100 Tagen sind Sie Ingenieur. ――Tag 80 ――Programmieren ――Über maschinelles Lernen 5
In 100 Tagen sind Sie Ingenieur. ――Tag 78 ――Programmieren ――Über maschinelles Lernen 3
Sie werden in 100 Tagen Ingenieur. ――Tag 84 ――Programmieren ――Über maschinelles Lernen 9
In 100 Tagen sind Sie Ingenieur. ――Tag 83 ――Programmieren ――Über maschinelles Lernen 8
In 100 Tagen sind Sie Ingenieur. ――Tag 77 ――Programmieren ――Über maschinelles Lernen 2
In 100 Tagen sind Sie Ingenieur. ――Tag 85 ――Programmieren ――Über maschinelles Lernen 10
Sie werden in 100 Tagen Ingenieur - Tag 63 - Programmierung - Wahrscheinlichkeit 1
Sie werden in 100 Tagen Ingenieur. ――Tag 64 ――Programmieren ――Über Wahrscheinlichkeit 2
In 100 Tagen sind Sie Ingenieur. ――Tag 60 ――Programmieren ――Über Datenstruktur und Sortieralgorithmus
Sie werden in 100 Tagen Ingenieur - 27. Tag - Python - Python-Übung 1
Sie werden in 100 Tagen Ingenieur - Tag 34 - Python - Python-Übung 3
Sie werden in 100 Tagen Ingenieur - 31. Tag - Python - Python-Übung 2
Sie werden in 100 Tagen Ingenieur. ――Tag 24 ―― Python ―― Grundlagen der Python-Sprache 1
Sie werden in 100 Tagen Ingenieur. ――Tag 30 ―― Python ―― Grundlagen der Python-Sprache 6
Sie werden in 100 Tagen Ingenieur. ――Tag 25 ―― Python ―― Grundlagen der Python-Sprache 2
Sie werden in 100 Tagen Ingenieur - 29. Tag - Python - Grundlagen der Python-Sprache 5
Sie werden in 100 Tagen Ingenieur - Tag 33 - Python - Grundlagen der Python-Sprache 8
Sie werden in 100 Tagen Ingenieur - 26. Tag - Python - Grundlagen der Python-Sprache 3
Sie werden in 100 Tagen Ingenieur - Tag 35 - Python - Was Sie mit Python tun können
Sie werden in 100 Tagen Ingenieur - Tag 32 - Python - Grundlagen der Python-Sprache 7
Sie werden in 100 Tagen Ingenieur - 28. Tag - Python - Grundlagen der Python-Sprache 4
Werden Sie bald KI-Ingenieur! Lernen Sie in wenigen Tagen umfassend Python / KI / Maschinelles Lernen / Deep Learning / Statistische Analyse!
Kann ich in einem Online-Kurs an der AI Academy KI-Ingenieur werden?
Was Anfänger über das Programmieren im Jahr 2016 denken