我正在使用 Python NLTK 标记一些 unicode 文本。 问题是文本来自编码错误的数据源,并且没有指定编码。经过一些困惑,我发现文本必须是 UTF-8 格式。 给定输入字符串:
s = u"The problem isn’t getting to Huancavelica from Huancayo to the north."
我想用 NLTK 处理它,例如 POS 标记,但特殊字符没有解析,我得到如下输出:
The/DT problem/NN isn’t/NN getting/VBG
代替:
The/DT problem/NN isn't/VBG getting/VBG
如何从这些特殊字符中清除文本?
感谢任何反馈,
乐龙
更新:如果我运行 HTMLParser().unescape(s)
,我得到:
u'The problem isn\u2019t getting to Huancavelica from Huancayo to the north.'
在其他情况下,我仍然会在文本中得到类似 &
和
的内容。
我需要做什么才能将其转化为 NLTK 能够理解的内容?
最佳答案
这不是字符/Unicode 编码问题。您的文本包含 XML/HTML numeric character reference实体,它们是标记。无论您使用什么库来解析文件,都应该提供一些函数来将 ’
取消引用到适当的字符。
如果您未绑定(bind)到任何库,请参阅 Decode HTML entities in Python string?
结果字符串包含一个特殊的撇号而不是 ascii 单引号。您可以在结果中替换它:
In [6]: s = u"isn’t"
In [7]: print HTMLParser.HTMLParser().unescape(s)
isn’t
In [8]: print HTMLParser.HTMLParser().unescape(s).replace(u'\u2019', "'")
isn't
Unescape 会处理其余的字符。例如 &
是 &
符号本身。
是一个 CR
符号(\r
),可以忽略或转换为换行符,具体取决于原始文本的位置来自(旧的 mac 将其用于换行符)
关于python - Python 中的另一个 unicode 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15947003/