如何用Python提取XML文件中命名实体的起止位置?
Python提取XML中实体的内容及位置信息
首先注意你的示例XML里有个语法错误:</location 应该修正为 </location>,否则解析会报错。
下面是直接可用的代码,用Python标准库xml.etree.ElementTree实现,能循环提取person和location实体的内容、起始位置和结束位置:
import xml.etree.ElementTree as ET # 定义要提取的实体类型 target_tags = {'person', 'location'} entities = [] # 使用iterparse解析,跟踪start和end事件以获取位置 for event, elem in ET.iterparse('your_file.xml', events=('start', 'end')): if event == 'start' and elem.tag in target_tags: # 记录实体的起始行号和标签类型 entity_info = { 'tag': elem.tag, 'start_pos': elem.sourceline } elif event == 'end' and elem.tag in target_tags: # 补全实体的结束行号和内容 entity_info['end_pos'] = elem.sourceline entity_info['content'] = elem.text.strip() if elem.text else '' entities.append(entity_info) # 清理元素避免内存泄漏 elem.clear() # 循环打印提取到的实体信息 for idx, entity in enumerate(entities, 1): print(f"实体{idx}:") print(f"类型: {entity['tag']}") print(f"内容: {entity['content']}") print(f"起始行: {entity['start_pos']}") print(f"结束行: {entity['end_pos']}\n")
补充:获取字符级别的精确偏移量
如果需要精确到字符的起始/结束位置,而非行号,可以结合原文件内容处理:
import xml.etree.ElementTree as ET target_tags = {'person', 'location'} entities = [] # 先读取完整XML内容 with open('your_file.xml', 'r', encoding='utf-8') as f: xml_content = f.read() # 解析时跟踪字符偏移 parser = ET.XMLParser() for event, elem in ET.iterparse(parser, events=('start', 'end')): if event == 'start' and elem.tag in target_tags: # 获取起始字符偏移量 start_pos = parser.CurrentByteIndex entity_info = {'tag': elem.tag, 'start_pos': start_pos} elif event == 'end' and elem.tag in target_tags: end_pos = parser.CurrentByteIndex entity_info['end_pos'] = end_pos entity_info['content'] = elem.text.strip() if elem.text else '' entities.append(entity_info) elem.clear() # 打印字符偏移信息 for idx, entity in enumerate(entities, 1): print(f"实体{idx}:") print(f"类型: {entity['tag']}") print(f"内容: {entity['content']}") print(f"起始字符位置: {entity['start_pos']}") print(f"结束字符位置: {entity['end_pos']}\n")
注意事项
- 确保XML文件语法完全正确(闭合标签、引号匹配等),否则解析会直接报错。
- 如果XML包含命名空间,需要对
elem.tag做处理,比如用elem.tag.split('}')[-1]提取标签名后再匹配目标类型。
内容的提问来源于stack exchange,提问作者user18153710
相关产品推荐
相关产品推荐

