Я использую BeautifulSoup для исправления некоторых xml. Данные представляют собой набор предложений со структурой: <sentence><word id="1" form="hello"/><word id="2" form="goodbye"/></sentence>
Проблема в том, что токенизация (не находящаяся под моим контролем) пропустила некоторую пунктуацию, и у меня есть несколько слов с формой «привет-до свидания», которые мне нужно разделить и в то же время переделать идентификаторы для всего предложения. Я неправильно понимаю что-то о том, как команда append работает в циклах или вообще о циклах, так как я всегда получаю второй элемент в split, добавляемый дважды, и теряю первый. Проблема указана в комментариях в коде ниже:
from bs4 import BeautifulSoup
oldsents = BeautifulSoup(open('treebank.xml', 'r'))
newsp = BeautifulSoup()
sents = oldsents.find_all('sentence')
for sent in sents:
sattrs=sent.attrs
nusent=newsp.new_tag('sentence')
nusent.attrs=sattrs
i=0 #for ids
words=sent.find_all('word')
for word in words:
allattrs = word.attrs
news=word['form'].split("-")
for newwd in news:
nuword=newsp.new_tag('word')
nuword.attrs=allattrs
nuword['id']=str(i)
nuword['form']=newwd
print(nuword) #this works: prints each desired element
nusent.append(nuword) #this doesn't work: appends the second element twice
i=i+1
newsp.append(nusent)
print(newsp)