[PYTHON] Vorverarbeitung von Wikipedia-Dump-Dateien und gemeinsame Nutzung großer Datenmengen mit MeCab

Kürzlich habe ich eine Dump-Datei von Wikipedia gelesen und daran gearbeitet, daher möchte ich zusammenfassen, was ich zu diesem Zeitpunkt überprüft habe, und Punkte beachten, die beim Lesen zu beachten sind.

Zielgruppe des Artikels

Laden Sie die Wikipedia-Dump-Datei herunter

Laden Sie die Wikipedia-Dump-Datei von [diesem Link] herunter (https://dumps.wikimedia.org/jawiki/20200601/jawiki-20200601-pages-articles-multistream.xml.bz2) oder führen Sie das folgende Wget aus.

> wget https://dumps.wikimedia.org/jawiki/20200601/jawiki-20200601-pages-articles-multistream.xml.bz2

Bereitstellung mit Wiki Extractor

Mit pip installieren.

> pip install wikiextractor

Erweiterung ausführen. Speichern Sie dieses Mal das Ausgabeziel in einer Textdatei (wiki.txt). Sie können es in einem beliebigen Verzeichnis speichern, indem Sie den Pfad zu -o angeben.

> python -m wikiextractor.WikiExtractor jawiki-latest-pages-articles.xml.bz2 -o - --processes 4 > wiki.txt

Vorverarbeitung von wiki.txt

Wie Sie anhand des Inhalts sehen können, bleibt das Dokument-Tag erhalten. Entfernen Sie es daher für alle Fälle.

> head wiki.txt
------------------------------------------------------
<doc id="17230" url="https://ja.wikipedia.org/wiki?curid=17230" title="Yoshimoto Imagawa">
Yoshimoto Imagawa

Yoshimoto Imagawa war der Wächter und Herr der Warring States von Suruga und Toko. Herr Imagawa, der 11. Besitzer. Aufgrund seiner ehelichen Beziehung zu seinen Schwestern sind Shingen Takeda und Shiyasu Hojo Schwager. Der Herrscher des weiten Gebiets von Tokaido mit dem Spitznamen "Kaidos Nr. 1 Yutori".

Neben territorialem Management wie rationalen Militärreformen durch die Einrichtung eines Eltern-Kind-Systems demonstrierte er auch sein Expeditionstalent und verwandelte Mr. Imagawa in einen kriegführenden Lord. Das Gebiet wurde von Suruga und Toko auf Teile von Mikawa und Owari ausgedehnt. Obwohl er während der Zeit der Warring States die Blütezeit der Imagawa-Familie errichtete, wurde er von Nobunaga Oda und Yoshikatsu Mouri (Shinsuke) im Kampf zwischen den Wannen besiegt, als er in Owari einfiel.

Geboren 1519 als dritter Sohn von Mr. Imagawas Eltern. Meine Mutter ist die Tochter von Nobuyoshi Nakamikado, dem regulären Zimmer meines Vaters. Es gibt jedoch eine Theorie, dass Yoshimoto ursprünglich ein Kind des Nebenraums war und nach den Hanakura-Turbulenzen (später beschrieben) ein Kind mit Jukei-Nonne adoptierte. Als er geboren wurde, wurde er im Alter von vier Jahren zum buddhistischen Tor geschickt, weil er seinen Bruder, Herrn Teru und Hikogoro, hatte und Kotokei Shogun im Seko Zentokuji Tempel in Fuji-gun, Suruga, anvertraut wurde. Sein Schüler Kyuei Shogiku (später Ohara Yuksai) übernahm die Rolle wegen des Todes von Shogun im Jahr 1529. Danach betrat er mit Yukisai den Kenjinji-Tempel und wurde unter der Leitung von Ryutaka Tsunean Sengaku Shoho. Außerdem studierten er und Yuksai während Okyu Sokyu im Myoshinji-Tempel und vertieften sein Lernen.

Danach kehrte er auf Geheiß von Shiki von Kyoto nach Suruga zurück, aber unmittelbar danach, im 5. Jahr der Astronomie (1536), starb er plötzlich. Zu diesem Zeitpunkt hatte er kein Erbrecht, weil er einen älteren Bruder, Hikogoro, hatte, aber selbst Hikogoro starb am selben Tag wie Herr Teru, so dass das Erbrecht zustande kam. Der gleiche Schüler wie Herr Teru und Hikogoro zu sein, war auch ein Schub, und Jyoyoshi, der von seinen hochrangigen Vasallen um Rückführung gebeten wurde, erhielt eine Voreingenommenheit vom Mainstream-Eroberer-General Yoshiharu Ashikaga und nannte sich Yoshimoto. Es war. Die Nachfolge des Besitzers wurde jedoch durch die Opposition von Herrn Fukushima, einem führenden Vasallen, verwirrt, und am Ende lehnte sich Herr Fukushima gegen seinen eigenen bluttragenden Halbbruder Genhiro Keisou (Hanakura no Ran) auf. ).

