以下のXMLから人名を抽出する必要があります。私は以下のコードを使用して、出力を得ました(ORIGINAL)。しかし、私は欠けているアイテムも欲しいです。PythonでBeautiful Soupを使って欠けているサブタグを追加する
第4人のミドルネームは見つからないので、抽出されるのは3つの名前だけです。
サンプルXML:
<author>
<persName>
<forename>Esayas</forename>
<middlename>K</middlename>
<surname>Gudina</surname>
<lb/>
<marker>1*</marker>,
</persName>
<persName>
<forename>Solomon</forename>
<middlename>T</middlename>
<surname>Amade</surname>
<lb/>
<marker>2</marker> ,
</persName>
<persName>
<forename>Fessahaye</forename>
<middlename>A</middlename>
<surname>Tesfamichael</surname>
<lb/>
<marker>3</marker> and
</persName>
<persName>
<forename>Rana</forename>
<surname>Ram</surname>
<lb/>
<marker>4</marker>
</persName>
</author>
コード:
from bs4 import BeautifulSoup as bs
import codecs
name = []
with codecs.open("D:/...../2F1472-6823-11-19.authors.tei.xml", "r", "utf-8") as infile:
soup = bs(infile, "html5lib")
pn = soup.find_all('persname')
for i in pn:
try:
if len((i.find('forename')).text) != 0:
fn = (i.find('forename')).text
else:
fn =""
if len((i.find('middlename')).text) != 0:
mn = (i.find('middlename')).text
else:
mn=""
if len((i.find('surname')).text) != 0:
sn = (i.find('surname')).text
else:
sn =""
name.append(fn+" "+mn+" "+sn)
except:
print ("")
出力:
INDEX TYPE SIZE VALUE
0 unicode 1 Esayas K Gudina
1 unicode 1 Solomon T Amade
2 unicode 1 Fessahaye A Tesfamichael
予想される出力:
INDEX TYPE SIZE VALUE
0 unicode 1 Esayas K Gudina
1 unicode 1 Solomon T Amade
2 unicode 1 Fessahaye A Tesfamichael
3 unicode 1 Rana Ram
唯一のミドルネームが見つかった場合は、結果を捨てるだろうか?タグが間違っていて、それが実際にファーストネームだったと思いますか?姓がついていたら?それぞれの可能な場合に何をしたいのかを決定し、コード内でそれを考慮する必要があるようです。 – Aaron