python从xml中提取单词

时间:2015-01-08 14:04:40

标签: python xml xml-parsing text-parsing wikimedia-dumps

如何从大xml文件(1.3 gb)中提取<text></text>之间的所有单词,其结构如下:

<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="pl">
  <siteinfo>
    <sitename>Wikipedia</sitename>
    <dbname>plwiki</dbname>
    <base>http://pl.wikipedia.org/wiki/Wikipedia:Strona_g%C5%82%C3%B3wna</base>
    <generator>MediaWiki 1.25wmf12</generator>
    <case>first-letter</case>
    <namespaces>
      <namespace key="-2" case="first-letter">Media</namespace>
      <namespace key="-1" case="first-letter">Specjalna</namespace>
      <namespace key="0" case="first-letter" />
      <namespace key="1" case="first-letter">Dyskusja</namespace>
      <namespace key="2" case="first-letter">Wikipedysta</namespace>
      <namespace key="3" case="first-letter">Dyskusja wikipedysty</namespace>
      <namespace key="4" case="first-letter">Wikipedia</namespace>
      <namespace key="5" case="first-letter">Dyskusja Wikipedii</namespace>
      <namespace key="6" case="first-letter">Plik</namespace>
      <namespace key="7" case="first-letter">Dyskusja pliku</namespace>
      <namespace key="8" case="first-letter">MediaWiki</namespace>
      <namespace key="9" case="first-letter">Dyskusja MediaWiki</namespace>
      <namespace key="10" case="first-letter">Szablon</namespace>
      <namespace key="11" case="first-letter">Dyskusja szablonu</namespace>
      <namespace key="12" case="first-letter">Pomoc</namespace>
      <namespace key="13" case="first-letter">Dyskusja pomocy</namespace>
      <namespace key="14" case="first-letter">Kategoria</namespace>
      <namespace key="15" case="first-letter">Dyskusja kategorii</namespace>
      <namespace key="100" case="first-letter">Portal</namespace>
      <namespace key="101" case="first-letter">Dyskusja portalu</namespace>
      <namespace key="102" case="first-letter">Wikiprojekt</namespace>
      <namespace key="103" case="first-letter">Dyskusja wikiprojektu</namespace>
      <namespace key="828" case="first-letter">Moduł</namespace>
      <namespace key="829" case="first-letter">Dyskusja modułu</namespace>
    </namespaces>
  </siteinfo>
  <page>
    <title>AWK</title>
    <ns>0</ns>
    <id>2</id>
    <revision>
      <id>40933900</id>
      <parentid>38565213</parentid>
      <timestamp>2014-11-12T13:48:35Z</timestamp>
      <contributor>
        <username>ToSter</username>
        <id>70424</id>
      </contributor>
      <minor />
      <comment>[[WP:SK]], drobne techniczne</comment>
      <model>wikitext</model>
      <format>text/x-wiki</format>
      <text xml:space="preserve">{{Język programowania infobox
Elektrony znajdujące się na najdalszej powłoce w atomie nazywane są [[Elektron walencyjny|walencyjnymi]], a ich powłoka − [[powłoka walencyjna|walencyjną]]. Liczba takich elektronów determinuje właściwości chemiczne atomów. Atomy, w których powłoka walencyjna nie jest w pełni wypełniona, łatwo oddziałują z innymi atomami, tak aby uzupełnić (lub opróżnić) tę powłokę&lt;ref&gt;{{Cytuj stronę | url = http://www.cem.msu.edu/~reusch/VirtualText/intro1.htm | tytuł = Virtual Textbook of Organic Chemistry | data dostępu = 2008-01-11 | nazwisko = Reusch | imię = William | data = 2007-07-16 | opublikowany = Michigan State University}}&lt;/ref&gt;. Odbywa się to poprzez [[reakcja chemiczna|reakcje chemiczne]], czyli procesy tworzenia i zrywania [[wiązanie chemiczne|wiązań chemicznych]].

Wiązania powstają w efekcie uwspólniania elektronów przez dwa lub więcej atomów ([[wiązanie kowalencyjne]]) albo na skutek przeniesienia elektronów z jednego atomu na drugi ([[wiązanie jonowe]]). W pierwszym przypadku współdzielone elektrony tworzą jedną, wspólną chmurę wokół połączonych atomów, a w drugim atomy łączą się w [[para jonowa|pary jonowe]], przyciągane do siebie [[oddziaływanie elektrostatyczne|oddziaływaniem elektrostatycznym]]. O typie wiązania decyduje różnica [[elektroujemność|elektroujemności]] atomów&lt;ref&gt;{{cytuj 

stronę|url=http://www.chemguide.co.uk/atoms/bonding/ionic.html|tytuł=Ionic (Electrovalent) Bonding|autor=Jim Clark|data= 2000|opublikowany=chemguide|język=en|data dostępu=2010-09-09}}&lt;/ref&gt;&lt;ref&gt;{{Cytuj stronę | url = http://www.chemguide.co.uk/atoms/bonding/covalent.html | tytuł = Covalent bonding – Single bonds | rok = 2000 | opublikowany = chemguide}}&lt;/ref&gt;.

     |logo =
     |nazwa = AWK
    </text>
          <sha1>6fsbyepqq15mfrk3co2i3ck0o4svz1n</sha1>
        </revision>
      </page>
      <page>
        <title>Alergologia</title>
        <ns>0</ns>
        <id>4</id>
        <revision>
          <id>41351093</id>
          <parentid>35063052</parentid>
          <timestamp>2014-12-27T16:38:14Z</timestamp>
          <contributor>
            <username>Mishu57</username>
            <id>632110</id>
          </contributor>
          <comment>/* Linki zewnętrzne */ commons</comment>
          <model>wikitext</model>
          <format>text/x-wiki</format>
          <text xml:space="preserve">'''Alergologia''' - dziedzina [[medycyna|medycyny]] zajmująca się rozpoznawaniem i [[leczenie|leczeniem]] [[alergia|schorzeń alergicznych]].

== Zobacz też ==
{{wikisłownik|alergologia}}
* [[alergen]]

== Linki zewnętrzne ==
{{commonscat|Allergology}}
* [http://www.pta.med.pl/ Polskie Towarzystwo Alergologiczne]
* [http://www.alergologia.org/ Portal Lekarzy Alergologów 'alergologia.org']
* [http://alergie.mp.pl/ Alergie.mp.pl, serwis wydawnictwa Medycyna Praktyczna]


{{Zastrzeżenia|Medycyna}}

{{Specjalności medyczne}}

[[Kategoria:Alergologia| ]]
[[Kategoria:Specjalności lekarskie]]</text>
      <sha1>5sgz8sbnobk66fyywx5p8v366s5p5zu</sha1>
    </revision>
  </page>

并将其保存为txt文件,如:

Jezyk
programowania
infobox
...
alergologia
dziedzina
medycyna 
...

应删除所有特殊字符,如[',*,[,&amp;]。 它有很多<text>个部分。 如何在python中执行此操作(我的电脑中没有太多ram内存,所以它应该以某种方式迭代)。

请问你能帮帮我吗?

至少有没有人知道如何将此文件(仅文本部分)转换为csv或json文件。 CSV最理想的形式如上所述。

0 个答案:

没有答案