Извлечь XML-файл (TED Europe) в информационный фрейм pandas - PullRequest
0 голосов
/ 08 июня 2018

У меня есть XML от TED Europe (например: TED Europa XML Files (требуется регистрация) ) В XML-файлах находятся договоры о государственных закупках.

Теперь у меня вопрос, как можноЯ анализирую XML-файл на фрейме данных pandas.До сих пор я пытался добиться этого с помощью пакета ElementTree.

Однако, поскольку я все еще начинаю испытывать трудности с извлечением информации, поскольку соответствующий текст помечен только тегами "p".

Какмогу ли я извлечь эту информацию для перевода на английский язык, чтобы, например, «TI_MARK» был заголовком столбца, а информация в «TXT_MARK» и тегах «p» - строками?Позже другие строки заполняются информацией из других XML-файлов государственных закупок.

<FORM_SECTION>
  <OTH_NOT LG="DA" VERSION="R2.0.8.S03.E01" CATEGORY="TRANSLATION">
  <OTH_NOT LG="DE" VERSION="R2.0.8.S03.E01" CATEGORY="TRANSLATION">
  <OTH_NOT LG="EN" VERSION="R2.0.8.S03.E01" CATEGORY="ORIGINAL">
        <FD_OTH_NOT>
          <TI_DOC>
            <P>BE-Brussels: IPA - Improved implementation of animal health, food safety and phytosanitary legislation and corresponding information systems</P>
          </TI_DOC>
          <STI_DOC>
            <P>Location — The former Yugoslav Republic of Macedonia</P>
          </STI_DOC>
          <STI_DOC>
            <P>SERVICE CONTRACT NOTICE</P>
          </STI_DOC>
          <CONTENTS>
            <GR_SEQ>
              <TI_GRSEQ>
                <BLK_BTX/>
              </TI_GRSEQ>
              <BLK_BTX_SEQ>
                <MARK_LIST>
                  <MLI_OCCUR NO_SEQ="001">
                    <NO_MARK>1.</NO_MARK>
                    <TI_MARK>Publication reference</TI_MARK>
                    <TXT_MARK>
                      <P>EuropeAid/139253/DH/SER/MK</P>
                    </TXT_MARK>
                  </MLI_OCCUR>
                  <MLI_OCCUR NO_SEQ="002">
                    <NO_MARK>2.</NO_MARK>
                    <TI_MARK>Procedure</TI_MARK>
                    <TXT_MARK>
                      <P>Restricted</P>
                    </TXT_MARK>
                  </MLI_OCCUR>

Пока мой код:

import xml.etree.cElementTree as ET
tree = ET.parse('196658_2018.xml')

#Print Tree
print(tree)

#tree=ET.ElementTree(file='196658_2018.xml')
root = tree.getroot()

#Print root
print(root)

for element in root.findall('{ted/R2.0.8.S03/publication}FORM_SECTION/{ted/R2.0.8.S03/publication}OTH_NOT/{ted/R2.0.8.S03/publication}FD_OTH_NOT/{ted/R2.0.8.S03/publication}TI_DOC/{ted/R2.0.8.S03/publication}P'):

    print(element.text)

Странно, извлечение работает, только если я добавляю {ted /R2.0.8.S03 / публикация} к каждому элементу пути.

У меня возникают проблемы при написании функции, которая содержит все пути с информацией и добавляет их в кадр данных pandas.В идеале должен быть извлечен только английский перевод.

Для другой части XML-файла я использовал такую ​​функцию:

from lxml import etree
import pandas as pd
import xml.etree.ElementTree as ET

def parse_xml_fields(file, base_tag, tag_list, final_list):
    root = etree.parse(file)
    nodes = root.findall("//{}".format(base_tag))
    for node in nodes:
        item = {}
        for tag in tag_list:
            if node.find(".//{}".format(tag)) is not None:
                item[tag] = node.find(".//{}".format(tag)).text.strip()
        final_list.append(item)

# My variables
field_list = ["{ted/R2.0.8.S03/publication}TI_CY","{ted/R2.0.8.S03/publication}TI_TOWN", "{ted/R2.0.8.S03/publication}TI_TEXT"]
entities_list = []

parse_xml_fields("196658_2018.xml", "{ted/R2.0.8.S03/publication}ML_TI_DOC", field_list, entities_list)


df = pd.DataFrame(entities_list, columns=field_list)
print(df)

#better column names
df.columns = ['Country', 'Town', 'Text']

df.to_csv("TED_Europa_List.csv", sep=',', encoding='utf-8')

Путь и теги, однако, гораздо более различимы для этого раздела.потому что теги уже названы в соответствии с их содержимым, а теги более различимы.

...