问题描述
我有一个包含 XML 文件的文件夹,我正在尝试计算一个元素中特定单词的出现次数。更具体地说,我想计算文件夹中所有 XML 中的 ,例如,单词“Impfstoff”(在元素“mpeg7text:Keyword”中)的出现次数。 XML 如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<Description xsi:type="ContentEntityType">
-<MultimediaContent xsi:type="mpeg7text:TextType">
-<mpeg7text:Text>
-<mpeg7text:ModelMetadata>
<mpeg7text:Version>tfidf_newmodel</mpeg7text:Version>
</mpeg7text:ModelMetadata>
-<mpeg7text:TextDescriptor xsi:type="mpeg7text:KeywordExtractionType">
-<mpeg7text:Keyword>
<mpeg7text:Keyword>Impfstoff</mpeg7text:Keyword>
<mpeg7text:Relevance>121.58288081128799</mpeg7text:Relevance>
<mpeg7text:Frequency>22</mpeg7text:Frequency>
<mpeg7text:Confidence>1.0</mpeg7text:Confidence>
</mpeg7text:Keyword>
我到目前为止的代码是:
import os
import lxml.etree as et
for filename in os.listdir(path):
if not filename.endswith('.xml'): continue
if filename.endswith('.xml'):
fullname = os.path.join(path,filename)
root = et.parse(fullname)
root.xpath('count(.//mpeg7text:Keyword/mpeg7text:Keyword[.=Corona])')
但我收到此错误:
XPathEvalError Traceback (most recent call last)
<ipython-input-11-0ca6983bfdd7> in <module>
7 #root = tree.getroot(tree)
8 root = et.parse(fullname)
----> 9 root.xpath('count(.//mpeg7text:Keyword/mpeg7text:Keyword[.=Corona])')
src/lxml/etree.pyx in lxml.etree._ElementTree.xpath()
src/lxml/xpath.pxi in lxml.etree.XPathDocumentEvaluator.__call__()
src/lxml/xpath.pxi in lxml.etree._XPathEvaluatorBase._handle_result()
XPathEvalError: Undefined namespace prefix
我有点迷失了现在要怎么做才能计算元素 mpeg7text:Keyword 中的单词 有没有人以前做过这样的事情并且可以在这里提供帮助?那太棒了!
干杯!
解决方法
要在 Python 中使用命名空间,请参阅 this answer
作为替代 XPath,您可以使用:
root.xpath("count(.//*[local-name()='Keyword']/*[local-name()='Keyword'][text()='Corona'])")
查看“Corona”周围引号的使用。
但是由于您已经使用了 //
并因此找到了所有 Keyword 元素,您也可以使用:
root.xpath("count(.//*[local-name()='Keyword'][text()='Corona'])")
,
如果您切换到 XPath 2.0+(使用 Saxon/C 库在 Python 中可用),那么您可以使用单个 XPath 表达式搜索整个目录:
count(collection('my/folder?select=*.xml')//*:Keyword[.='Impfstoff'])