[PYTHON] Prétraitement des fichiers de vidage Wikipedia et partage de grandes quantités de données avec MeCab

Récemment, j'ai lu un fichier de vidage de Wikipédia et y ai travaillé, je voudrais donc résumer ce que j'ai vérifié à ce moment-là et les points à noter lors de sa lecture.

Public cible de l'article

Télécharger le fichier de vidage Wikipedia

Téléchargez le fichier de vidage Wikipedia à partir de ce lien ou exécutez le wget suivant.

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

Déployer à l'aide de Wiki Extractor

Installez avec pip.

> pip install wikiextractor

Exécutez l'expansion. Cette fois, enregistrez la destination de sortie dans un fichier texte (wiki.txt). Vous pouvez l'enregistrer dans n'importe quel répertoire en spécifiant le chemin vers -o.

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

Prétraitement de wiki.txt

Comme vous pouvez le voir en vérifiant le contenu, la balise doc reste, alors supprimez-la au cas où.

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

Yoshimoto Imagawa était le seigneur gardien et seigneur de la période des Royaumes combattants de Suruga et Toko. M. Imagawa, le 11e propriétaire. En raison de sa relation conjugale avec ses sœurs, Shingen Takeda et M. Shiyasu Hojo sont beau-frère. Le souverain de la vaste région de Tokaido, surnommé "le Yutori n ° 1 de Kaido".

Outre la gestion territoriale comme les réformes militaires rationnelles en instaurant un système parent-enfant, il a également démontré son talent en matière d'expédition et a réussi à transformer M. Imagawa en seigneur en guerre. Le territoire a été étendu de Suruga et Toko à des parties de Mikawa et Owari. Bien qu'il ait construit l'apogée de la famille Imagawa pendant la période des Royaumes combattants, il a été vaincu par Nobunaga Oda et vaincu par Yoshikatsu Mouri (Shinsuke) dans la bataille entre les cuves qui a eu lieu lorsqu'il a envahi Owari.

Né en 1519 en tant que troisième fils des parents de M. Imagawa. Ma mère est la fille de Nobuyoshi Nakamikado, qui est la chambre ordinaire de mon père. Cependant, il existe une théorie selon laquelle Yoshimoto était à l'origine un enfant de la pièce latérale et a adopté un enfant avec Jukei-nun après la turbulence de Hanakura (décrite plus tard). Lorsqu'il est né, il a été envoyé à la porte bouddhiste à l'âge de quatre ans parce qu'il avait son frère, M. Teru et Hikogoro, et a été confié à Kotokei Shogun au temple Seko Zentokuji à Fuji-gun, Suruga. Son disciple, Kyuei Shogiku (plus tard Ohara Yuksai), a repris le rôle à cause de la mort de Shogun en 1529. Après cela, il est entré dans le temple Kenjinji avec Yukisai et est devenu Sengaku Shoho sous la direction de Ryutaka Tsunean. De plus, lui et Yuksai ont étudié au temple Myoshinji pendant Okyu Sokyu et ont approfondi son apprentissage.

Après cela, il est retourné à Suruga de Kyoto à la demande de M. Shiki, mais immédiatement après cela, dans la 5ème année d'astronomie (1536), M. Shiki est décédé subitement. À ce stade, il n'avait aucun droit d'héritage parce qu'il avait un frère aîné, Hikogoro, mais même Hikogoro est mort le même jour que M. Teru, donc le droit d'héritage est venu. Être le même étudiant que M. Teru et Hikogoro a également été un coup de pouce, et Jyoyoshi, qui a été supplié d'être rapatrié par ses vassaux supérieurs, a reçu un parti pris du général conquérant général, Yoshiharu Ashikaga, et s'est appelé Yoshimoto. C'était. Cependant, la succession du propriétaire a été confuse par l'opposition de M. Fukushima, un vassal de premier plan, et à la fin, M. Fukushima s'est rebellé contre son propre demi-frère sanguinaire, Genhiro Keisou (Hanakura no Ran). ).

Supprimez la balise en vous référant à l'article ici.

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

Séparation par MeCab

Le japonais n'est pas séparé par des blancs et il est nécessaire de bien reconnaître les mots. Il semble que Sentencepiece etc. sont compatibles avec les langages qui n'ont pas de blanc dans une certaine mesure, mais il semble y avoir un exemple qui fait du bien d'écrire à l'avance avec MeCab.

Installez MeCab

#Autre que les fenêtres
> pip install mecab-python3
# windows
> pip install mecab-python-windows

Séparation avec MeCab

import MeCab

text = "La séparation n'est pas une tâche facile, mais c'est une tâche difficile."

tokenizer = MeCab.Tagger("-Owakati") #Mode d'écriture séparé
tokens = tokenizer.parse(text).split()
print(tokens)
# => ['Partage', 'Est', 'Facile', 'alors', 'Est', 'Oui', 'Non', 'Hmm', 'Mais', ',', 'Difficile', 'Nana', 'tâche', 'alorsす', '.']

Vous pouvez mettre de force wiki_removed_doc_tag.txt dans ce texte, mais cette fois je le lirai ligne par ligne en considérant la charge sur la mémoire. En passant, sous Windows, si vous ne spécifiez pas l'encodage dans l'option open (), une erreur se produira, alors spécifiez encoding = "utf-8_sig".

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 = "" #Ajoutez les résultats ligne par ligne ici

#Lire et traiter
with open(file_path, "r") as f_in:
  for line in f_in:
    tokens = tokenizer.parse(line).split() #Partage
    text = " ".join(tokens) #Séparez avec des blancs
    output_text += text

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

En faisant cela, il est possible de traiter sans générer de MOO et sans charger toute la mémoire.

Si vous arrivez à ce point, vous obtiendrez beaucoup de phrases séparées par des blancs, vous pourrez donc l'utiliser pour apprendre des morceaux de phrases.

Recommended Posts

Prétraitement des fichiers de vidage Wikipedia et partage de grandes quantités de données avec MeCab
Détecter les données General MIDI à partir d'une grande quantité de MIDI
Nettoyage des données 3 Utilisation d'OpenCV et prétraitement des données d'image
Analyse des données financières par pandas et leur visualisation (1)
Comment visualiser les données par variable explicative et variable objective
Vue d'ensemble du traitement du langage naturel et de son prétraitement des données
Corrélation par prétraitement des données
Pré-traitement des données préfectorales
Remarques sur la gestion de grandes quantités de données avec python + pandas
Application de Python: Nettoyage des données Partie 3: Utilisation d'OpenCV et prétraitement des données d'image
Pré-traitement et post-traitement de pytest
Visualisation des données par préfecture
Acquisition automatique des données de niveau d'expression génique par python et R
Pratique de l'analyse de données par Python et pandas (Tokyo COVID-19 data edition)