[Python] Extrayez des données texte à partir de données XML de 10 Go ou plus.

L'autre partie est un fichier XML de "Wikipedia version japonaise"

J'ai décidé d'essayer le traitement du langage naturel après une longue période, [Wikipedia: téléchargement de la base de données](https://ja.wikipedia.org/wiki/Wikipedia:% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 83% 99% E3% 83% BC% E3% 82% B9% E3% 83% 80% E3% 82% A6% E3% 83% B3% E3% 83% AD% E3% 83% BC% J'ai téléchargé "Wikipedia version japonaise" depuis E3% 83% 89). Au lieu de demander l'interdiction de l'exploration, Wikipedia vous permet de télécharger des vidages. Génial ... mais le fichier téléchargé est un seul fichier XML. Bien entendu, la taille du fichier est supérieure à 12 Go lorsqu'il est décompressé après le téléchargement.

$ ll
-rwxrwxrwx 1 k k 12927699165 Apr 12 17:17 xml_jawiki-20200401-pages-articles-multistream.xml*

Quand j'essaye la tête ...

<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="ja">
  <siteinfo>
    <sitename>Wikipedia</sitename>
    <dbname>jawiki</dbname>
    <base>https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8</base>
    <generator>MediaWiki 1.35.0-wmf.25</generator>
    <case>first-letter</case>
    <namespaces>
      <namespace key="-2" case="first-letter">médias</namespace>
      <namespace key="-1" case="first-letter">spécial</namespace>
      <namespace key="0" case="first-letter" />
      <namespace key="1" case="first-letter">Remarque</namespace>
      <namespace key="2" case="first-letter">utilisateur</namespace>
      ...
      <namespace key="2302" case="case-sensitive">Gadget definition</namespace>
      <namespace key="2303" case="case-sensitive">Gadget definition talk</namespace>
    </namespaces>
  </siteinfo>
  <page>
    <title>Wikipedia:Téléchargement du journal avril 2004</title>

En allant un peu plus loin, vous verrez les données textuelles que vous recherchez. Exemple:

    <title>Ingénierie de l'information</title>
    <ns>0</ns>
    <id>63</id>
    <revision>
      <id>76256715</id>
      <parentid>73769903</parentid>
      <timestamp>2020-02-18T20:19:50Z</timestamp>
      <contributor>
        <username>Fuda Juban-dori</username>
        <id>1352763</id>
      </contributor>
      <model>wikitext</model>
      <format>text/x-wiki</format>
      <text bytes="5880" xml:space="preserve">'''Ingénierie de l'information'''(Johokougaku)[[information]]À propos du terrain[[ingénierie]]Est. Quant au sentiment des mots[[information科学]]という語がもっぱらおおまかに「科学」という語が指す範囲を中心としているのに対し、「ingénierie」的な分野に重心があるが、内実としてはどれもたいして変わらないことが多い(たとえば、大学の学部学科名などに関しては、個々の大学の個性による違いのほうが、名前による違いより大きい)。日本で、大学のingénierie部などに[[L'informatique|L'informatique]]ないしinformation関係の学科を設置する際に、「ingénierie」部という語との整合のためだけに便利に使われた、という面が大きい([[Ingénierie de l'information科]]Voir l'article).

En anglais[[:en:Information engineering|information engineering]]Est[[Génie logiciel]]C'est l'une des méthodes utilisées et ne correspond pas à «l'ingénierie de l'information» en japonais. Dans des mots similaires[[Informatique]]Il y a.

==Aperçu==
Ici, nous allons extraire de l'introduction de départements de certaines universités (commentaire non spécialisé en recherche etc.) Qu'est-ce que l'ingénierie de l'information?[[information]]Est un domaine académique pour l'utilisation d'ingénierie de&lt;ref&gt;[http://www.ics.keio.ac.jp/dept/concept.html.ja information工学科のねらい] [[Université Keio]] information工学科&lt;/ref&gt;。informationの発生([[Exploration de données]]、[[Infographie]]など)、informationの伝達([[Réseau informatique]]など)、informationの収集([[Vision par ordinateur]]、[[Moteur de recherche]]など)、informationの蓄積([[Base de données]]、[[Compression de données]]など)、informationの処理([[Ingénierie informatique]]、[[L'informatique]]、[[Génie logiciel]]) Peut être considéré comme un domaine d'ingénierie complet&lt;ref&gt;[http://www.osakac.ac.jp/dept/p/zyuken/gakka2.html information工学とは何か] [[Université des télécommunications d'Osaka]] information工学科&lt;/ref&gt;。またinformation工学を、物理現象を支配している原理や法則や社会・経済活動をinformationという観点から捉え,コンピュータ上の設計手順に変換することにより自動化する方法を創出する学問分野とする見方もあり、これは英語でいう[[L'informatique]]Correspond à (informatique)&lt;ref&gt;[http://www.ise.shibaura-it.ac.jp/main02.curriculum html] [[Institut de technologie de Shibaura]] information工学科&lt;/ref&gt;.. Dans tous les cas, l'explication ci-dessus est un extrait de l'introduction des départements universitaires.

Informatique et[[Science de l'information]]・ En tant que société universitaire traitant de l'ingénierie de l'information, elle a été créée tôt aux États-Unis.[[Association for Computing Machinery|ACM]]Traduit littéralement, il s'agit de "Computational Machinery Society". Institution internationale[[Traitement de l'information Nations Unies]]Au moment de son inauguration en 1960, il était largement reconnu que les ordinateurs étaient des machines qui traitaient les informations ainsi que les calculs (en nombre).&lt;ref&gt;http://museum.ipsj.or.jp/pioneer/h-wada.html&lt;/ref&gt;「[[Société de traitement de l'information]]Est appelé[[Traitement d'informations]]Est venu pour être utilisé. Aussi[[Société de l'information et de la communication électroniques]]Utilise également «information» comme mot pour décrire ce champ.

[[Association japonaise des ingénieurs]]Il existe un "sous-comité de l'ingénierie de l'information" au Japon, et les examens secondaires imposés par le sous-comité sont par département, mais le département lié aux logiciels informatiques est appelé le "département de l'ingénierie de l'information".&lt;ref&gt;http://www.engineer.or.jp/c_categories/index02022.html&lt;/ref&gt;([[Département d'ingénierie de l'information ingénieur]])。

*En tant que nom de département,[[Université de Kyoto]]([[Ecole d'ingénieurs]])et[[Université d'Osaka]]([[基礎Ecole d'ingénieurs]]), Le Département de génie de l'information apparaît pour la première fois en 1970. meme annee,[[Institut de technologie de Tokyo]]Le Département des sciences de l'information est également disponible[[Université des télécommunications]]et[[Université Yamanashi]]Département d'informatique[[Institut de technologie de Kanazawa]]Le Département de génie informatique a été créé en.
*Le nom de la faculté est la Faculté de génie de l'information de l'Institut de technologie de Kyushu, qui a été créée en 1986. Outre les deux départements de génie de l'information intelligente et de génie de l'information électronique, qui ont commencé à accueillir des étudiants en 1987, le département de génie des systèmes de contrôle, le département de génie des systèmes mécaniques et le département de génie des systèmes biochimiques (actuellement département de génie de l'information de création de systèmes, département de génie mécanique de l'information, département de bioinformatique) Les cinq départements sont spécialisés dans l'ingénierie de l'information. Aussi,[[Science de l'information]]En tant que faculté spécialisée dans[[Science de l'information部]]Existe et[[Informatique]]En tant que faculté spécialisée dans[[Informatique部]]Existe.[[ingénierie]]En 1996[[Institut de technologie d'Osaka]]Est installé en premier.&lt;ref&gt;https://www.oit.ac.jp/is/&lt;/ref&gt;
* &lt;!--L'ingénierie de l'information est souvent traduite par l'informatique.--&gt;&lt;!--←? L'informatique est l'informatique--&gt;"[[Département d'ingénierie de l'information]], Le nom anglais est souvent Computer Science. En effet, le terme informatique est extrêmement facile à comprendre dans les pays anglophones et est traité comme une formation universitaire telle que «diplôme CS» dans l'industrie informatique. L'ingénierie de l'information est de 8 en 2007/Il est environ 33 ans. Par exemple, l'ingénierie de l'information[[L'université de Cambridge]]Division de l'ingénierie de l'information&lt;ref&gt;[http://www.eng.cam.ac.uk/research/div-f/ CUED - Division F: Information Engineering]L'université de Cambridge&lt;/ref&gt;。
*Dans l'école doctorale[[École supérieure d'informatique]]Tel.

Il semble que les informations d'identification et de contributeur soient également incluses, mais dépêchez-vous et voulez le titre et le texte. Il semble qu'il soit judicieux de traiter en langage naturel lorsque la longueur du texte est plus longue qu'un certain niveau, il semble donc bon de faire une liste de titre et de longueur du texte. Maintenant, pour travailler avec un énorme XML en python ... il y avait un prédécesseur: Méthode d'économie de mémoire lors de la lecture d'énormes XML de plusieurs Go ou plus avec Python

Oh oui, il est important d'économiser de la mémoire en ne chargeant rien d'autre que la cible d'analyse la plus récente en mémoire. Si vous gérez des données qui débordent de la mémoire, le traitement sera extrêmement lent, il est donc bon d'enregistrer la vitesse de traitement pour chaque nombre fixe d'observations. Voici le résultat d'essais et d'erreurs lors de l'imitation.

code

import xml.etree.ElementTree as ET #Utilisez la bibliothèque standard ElementTree

body ="jawiki-20200401-pages-articles"
path =f"../xml_{body}-multistream.xml"
path_w =f"../short_{body}-title.csv"
context = ET.iterparse(path, events=('start', 'end'))

#Ignorer les nœuds inutiles tels que root
_, r0 = next(context)
_, r1 = next(context)
_, r2 = next(context)

print(r2.text)
count = 0
title =""
import time
start = time.time()
prev = start
with open(path_w, mode='w',encoding="utf-8") as fw:
    for event, elem in context:
        if event=="start" and elem.text:
            txt = elem.text
            if "title" in elem.tag:
                str = f"{elem.tag}".replace("{http://www.mediawiki.org/xml/export-0.10/}","")
                title = txt
            if "text" in elem.tag:
                str = f"{elem.tag}".replace("{http://www.mediawiki.org/xml/export-0.10/}","")
                if len(txt) <= 1000:
                    x= f"{title},{len(txt)}"
                    fw.write(x+"\n")
                    count += 1
                    if count % 1000 == 0: #Sortie du temps de traitement pour 1000 cas
                        next = time.time()
                        print(count, f"elapsed_time = {next - prev}", x)
                        prev = next

        elem.clear() #Libérez l'élément analysé de la mémoire ... ★

print(count)

Kimo est à ★. Sans cet appel clear (), la vitesse de traitement de mon PC a fortement ralenti à partir du moment où j'ai lu 40 000 éléments.

Résultat du traitement

636000 elapsed_time = 0.635291576385498 Wikipedia:Demande de suppression/Wikipedia:Demande de suppression/Journal/18 novembre 2019,2692
637000 elapsed_time = 0.6260190010070801 Wikipedia:Demande de suppression/Taku Inoue(Désambiguïsation),1112
638000 elapsed_time = 0.6080121994018555 Page Web statique,7108
639000 elapsed_time = 0.6243636608123779 Bambina(Bureau d'animation),2590
640000 elapsed_time = 0.6858398914337158 Yui Wakui,1106
641000 elapsed_time = 0.632981538772583 Tsukigicho(Ville d'Ikeda),6688
642000 elapsed_time = 0.5550098419189453 Simon Suruga,2868
643000 elapsed_time = 1.671999454498291 My Sweet Maiden/Welcome To Our Diabolic Paradise,1955
644000 elapsed_time = 0.6001503467559814 Deuxième parc industriel de West Koriyama,1699
645000 elapsed_time = 0.6131837368011475 Template:UEFA U-17 Championnat d'Europe 2009 Equipe nationale d'Espagne,1002
646000 elapsed_time = 0.6151120662689209 Gengoya,1496
647000 elapsed_time = 0.6119420528411865 École primaire Tsushima City Higashi,2119
647933

Process finished with exit code 0

Même après 600 000 cas, il peut être traité en 1 seconde environ pour 1 000 cas. Bien bien. Le csv complété est complété dans l'ordre "Titre, longueur du corps".

EU (Désambiguïsation),1480
Organisme,5850
La géographie,2217
Culture des enfants,3866
Vie courante,1764
Ingénierie de l'information,2650
Langage sans contexte,2367
Langue ordinaire,1830
Langage naturel,1396
Fromage Goda,1142
théologie,1767
Thaïlande,1792
Études de journaux,2344
Pharmacie,2338
Écran LCD nématique,1209
Wikipedia:FAQ,1645
Wikipedia:Restez calme même si la discussion s'intensifie,2269
musicien,4380
Liste de diffusion,3687
Wikipedia:FAQ modifier,4163
Record,2004
Wikipedia:Demande de fourniture d'image,2714
Wikipedia:Téléchargement de la base de données,3331
Dessinateur japonais,5433
Liste des titres de jeux,2730
Shin Takahashi,5675
Takeichi Terazawa,3951

À titre de comparaison, j'ai également extrait des titres de 1000 caractères ou moins.

1321000 elapsed_time = 0.3331446647644043 Category:JA Gifu Welfare Ren,165
1322000 elapsed_time = 0.19999384880065918 Category:Femmes taïwanaises,165
1323000 elapsed_time = 0.22401905059814453 Togénine,11
1324000 elapsed_time = 0.26406049728393555 Plancher campanien,14
1325000 elapsed_time = 0.2306044101715088 Rivière Hirugahara,934
1326000 elapsed_time = 0.25202035903930664 Strombocia,27
1327000 elapsed_time = 0.1840074062347412 Yumekure,23
1328000 elapsed_time = 0.21496915817260742 Bibliothèque Wikipédia,28
1329000 elapsed_time = 0.22100353240966797 Tarif plancher,14
1330000 elapsed_time = 0.19901561737060547 Category:Joueur de la compétition générale du Liban,95
1331000 elapsed_time = 0.20599126815795898 Spring Yokomachi,12
1332000 elapsed_time = 0.24999594688415527 Ambroise Marie Francoine Joseph Pariso de Beauvois,42
1333000 elapsed_time = 0.20502090454101562 Category:Actrice nord-irlandaise du 20e siècle,273
1333333

Process finished with exit code 0

... Si le titre inclut Category, il semble y avoir une autre utilisation.

J'ai donc pu ajouter un hit aux données XML contenant 2 millions de titres en des dizaines de minutes. Thanks.

Recommended Posts

[Python] Extrayez des données texte à partir de données XML de 10 Go ou plus.
Extraire du texte d'images avec Python
Comment économiser de la mémoire lors de la lecture d'énormes XML de plusieurs Go ou plus en Python
Obtenez plus de 10 données du magasin de paramètres SSM
Extraire des données d'une page Web avec Python
Extraction de données depuis S3
Python: texte japonais: caractéristique du discours à partir de la similitude des mots
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Générer une image verticale d'un roman à partir de données textuelles
Défiez l'analyse des composants principaux des données textuelles avec Python
Python: texte japonais: caractéristique de la parole à partir de la continuité des mots
[Bases de la science des données] Collecte de données depuis RSS avec python
Extraire le modèle du fichier EML enregistré depuis Thunderbird avec python3.7
Remarques sur l'importation de données depuis MySQL ou CSV avec Python
Extraire les informations de classification, etc. des données genbank au format xml
[Python] Que faites-vous avec la visualisation de 4 variables ou plus?
Extraire le texte du pdf [python] et lire les caractères à haute voix avec Open-Jtalk
Python: exclure les balises des données html
Frappez les données du trésor de Python Pandas
Obtenir des données de Quandl en Python
Extraire des données spécifiques d'un JSON complexe
Existence du point de vue de Python
Comparaison de la vitesse de la perspective XML Python
Traiter les données Pubmed .xml avec python
Extraire des chaînes de fichiers avec Python
Comparaison de R, Python, SAS, SPSS du point de vue des data scientists européens
Extraire les lignes qui correspondent aux conditions d'un fichier texte avec python
[Python] Formater du texte plein de codes de saut de ligne copiés à partir d'un PDF bien
Recevoir des données textuelles de mysql avec python
[Note] Obtenir des données de PostgreSQL avec Python
Traiter les données Pubmed .xml avec python [Partie 2]
Utiliser le type de données PostgreSQL (jsonb) à partir de Python
Python: lecture de données JSON à partir de l'API Web
Acquisition des données de croissance des plantes Acquisition des données des capteurs
# 5 [python3] Extraire des caractères d'une chaîne de caractères
Connectez beaucoup de Python ou et et
Extraire du texte japonais d'un PDF avec PDFMiner
[Python] Application Web à partir de 0! Pratique (4) - Mise en forme des données-
Recommandation d'Altair! Visualisation des données avec Python
Utilisation d'opérateurs non logiques de ou en python
Obtenez la probabilité de précipitation de XML avec Python
Notes d'apprentissage depuis le début de Python 2
[Introduction au Data Scientist] Bases de Python ♬
[Python] (Line) Extraire les valeurs des images graphiques
[Python] De l'analyse morphologique des données CSV à la sortie CSV et à l'affichage graphique [GiNZA]
Utilisez PIL en Python pour extraire uniquement les données souhaitées d'Exif
Extraire des éléments (en utilisant une liste d'index) comme NumPy d'une liste / taple Python