Как получить доступ к данным из аннотированного XML-корпуса MMAX2 - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть аннотированный корпус для решения Coreference Resolution. Можете ли вы дать мне знать, как извлечь данные из файла XML. Я сделал следующее, но не работает.

from lxml import objectify
import pandas as pd

    xml = objectify.parse(open('Dari_Coref_2_coref_level.xml'))
    root = xml.getroot()

    df = pd.DataFrame(columns='markable')

    for i in range(0, 2):
        obj = root.getchildren()[i].getchildren()
        row = dict(zip(['markable'], [obj[0].text]))
        row_s = pd.Series(row)
        row_s.name = i
        df = df.append(row_s)

 print(df)

И структура моего XML-файла выглядит так:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE markables SYSTEM "markables.dtd">
<markables xmlns="www.eml.org/NameSpaces/coref">
<markable id="markable_1" span="word_1..word_4" mentiontype="ne"  
coref_class="set_1"  mmax_level="coref"  coreftype="ident" />
<markable id="markable_3" span="word_33..word_34" mentiontype="ne"  
coref_class="set_2"  mmax_level="coref"  coreftype="ident" />
<markable id="markable_2" span="word_5..word_9" mentiontype="np"  
coref_class="set_1"  mmax_level="coref"  coreftype="ident" />
<markable id="markable_5" span="word_89..word_90" mentiontype="np"  
coref_class="set_3"  mmax_level="coref"  coreftype="ident" />
<markable id="markable_4" span="word_35..word_44" mentiontype="np"  
coref_class="set_2"  mmax_level="coref"  coreftype="ident" />
<markable id="markable_7" span="word_124..word_126" mentiontype="ne"  
coref_class="set_4"  mmax_level="coref"  coreftype="ident" />
<markable id="markable_6" span="word_91..word_95" mentiontype="np"  
coref_class="set_3"  mmax_level="coref"  coreftype="ident" />
</markables>

1 Ответ

0 голосов
/ 04 сентября 2018

Попробуйте это,

import lxml.html

with open('Dari_Coref_2_coref_level.xml', 'rb') as file:
    xml = file.read()

tree = lxml.html.fromstring(xml)

#Use Xpath to extract the data you want.
# For example to extract ids of the tag markable, you can do
ids = tree.xpath("//markable/@id")
print(ids) # ['markable_1', 'markable_3', 'markable_2', ...]

Руководство по синтаксису Xpath: https://www.w3schools.com/xml/xpath_syntax.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...