1

我正在用 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 可以理解的内容?

4

1 回答 1

4

这不是字符/Unicode 编码问题。您拥有的文本包含 XML/HTML数字字符引用实体,它们是标记。无论您使用什么库来解析文件,都应该提供一些函数来取消’对适当字符的引用。

如果您未绑定到任何库,请参阅在 Python 字符串中解码 HTML 实体?

结果字符串包含一个特殊的撇号而不是一个 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 将其用于换行符)

于 2013-04-11T11:55:31.713 回答