Python 创建多个与子节点同名的节点

Python 创建多个与子节点同名的节点,python,xml,celementtree,Python,Xml,Celementtree,我有一个文本文件,我使用python使用xml.etree.cElementTree库解析它。 在输入中,我有一个段落,包含句子,每个句子都有单词,下面是它的文本文件: This is my first sentence. This is my second sentence. 在输出中,我希望有以下xml文件: 这 是 我的 第一 句子 . 这 是 我的 第二 句子 . 我编写了以下python代码,为我提供了段落标记和单词标记,我不知道如何实现多个标记的情况。句子以大写字母开头,以点

我有一个文本文件,我使用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结束。在修改我的代码并应用你的实现后,效果非常好!再次感谢。