Löschen Sie das Tag, das auf den Artikel [hier] verweist (https://applingo.tokyo/article/1252).

> cat wiki.txt | sed '/^<[^>]*>$/d' > wiki_removed_doc_tag.txt

Trennung durch MeCab

Japanisch wird nicht durch Leerzeichen getrennt, und es ist notwendig, Wörter gut zu erkennen. Es scheint, dass Satzstücke usw. mit Sprachen kompatibel sind, die zum Teil keine Leerzeichen haben, aber es scheint ein Beispiel zu geben, dass es sich gut anfühlt, im Voraus mit MeCab zu schreiben.

Installieren Sie MeCab

#Andere als Fenster
> pip install mecab-python3
# windows
> pip install mecab-python-windows

Trennung mit MeCab

import MeCab

text = "Trennung ist keine leichte Aufgabe, aber eine herausfordernde Aufgabe."

tokenizer = MeCab.Tagger("-Owakati") #Separater Schreibmodus
tokens = tokenizer.parse(text).split()
print(tokens)
# => ['Teilen', 'Ist', 'Einfach', 'damit', 'Ist', 'Ja', 'Nein', 'Hmm', 'Aber', ',', 'Herausfordernd', 'Nana', 'Aufgabe', 'damitす', '.']

Sie können wiki_removed_doc_tag.txt zwangsweise in diesen Text einfügen, aber dieses Mal werde ich es Zeile für Zeile lesen, unter Berücksichtigung der Belastung des Speichers. Übrigens, wenn Sie in Windows die Codierung nicht in der Option open () angeben, tritt ein Fehler auf. Geben Sie also encoding = "utf-8_sig" an.

mecab_tokenization.py


import MeCab

file_path = "wiki_removed_doc_tag.txt"
output_path = "wiki_mecab_space_separated.txt"
tokenizer = MeCab.Tagger("-Owakati")
output_text = "" #Fügen Sie hier zeilenweise Ergebnisse hinzu

#Lesen und verarbeiten
with open(file_path, "r") as f_in:
  for line in f_in:
    tokens = tokenizer.parse(line).split() #Teilen
    text = " ".join(tokens) #Mit Leerzeichen trennen
    output_text += text

#sparen
with open(output_path, "w") as f_out:
  f_out.write(output_text)

Auf diese Weise ist es möglich, ohne Generierung von OOM und ohne Laden des gesamten Speichers zu verarbeiten.

Wenn Sie zu diesem Punkt kommen, erhalten Sie viele durch Leerzeichen getrennte Sätze, sodass Sie sie zum Lernen von Satzteilen verwenden können.

Recommended Posts

Vorverarbeitung von Wikipedia-Dump-Dateien und gemeinsame Nutzung großer Datenmengen mit MeCab
Erkennen Sie allgemeine MIDI-Daten von einer großen Menge von MIDI
Datenbereinigung 3 Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Analyse von Finanzdaten durch Pandas und deren Visualisierung (1)
Visualisierung von Daten anhand einer erklärenden Variablen und einer objektiven Variablen
Überblick über die Verarbeitung natürlicher Sprache und ihre Datenvorverarbeitung
Korrelation durch Datenvorverarbeitung
Vorverarbeitung von Präfekturdaten
Hinweise zum Umgang mit großen Datenmengen mit Python + Pandas
Anwendung von Python: Datenbereinigung Teil 3: Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Vor- und Nachbearbeitung von Pytest
Visualisierung von Daten nach Präfektur
Automatische Erfassung von Genexpressionsdaten durch Python und R.
Praxis der Datenanalyse durch Python und Pandas (Tokyo COVID-19 Data Edition)