Python 创建多个与子节点同名的节点
我有一个文本文件,我使用python使用Python 创建多个与子节点同名的节点,python,xml,celementtree,Python,Xml,Celementtree,我有一个文本文件,我使用python使用xml.etree.cElementTree库解析它。 在输入中,我有一个段落,包含句子,每个句子都有单词,下面是它的文本文件: This is my first sentence. This is my second sentence. 在输出中,我希望有以下xml文件: 这 是 我的 第一 句子 . 这 是 我的 第二 句子 . 我编写了以下python代码,为我提供了段落标记和单词标记,我不知道如何实现多个标记的情况。句子以大写字母开头,以点
xml.etree.cElementTree
库解析它。
在输入中,我有一个段落
,包含句子
,每个句子都有单词
,下面是它的文本文件:
This
is
my
first
sentence.
This
is
my
second
sentence.
在输出中,我希望有以下xml文件:
这
是
我的
第一
句子
.
这
是
我的
第二
句子
.
我编写了以下python代码,为我提供了段落标记和单词标记,我不知道如何实现多个
标记的情况。句子以大写字母开头,以点结尾。
我的python代码:
source\u file=open(“file.txt”、“r”)
对于源_文件中的行:
#捕获池:。还有,还有!然后呢?和()
如果重新匹配(“(\(\)\。\,!”,str(line)):
ET.子元素(p,“pc”).文本=行
其他:
ET.子元素(p,“w”).文本=行
write(“my_file.xml”,encoding=“UTF-8”,xml_声明=True)
以下xml输出:
这
是
我的
第一
句子
.
这
是
我的
第二
句子
.
我面临的问题是,我无法为每个新句子创建一个新的
标记,有没有办法使用python的xml库来实现这一点?基本上,您需要一个逻辑来识别新句子。忽略明显的部分,下面这样做
import os
eos = False
s = ET.SubElement(p, 's')
for line in source_file:
line = str(line).rstrip(os.linesep) #to remove new line char at the end of each line
# catch ponctuation : . and , and ! and ? and ()
if re.match("(\(|\)|\.|\,|\!)", line): #don't think this matches 'sentence.', you will need to verify
ET.SubElement(s, "pc").text = line
eos = True
else:
if eos and line.strip() and line[0].isupper():
s = ET.SubElement(p, 's')
eos = False
ET.SubElement(s, "w").text = line
此外,您的正则表达式可能需要修复如何识别新句子?每一行都是一个新句子,还是每一个句点都是?您可以使用下面的内容,s=ET.Element('s'),然后w=ET.SubElement(s,'w')一个新句子定义为第一个单词,以大写字母开头,以包含(点)的
标记结尾。我试过你之前所说的,但是当我在每一行循环时,我怎么能在第二句话中使用之前创建的相同的s=ET.Element('s')
!谢天谢地,这就是我在拼图中遗漏的,我试着像你一样添加flag来控制句子的结尾,并以意大利面代码lol结束。在修改我的代码并应用你的实现后,效果非常好!再次感谢。