python - Python 中的另一个 unicode 困惑

标签 python xml escaping special-characters nltk

我正在使用 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/

相关文章:

java - extra\in json 响应之前/在 java、android 中

Python unicode-转义 : use only\uNNNN codes, no\xNN

python - 合并两个数据帧并分别添加 resp 列

android - 无法启动 Activity Java RunTime 异常

python - 'BeautifulSoup' 和 'lxml' 之间有什么关系?

xml - 如何在巨大的 XML 文件中进行命令行 XPath 查询?

java - 从Android Studio中的 fragment 调用方法时如何避免空指针异常?

java - 正则表达式:Eclipse 中的转义模式,与之前的单词不匹配

python - torch 中的 w -= dw 与 w = w - dw

python - 限制 Atom 中的行长度