使用 lxml 通过 unicode 编码检索标签和子标签类别

Using lxml to retrieve both tag and subtag categories with unicode encoding

我正在尝试使用 Collections.counter 和 lxml 来计算 xml 文件中的所有名词和形容词,其中名词和形容词标签的写法如下:

<word id="2" start="7400" end="7411" tag="NN">Ministerien</word>

其中tag="NN"表示一个名词。我只想拉出这些,并将它们添加到计数器中,但我很难这样做。我目前可以提取所有单词并对其进行计数,但无法在 lxml 中找到仅采用某些子标签的方法。

这是当前的相关代码。

context = etree.iterparse(xmlFile)
counter = collections.Counter()
for action, elem in context:
    if elem.tag == "word":
      counter[elem.text] += 1
print counter.most_common(10)

elem.attrib returns key:value 对的字典,其中键是那个 xml 元素的 properties/attributes 和值是那个的值特定属性。

您可以使用它来检查属性 tag's 是名词还是形容词。

例子-

context = etree.iterparse(xmlFile)
counter = collections.Counter()
for action, elem in context:
    if elem.tag == "word" and (elem.attrib.get('tag') in ['NN','AD']): #AD I just used for adjective, use whatever is correct.
      counter[elem.text] += 1
print counter.most_common(10)

Example/Demo -

我有一个 xml 文件,如 -

<root>
<word id="2" start="7400" end="7411" tag="NN">Ministerien1</word>
<word id="2" start="7400" end="7411" tag="AD">Ministerien5</word>
<word id="2" start="7400" end="7411" tag="NN">Ministerien2</word>
<word id="2" start="7400" end="7411" tag="NN">Ministerien1</word>
<word id="2" start="7400" end="7411" tag="AD">Ministerien4</word>
<word id="2" start="7400" end="7411" tag="AD">Ministerien4</word>
<word id="2" start="7400" end="7411" tag="HF">Ministerien6</word>
<word id="2" start="7400" end="7411" tag="AD">Ministerien4</word>
<word id="2" start="7400" end="7411" tag="NN">Ministerien2</word>
<word id="2" start="7400" end="7411" tag="NN">Ministerien3</word>
</root>

代码-

In [18]: context = etree.iterparse('a.xml')

In [19]: counter = Counter()

In [20]: for action, elem in context:
   ....:     if elem.tag == "word" and (elem.attrib.get('tag') in ['NN','AD']):
   ....:         counter[elem.text] += 1

In [21]: counter
Out[21]: Counter({'Ministerien4': 3, 'Ministerien2': 2, 'Ministerien1': 2, 'Ministerien3': 1, 'Ministerien5': 1})