def parse_xml(f):
tree = ET.parse(f)
root = tree.getroot()
annotation = Annotation()
# Parse entities
for composite_entity_elem in root.findall('.//composite_entity'):
for entity_elem in composite_entity_elem.findall('entity'):
entity_id = entity_elem.get('ID')
entity_type = entity_elem.get('TYPE')
for mention_elem in entity_elem.findall('entity_mention'):
mention_id = mention_elem.get('ID')
name = mention_elem.find('./extent/charseq').text
annotation.add_entity(mention_id, name, entity_type)
# Parse relations (if any)
for relation_elem in root.findall('.//relation'):
relation_type_elem = relation_elem.find('type')
if relation_type_elem is None:
print(f"Warning: relation element missing 'type': {ET.tostring(relation_elem, encoding='unicode')}")
continue
relation_type = relation_type_elem.text
directed = relation_elem.get('DIRECTED') == 'true'
entity1_id_elem = relation_elem.find('arg1/entity')
entity2_id_elem = relation_elem.find('arg2/entity')
if entity1_id_elem is None or entity2_id_elem is None:
print(f"Warning: relation element missing 'arg1/entity' or 'arg2/entity': {ET.tostring(relation_elem, encoding='unicode')}")
continue
entity1_id = entity1_id_elem.get('ID')
entity2_id = entity2_id_elem.get('ID')
entity1 = next((e for e in annotation.entities if e.id == entity1_id), None)
entity2 = next((e for e in annotation.entities if e.id == entity2_id), None)
if entity1 and entity2:
annotation.add_relation(entity1, entity2, relation_type, directed)
# Parse events (if any)
for event_elem in root.findall('.//event'):
trigger_elem = event_elem.find('trigger')
if trigger_elem is None:
print(f"Warning: event element missing 'trigger': {ET.tostring(event_elem, encoding='unicode')}")
continue
trigger_id = trigger_elem.get('ID')
trigger_value = trigger_elem.find('value')
trigger_type = trigger_elem.find('type')
if trigger_value is None or trigger_type is None:
print(f"Warning: trigger element missing 'value' or 'type': {ET.tostring(trigger_elem, encoding='unicode')}")
continue
trigger = annotation.add_entity(trigger_id, trigger_value.text, trigger_type.text)
event_type_elem = event_elem.find('type')
if event_type_elem is None:
print(f"Warning: event element missing 'type': {ET.tostring(event_elem, encoding='unicode')}")
continue
event_type = event_type_elem.text
event = annotation.add_event(trigger, event_type)
for argument_elem in event_elem.findall('argument'):
role = argument_elem.get('ROLE')
argument_id = argument_elem.get('ENTITY')
argument = next((e for e in annotation.entities if e.id == argument_id), None)
if argument:
annotation.add_event_argument(event, role, argument)
return annotation
после отладки на моем терминале я заметил, что он не распознаетlation_type_elem и что его значение равно None. Я не проверял события, но я почти уверен, что это та же самая проблема. Я закончу это, приведя фрагмент связи в моем XML-файле:
Я работаю над проектом по языковой обработке, моя задача сейчас — проанализировать XML-файл, чтобы вернуть аннотацию. я начну с annotation.py: [code]import xml.etree.ElementTree as ET import json """ Classe entité défini par un nom et par un type d'entité tout deux en chaine de caracteres """
class Entity: def __init__(self, entity_id, name, entity_type): self.id = entity_id self.name = name self.type = entity_type
class Annotation: def __init__(self): self.phrase="Six Palestinians and an Israeli border policeman were involved in an incident, as reported by Palestinian security officials." self.entities = [] self.relations = [] self.events = []
def add_event(self, trigger, event_type): event = Event(trigger, event_type) self.events.append(event) return event [/code] Теперь мне нужно написать parse_xml, я это сделал, но здесь не распознаются отношения и события: [code]def parse_xml(f): tree = ET.parse(f) root = tree.getroot() annotation = Annotation()
# Parse entities for composite_entity_elem in root.findall('.//composite_entity'): for entity_elem in composite_entity_elem.findall('entity'): entity_id = entity_elem.get('ID') entity_type = entity_elem.get('TYPE') for mention_elem in entity_elem.findall('entity_mention'): mention_id = mention_elem.get('ID') name = mention_elem.find('./extent/charseq').text annotation.add_entity(mention_id, name, entity_type)
# Parse relations (if any) for relation_elem in root.findall('.//relation'): relation_type_elem = relation_elem.find('type') if relation_type_elem is None: print(f"Warning: relation element missing 'type': {ET.tostring(relation_elem, encoding='unicode')}") continue relation_type = relation_type_elem.text directed = relation_elem.get('DIRECTED') == 'true' entity1_id_elem = relation_elem.find('arg1/entity') entity2_id_elem = relation_elem.find('arg2/entity') if entity1_id_elem is None or entity2_id_elem is None: print(f"Warning: relation element missing 'arg1/entity' or 'arg2/entity': {ET.tostring(relation_elem, encoding='unicode')}") continue entity1_id = entity1_id_elem.get('ID') entity2_id = entity2_id_elem.get('ID') entity1 = next((e for e in annotation.entities if e.id == entity1_id), None) entity2 = next((e for e in annotation.entities if e.id == entity2_id), None) if entity1 and entity2: annotation.add_relation(entity1, entity2, relation_type, directed)
# Parse events (if any) for event_elem in root.findall('.//event'): trigger_elem = event_elem.find('trigger') if trigger_elem is None: print(f"Warning: event element missing 'trigger': {ET.tostring(event_elem, encoding='unicode')}") continue trigger_id = trigger_elem.get('ID') trigger_value = trigger_elem.find('value') trigger_type = trigger_elem.find('type') if trigger_value is None or trigger_type is None: print(f"Warning: trigger element missing 'value' or 'type': {ET.tostring(trigger_elem, encoding='unicode')}") continue trigger = annotation.add_entity(trigger_id, trigger_value.text, trigger_type.text) event_type_elem = event_elem.find('type') if event_type_elem is None: print(f"Warning: event element missing 'type': {ET.tostring(event_elem, encoding='unicode')}") continue event_type = event_type_elem.text event = annotation.add_event(trigger, event_type) for argument_elem in event_elem.findall('argument'): role = argument_elem.get('ROLE') argument_id = argument_elem.get('ENTITY') argument = next((e for e in annotation.entities if e.id == argument_id), None) if argument: annotation.add_event_argument(event, role, argument)
return annotation [/code] после отладки на моем терминале я заметил, что он не распознаетlation_type_elem и что его значение равно None. Я не проверял события, но я почти уверен, что это та же самая проблема. Я закончу это, приведя фрагмент связи в моем XML-файле: [code]
Я пытаюсь декодировать этот JSON под названием Menu.json
[
{
day : Monday ,
locationName : Memorial Union Quad ,
coordinate : ,
menu : {
Penne Pasta w/ Bolognese : ,
Penne Pasta w/ Roasted Mushrooms :
}
},
{
day : Tuesday ,
locationName :...
Я пытаюсь декодировать этот JSON под названием Menu.json
[
{
day : Monday ,
locationName : Memorial Union Quad ,
coordinate : ,
menu : {
Penne Pasta w/ Bolognese : ,
Penne Pasta w/ Roasted Mushrooms :
}
},
{
day : Tuesday ,
locationName :...
Мне приходится анализировать XML-данные объемом от десяти до ста ТБ (да, я знаю). Вы можете представить каждый XML-документ как набор записей, и цель состоит в том, чтобы выбрать небольшое подмножество полей из каждой записи.
Я использовал функцию...
Этот код Python обработал некоторые данные XML, как показано в комментарии
# 26Alexi Delano27Cari Lekebusch
def element_members(self, element):
for id, name in grouper( , 2):
yield int(id), name.strip()
Я использую Firefox v123.0.1 (64-разрядная версия) для локального просмотра index.html for a static web page that I am developing, and I want to dynamically load the contents of another HTML file into a . My goal with having several HTML files is to...