在https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references处有一个XML和HTML字符引用列表。
然而,在该列表中根本没有定义的东西,但它们在较旧的HTML脚本中使用。当我处理来自http://www.d.umn.edu/~tpederse/data.html的Senseval-2 format (with fixes)
数据集时,我会遇到以下单词,它会破坏我的脚本,该脚本试图使用xml.et.elementTree
来解析数据。
这些词的unicode等价是什么?
&and.
&and.A
&and.B
&and.D
&and.L's
&backquote.alim)
&backquote.ulema
&dash
&dash.
&dash."
&dashq.
°ree.
°ree.C
&ellip
&ellip.
&ellip.0
&ellip.1
&ellip.11
&ellip.2
&ellip.23
&ellip.28
&ellip.38
&ellip.4
&ellip.6
&ellip.64
&ellip.?"
&ellip.two
×.
我的剧本:
import xml.etree.ElementTree as et
s1 = 'train-fix.xml' # from http://www.d.umn.edu/~tpederse/Data/Sval1to2.fix.tar.gz
tree = et.parse(s1)
root = tree.getroot()
给出了这个追溯:
Traceback (most recent call last):
File "senseval.py", line 4, in <module>
tree = et.parse(s1)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1182, in parse
tree.parse(source, parser)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 656, in parse
parser.feed(data)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1642, in feed
self._raiseerror(v)
File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1506, in _raiseerror
raise err
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 41, column 113
答案 0 :(得分:4)
“单词”看起来像格式错误entity references。有效的实体引用末尾有分号。我查看了 test-fix.xml (在Sval1to2.fix.tar.gz中),&dash
(或&dash.
)很可能代表某种形式短划线或连字符。该文件具有.xml
扩展名,如果修复了错误的实体引用,它将非常接近格式良好的XML。
在您链接到(http://www.d.umn.edu/~tpederse/data.html)的页面上,它显示:
请注意,我们转换的数据不会“解析”为真正的xml文本。这是因为在原始的有意义标记的文本中,需要在xml中进行特殊处理的字符不会被转义,等等。我们正在考虑如何使这些数据成为“真正的”xml,并且非常感谢有关如何做到这一点的任何反馈。
因此,即使该文档看起来非常像XML,但它不是XML,发布它的人也非常清楚这一点。
答案 1 :(得分:3)
我发现这个答案可以使用Python lxml包解析你的xml:
Fetching data using Python & lxml
从此处安装lxml软件包:http://lxml.de/
并使用此代码:
import lxml.html
root = lxml.html.parse('train-fix.xml').getroot()
希望它对你有用
答案 2 :(得分:3)
基本但令人失望的答案是:它们是拼写错误(使用.
代替;
)。
以下是其中大部分内容:
......依此类推,你必须看看其中一些内容的背景,判断原文作者是否意味着某些特定内容,或者只是更糟糕的错误(dashq‽)。
最合适的做法是在解析之前使用简单的字符串replace
方法调用链来修复混乱。
答案 3 :(得分:2)
如果您有Linux可用,请使用xmllint查找错误并修复它们
xmllint --recover ~/tmp/test-fix.xml --output ~/tmp/test-fix-fixed.xml
/home/luis/tmp/test-fix.xml:179: parser error : EntityRef: expecting ';'
inate, Hesse and the Saarland; North Rhine-Westphalia, Baden-Wu¨aut.rttemberg
^
/home/luis/tmp/test-fix.xml:179: parser error : EntityRef: expecting ';'
Bavaria would remain untouched, and the planned five East German La¨aut.nder
...
/home/luis/tmp/test-fix.xml:3832: parser error : EntityRef: expecting ';'
Charlie Watts today) we should be ready to hit the road together as Lyndon &and.
^
/home/luis/tmp/test-fix.xml:3841: parser error : Opening and ending tag mismatch: corpus line 1 and lexelt
</lexelt>
^
/home/luis/tmp/test-fix.xml:3842: parser error : Extra content at the end of the document
<lexelt item="behaviour-n">
^