[PYTHON] 100-Sprach-Verarbeitung Knock-81 (Batch-Ersatz): Umgang mit Ländernamen, die aus zusammengesetzten Wörtern bestehen

Dies ist die Aufzeichnung der 81. "Gegenmaßnahmen bestehend aus zusammengesetzten Wörtern" in Language Processing 100 Knock 2015. Auch dieses Mal wird nach der vorherigen Corpus-Formgebung das Vorverarbeitungssystem verwendet, und die Hauptverarbeitung ist das Ersetzen von Zeichen mithilfe regulärer Ausdrücke. Ich mache jedoch die mühsame Arbeit manuell in dem Teil der Erstellung der Ländernamenliste. Aus diesem Grund ist die Programmierung selbst nicht schwierig, aber es hat einige Zeit gedauert.

Referenzlink

Verknüpfung Bemerkungen
081.Umgang mit Ländernamen, die aus zusammengesetzten Wörtern bestehen.ipynb Antwortprogramm GitHub Link
100 Klicks Amateur-Sprachverarbeitung:81 Ich bin Ihnen immer zu Dank verpflichtet, wenn ich auf 100 Sprachverarbeitung klopfe
100 Sprachverarbeitung klopfen 2015 Version(80~82) Kapitel 9 war hilfreich

Umgebung

Art Ausführung Inhalt
OS Ubuntu18.04.01 LTS Es läuft virtuell
pyenv 1.2.15 Ich benutze pyenv, weil ich manchmal mehrere Python-Umgebungen benutze
Python 3.6.9 python3 auf pyenv.6.Ich benutze 9
3.7 oder 3.Es gibt keinen tiefen Grund, keine 8er-Serie zu verwenden
Pakete werden mit venv verwaltet

Aufgabe

Kapitel 9: Vektorraummethode (I)

enwiki-20150112-400-r10-105752.txt.bz2 Ist der Text von 105.752 Artikeln zufällig 1/10 aus den Artikeln ausgewählt, die zum 12. Januar 2015 aus etwa 400 Wörtern oder mehr der englischen Wikipedia-Artikel bestehen und im bzip2-Format komprimiert sind. Gibt es. Mit diesem Text als Korpus möchte ich einen Vektor (verteilten Ausdruck) lernen, der die Bedeutung eines Wortes ausdrückt. In der ersten Hälfte von Kapitel 9 wird der Prozess des Lernens des Wortvektors implementiert, indem er in mehrere Prozesse unterteilt wird, indem die Hauptkomponentenanalyse auf die aus dem Korpus erstellte Matrix für das gleichzeitige Auftreten von Wortkontexten angewendet wird. In der zweiten Hälfte von Kapitel 9 wird der durch Lernen erhaltene Wortvektor (300 Dimensionen) verwendet, um die Ähnlichkeit von Wörtern zu berechnen und zu analysieren (analog).

Beachten Sie, dass bei gehorsamer Implementierung von Problem 83 eine große Menge (ca. 7 GB) Hauptspeicher erforderlich ist. Wenn Ihnen der Speicher ausgeht, erstellen Sie einen Prozess oder ein 1/100 Stichproben-Korpus enwiki-20150112-400-r100-10576.txt.bz2. Verwenden Sie /nlp100/data/enwiki-20150112-400-r100-10576.txt.bz2).

Diesmal * 1/100 Stichprobenkorpus enwiki-20150112-400-r100-10576.txt.bz2 400-r100-10576.txt.bz2) ”* wird verwendet.

81. Umgang mit Ländernamen, die aus zusammengesetzten Wörtern bestehen

Im Englischen kann die Verkettung mehrerer Wörter sinnvoll sein. Zum Beispiel werden die Vereinigten Staaten als "Vereinigte Staaten" und das Vereinigte Königreich als "Vereinigtes Königreich" ausgedrückt, aber die Wörter "Vereinigte Staaten", "Staaten" und "Königreich" allein sind nicht eindeutig. Daher möchten wir die Bedeutung des zusammengesetzten Wortes schätzen, indem wir das im Korpus enthaltene zusammengesetzte Wort erkennen und das zusammengesetzte Wort als ein Wort behandeln. Es ist jedoch sehr schwierig, zusammengesetzte Wörter genau zu identifizieren. Daher möchten wir hier einen Ländernamen identifizieren, der aus zusammengesetzten Wörtern besteht.

