PandasデータフレームにXMLファイル(TEDヨーロッパ)を抽出する -- python フィールド と xml フィールド と pandas フィールド と xml-parsing フィールド と elementtree フィールド 関連 問題

Extract an XML file (TED Europe) to a pandas dataframe












1
vote

問題

日本語

テッドヨーロッパからXMLを持っています(このように:テッドヨーロッパXMLファイル(ログイン) XMLファイル内の必須))は公開調達契約です。

私の質問は現在、XMLファイルをPandasデータフレームに解析する方法です。 これまでのところ私はElementTreeパッケージを使ってこれを達成しようとしました。

しかし、私はまだ重要なテキストに「P」タグのみでマークされているため、初心者Habeが情報を抽出するのに問題があります。

英語翻訳のためにこの情報を抽出するには、例えば "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 / PUIUPN}を各パス要素に追加した場合にのみ機能します。

その上に移動すると、情報を含むすべてのパスを含む機能を書き込み、それらをPandasデータフレームに追加します。理想的には英語の翻訳のみを抽出する必要があります。

XMLファイルの別の部分では、このような関数を使用しました:

<プレクラス= "LANG-Python Prettyprint-Override"> <コード> 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')

しかしながら、pathとtagsは、タグがそれらのコンテンツの後に既に名前が付けられ、タグがより区別できないので、このセクションははるかに区別できます。

英語

I have an XML from TED Europe (like this:TED Europa XML Files (Login required)) Within the XML Files are public procurement contracts.

My question is now how can I parse the XML File to a pandas dataframe. So far I tried to achieve this using the ElementTree package.

However since I am still a beginner habe trouble extracting the information since the relevant text is marked with only "p" tags.

How can I extract this information for the english translation so that for example "TI_MARK" is the column header and the information within "TXT_MARK" and the "p" tags are the rows? The other rows are later filled with information from other public procurement XML Files.

<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> 

So far my code is:

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) 

Strangely the extraction only works if I add {ted/R2.0.8.S03/publication} to each path element.

Moving on from that I have problems writing a function which contains all paths with infos and appends them to a pandas dataframe. Ideally only the english translation should be extracted.

For another part of the XML File I used a function like this:

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') 

The Path and Tags however are much more distinguishable for this section because the tags already are named after their content and the tags are more distinguishable.

</div
              

回答リスト


関連する質問

2  Python ElementTreeでは、ツリー内の要素のすべての先祖のリストを取得できますか?  ( In python elementtree how can i get list of all ancestors of an element in tree ) 
「get_ancestors_recursivally」関数が必要です。 サンプルランはです <事前> <コード> >>> dump(tr) <anc1> <anc2> <element> </element> </anc2> </anc1> ...

36  Pythonの単体テストでXMLを比較する  ( Comparing xml in a unit test in python ) 
XML文字列から自分自身を構築できるオブジェクトを持っていて、それ自体をXML文字列に書き出す。 XMLを通してラウンドトリップをテストするための単体テストを書いてくださいが、2つのXMLバージョンを比較するのに問題があります。空白と属性の順序は問題のようで...

0  PythonのリストへのHTMLテーブルの解析  ( Parsing an html table to a list in python ) 
だから私はIMDBの賞のページから引っ張っているいくつかの文字列を持っています: <事前> <コード> <table><tr><td><big>Academy Awards, USA</big> </td> </tr> <tr...

0  Pythonを使用して効果的にXMLを解析できません  ( Cant parse xml effectively using python ) 
<事前> <コード> import urllib import xml.etree.ElementTree as ET def getWeather(city): #create google weather api url url = "h...

0  ElementTrieを使用したXMLツリーの変更は更新されません  ( Changes in xml tree using elementtree do not get updated ) 
子要素を親要素に挿入しようとしていますが、作成したばかりの子要素を含むファイルを書き込むためには、ツリーを更新することはできません。誰かが私が欠けているものを教えてくださいか? これは私が持っているものです <事前> <コード> <text> <p> ...

2  Python - XMLを書く(フォーマットされた)  ( Python write xml formatted ) 
XMLコンテンツを作成するためにこのPythonスクリプトを書きました、そしてこの "Preterified" XMLをファイルに書き込みたい(50%完了): 私のスクリプトはこれまで: <事前> <コード> data = ET.Element("d...

1  Python findall最初の出現のみ  ( Python findall only first occurence ) 
このXMLを持っています: 複数の「構成要素」タグ付き。各レベルを繰り返す必要があります。 <事前> <コード> import sys from xml.etree import ElementTree as et base="<ss><cod>cod...

2  ElementTree - ツリー内の親としてリストされている子の親を見つける  ( Elementtree finding parent of a child that is only listed as parent in a tree ) 
Pythonのetreeに問題があります。 私は次のロジックに続くXML文書を持っています:文書はセクションを持つ章です。セクションもセクションを持つことができます。それ以外の場合は、タイトルと段落があります。だから、基本的にはこのようなもの: <事前> <...

-1  XML PythonパーサーThhrowing Error  ( Xml python parser thhrowing errors ) 
これはXML DTDです(少なくとも私はそれがDTDだと思います、私はそれほどXMLに精通していないので私が間違っているなら私を修正してください): <事前> <コード> <?xml version="1.0" encoding="UTF-8"?> <!DOC...

0  ElementTreeからインポートできなくなりました  ( Can no longer import from elementtree ) 
数年間私は私のコードに次のインポートをしました: <事前> <コード> from etree.ElementTree import fromstring, parse, VERSION 今日、私は(Eclipse / Pydevで)移動中に(Eclipse...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有