【发布时间】:2020-10-29 10:25:45
【问题描述】:
我正在尝试从 XML 字典中提取具有特定属性的单词。例如,所有动词,由 Lemma 下的 Type 表示。然后我将根据定义或 Inflection 细分这些条目。但现在,我只需要探索 Beautifulsoup 对象。 我对 XML 很陌生。这是字典中的第一个条目。我将其关闭以使其成为有效的 XML(我希望如此)。 我正在尝试按照教程here
<?xml version='1.0' encoding='utf-8'?>
<Dictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="lexinAA.xsd">
<Article ArticleID="1000002" Sortkey="a">
<Lemma ID="1000002" LemmaID="1" Rank="350" Type="subst." Value="a" Variant="" VariantID="3, 4">
<Phonetic File="v2/100021_1.mp3">a:</Phonetic>
<Inflection Form="best.f.sing.">a:et</Inflection>
<Inflection Form="obest.f.pl.">a:n</Inflection>
<Inflection Form="best.f.pl.">a:na</Inflection>
<Index Value="a" />
<Index Value="a:et" />
<Index Value="a:n" />
<Index Value="a:na" />
<Index Value="as" />
<Index Value="a:ets" />
<Index Value="a:ns" />
<Index Value="a:nas" />
<Lexeme ID="1" LexemeID="1000006" Lexemeno="1" VariantID="3">
<Definition ID="9011000">första bokstaven i alfabetet</Definition>
<Idiom DoubleID="2060026" ID="1000008" OldID="2">a och o
<Definition DoubleID="2030380" ID="1000009">det viktigaste</Definition>
</Idiom>
<Idiom DoubleID="2060590" ID="1000010" OldID="1">har man sagt a får man också säga b
<Definition DoubleID="2030824" ID="1000011">har man börjat får man fortsätta</Definition>
</Idiom>
</Lexeme>
<Lexeme ID="2" LexemeID="1000013" Lexemeno="2" VariantID="4">
<Definition ID="9011001">sjätte tonen i C-durskalan</Definition>
<Compound ID="2000667" OldID="">a-moll</Compound>
<Compound ID="2000668" OldID="">A-dur</Compound>
<Index Value="a-moll" />
<Index Value="a-molls" />
<Index Value="a moll" />
<Index Value="a molls" />
<Index Value="A-dur" />
<Index Value="A-durs" />
<Index Value="A dur" />
<Index Value="A durs" />
</Lexeme>
</Lemma>
</Article>
</Dictionary>
这是我的 Beautifulsoup 代码
from bs4 import BeautifulSoup as bs
content = []
with open('swe_swe.xml', 'r') as file:
content = file.readlines()
content = "".join(content)
bs_content = bs(content, 'lxml')
result = bs_content.find('Article')
print(result)
print(bs_content.find('Inflection Form="best.f.sing.">a:et'))
两次打印的结果都是无。
我对“文章”标签的期望是第一个单词“a”的整个第一个条目,或者只是一行:
ArticleID="1000002" Sortkey="a">
字典中的标签看起来与教程中的完全不同,所以我觉得我遗漏了一些明显的东西。
【问题讨论】:
-
您能否编辑您的问题并在代码中添加您期望的两个
print()语句的确切输出(或任何其他预期输出)?另外,既然你要导入 lxml,你能用它代替 BS 吗? -
@JackFleeting 我进行了更改,但由于 BS 无论如何都会导入 lxml,我只是删除了 lxml。我仍然想使用 BeautifulSoup,因为我在之前的尝试中发现 lxml 很棘手。
标签: python-3.x xml beautifulsoup