Holen Sie sich Ihre eigene Liste von Ländernamen im Internet und ersetzen Sie die Leerzeichen durch Unterstriche für die Ländernamen der zusammengesetzten Wörter, die in den 80 Korpora erscheinen. Beispielsweise sollte "USA" "United_States" und "Isle of Man" "Isle_of_Man" sein.

Es ist mühsam, "die Ländernamenliste selbst aus dem Internet zu beziehen" ...

Antworten

Erstellung der Ländernamenliste

1. Holen Sie sich eine Liste der Ländernamen

Ich dachte, dass die Seite "Ländercodes / Namen" gut wäre, aber die "Isle of" in der Problemstellung Es gibt keinen Mann ". "Isle of Man" scheint in ISO 3166-1 zu sein, also [Wikipedia ISO 3166-1] Ich habe die Liste von (https://en.wikipedia.org/wiki/ISO_3166-1) erhalten. Mit anderen Worten, wir erstellen eine Ländernamenliste aus den folgenden drei.

  1. [" Ländercodes / Namen "](http://www.fao.org/countryprofiles/iso3list/en/) Kurzname Spalte
  2. "Ländercodes / Namen"](http://www.fao.org/countryprofiles/iso3list/en/) Offizielle Namensspalte
  3. [「Wikipedia ISO 3166-1」] (https://en.wikipedia.org/wiki/ISO_3166-1) Spalte "Englischer Kurzname"

2. Entfernen des Anfangs der

Einige Namen, die aus der Spalte "Offizieller Name" von "Ländercodes / Namen" stammen, werden mit dem Präfix "the" versehen. Ich habe es später entfernt, weil es ein Hindernis war.

3. Doppelte Löschung

Da ich es von drei bekommen habe, sind einige Ländernamen dupliziert, also habe ich die Duplikate gelöscht.

4. Löschen Sie einen einzelnen Namen

Das Thema lautet diesmal "Ländername bestehend aus zusammengesetzten Wörtern", und ein Ländername mit einem einzigen Wort ist nicht erforderlich. Ich habe = COUNTIF (A1," * * ") auf EXCEL ausgeführt und den Ländernamen mit einem Leerzeichen dazwischen als zusammengesetztes Wort beurteilt und den Ländernamen entfernt, dessen EXCEL-Funktionsergebnis 0 war.

5. Manuelle Feineinstellung

Einige von ihnen können nicht so verwendet werden, wie sie sind, daher habe ich Feineinstellungen manuell vorgenommen. Es braucht Zeit ... Das Folgende ist ein Beispiel.

Ehemalige Nach der veränderung
Bolivia (Plurinational State of) Plurinational State of Bolivia
Cocos (Keeling) Islands Cocos Keeling Islands
Cocos Keeling
Cocos Islands
Keeling Islands

Am Ende wurden 247 Ländernamen erstellt.

Antwortprogramm [081. Umgang mit Ländernamen, die aus zusammengesetzten Wörtern bestehen.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/09.%E3%83%99%E3%82%AF%E3% 83% 88% E3% 83% AB% E7% A9% BA% E9% 96% 93% E6% B3% 95% 20 (I) / 081.% E8% A4% 87% E5% 90% 88% E8% AA% 9E% E3% 81% 8B% E3% 82% 89% E3% 81% AA% E3% 82% 8B% E5% 9B% BD% E5% 90% 8D% E3% 81% B8% E3% 81% AE% E5% AF% BE% E5% 87% A6.ipynb)

Es ist ein Programm. Der Prozess ist kurz und trivial (ich verbringe ein paar Stunden damit, ihn zu machen, weil ich keine Fähigkeiten habe ...). Es dauert jedoch ungefähr 12 Minuten, um eine Volltextsuche durchzuführen und bis zu 247 Ländernamen zu ersetzen. Artikel "100 Klopfen Sprachverarbeitung 2015 Version (80-82)" Es ist schneller, wenn Sie den Befehl sed verwenden Oder nicht?

import re

#Entfernen Sie den Zeilenvorschubcode aus der Datei und stellen Sie die Wortnummer zum Sortieren voran
with open('./081.countries.txt') as countires:
    country_num = [[len(country.split()), country.rstrip('\n')] for country in countires]

country_num.sort(reverse=True)

with open('./080.corpus.txt') as file_in:
    body = file_in.read()

for i, country in enumerate(country_num):
    print(i, country[1])
    regex = re.compile(country[1], re.IGNORECASE)
    body = regex.sub(country[1].replace(' ', '_'), body)

with open('./081.corpus.txt', mode='w') as file_out:
    file_out.write(body)

Kommentar beantworten

Die Liste der Ländernamen wird gelesen, die Anzahl der Wörter wird zur Liste hinzugefügt und in absteigender Reihenfolge sortiert. Dies liegt daran, dass "Vereinigte Staaten von Amerika" durch "Vereinigte Staaten" ersetzt wird, die eine geringere Anzahl von Wörtern enthält, und nicht durch "Vereinigte Staaten von Amerika".

#Entfernen Sie den Zeilenvorschubcode aus der Datei und stellen Sie die Wortnummer zum Sortieren voran
with open('./081.countries.txt') as countires:
    country_num = [[len(country.split()), country.rstrip('\n')] for country in countires]

country_num.sort(reverse=True)

Durch Setzen von "re.INGNORECASE" im regulären Ausdruck wird es ersetzt, ohne zwischen Groß- und Kleinschreibung zu unterscheiden (ich habe nicht bestätigt, ob diese Schwankung nützlich ist).

regex = re.compile(country[1], re.IGNORECASE)

Recommended Posts

100-Sprach-Verarbeitung Knock-81 (Batch-Ersatz): Umgang mit Ländernamen, die aus zusammengesetzten Wörtern bestehen
Sprachverarbeitung 100 Klopfen-88: 10 Wörter mit hoher Ähnlichkeit
Lernen Sie mit "Google Colaboratory" ganz einfach 100 Sprachverarbeitungsklopfen 2020.
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitung Knock-59: Analyse der S-Formel
100 Sprachverarbeitung Knock-96 (unter Verwendung von Gensim): Extraktion des Vektors in Bezug auf den Ländernamen
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitung Knock-91: Vorbereitung von Analogiedaten
Sprachverarbeitung 100 Knocks-44: Visualisierung abhängiger Bäume
100 Sprachverarbeitung Knock-22: Extraktion des Kategorienamens
100 Sprachverarbeitung Knock-26: Entfernen von hervorgehobenem Markup
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 1)
100 Sprachverarbeitung Knock-90 (mit Gensim): Lernen mit word2vec
100 Sprachverarbeitung Knock-32 (mit Pandas): Prototyp des Verbs
Sprachverarbeitung 100 Schläge-45: Extraktion von Verbfallmustern
100 Sprachverarbeitung Knock-75 (mit Scicit-Learn): Gewicht der Identität
100 Sprachverarbeitung Knock-95 (mit Pandas): Bewertung mit WordSimilarity-353
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
Rehabilitation von Python- und NLP-Kenntnissen ab "Knock 100 Language Processing 2015" (Kapitel 2, zweite Hälfte)
Rehabilitation von Python- und NLP-Kenntnissen ab "100 Language Processing Knock 2015" (Kapitel 2, erste Hälfte)
Sprachverarbeitung 100 Knock-80 (ersetzt durch regulären Ausdruck): Korpusformatierung
100 Sprachverarbeitung Knock-36 (unter Verwendung von Pandas): Häufigkeit des Auftretens von Wörtern
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Sprachverarbeitung 100 Schläge-49: Extraktion von Abhängigkeitspfaden zwischen Nomenklatur
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
100 Sprachverarbeitung Knock-94 (mit Gensim): Ähnlichkeitsberechnung mit WordSimilarity-353
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
100 Sprachverarbeitung Knock-77 (mit Scicit-Learn): Messung der korrekten Antwortrate
100 Sprachverarbeitung Knock-42: Anzeige der Phrase der betroffenen Person und der betroffenen Person
Sprachverarbeitung 100 Knocks-29: Holen Sie sich die URL des Flaggenbildes