Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的另一个unicode混乱_Python_Xml_Escaping_Special Characters_Nltk - Fatal编程技术网

Python中的另一个unicode混乱

Python中的另一个unicode混乱,python,xml,escaping,special-characters,nltk,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处理它,例如词性标记,但是特殊字符没有解析,我得到如下输出: The/DT problem/NN isn’t/N

我正在用Python NLTK标记一些unicode文本。 问题是文本来自编码错误的数据源,并且没有指定编码。经过一些混乱,我发现文本必须是UTF-8格式。 给定输入字符串:

 s = u"The problem isn’t getting to Huancavelica from Huancayo to the north."
我想用NLTK处理它,例如词性标记,但是特殊字符没有解析,我得到如下输出:

The/DT problem/NN isn’t/NN getting/VBG
而不是:

The/DT problem/NN isn't/VBG getting/VBG
如何从这些特殊字符中清除文本

谢谢你的反馈

穆隆

更新:如果我运行
HTMLParser().unescape
,我会得到:

 u'The problem isn\u2019t getting to Huancavelica from Huancayo to the north.'
在其他情况下,我仍然会得到类似
&

在文本中。

我需要做什么才能将其转换为NLTK能够理解的内容?

这不是字符/Unicode编码问题。您拥有的文本包含XML/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将其用于换行符)

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

如果您未绑定到任何库,请参阅

结果字符串包含一个特殊的撇号,而不是ascii单引号。您可以在结果中替换它:

In [6]: s = u"isn&#8217;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将其用于换行符)

不,您的示例输入文本完全由您的代码转换为Unicode。我没有看到任何
和#向左转义。您的示例文本是您的方法返回的吗?实际上,我正在将该文本存储在一个文件中,写入一个XML文件,然后再次读取,所有这些都使用lxml。请尝试类似于
txt=lec.decode('utf8')。encode('latin9')
decode/encode的操作。输出字符串是相同的。我从根本上简化了这个问题。不,您的示例输入文本完全由您的代码转换为Unicode。我没有看到任何
和#向左转义。您的示例文本是您的方法返回的吗?实际上,我正在将该文本存储在一个文件中,写入一个XML文件,然后再次读取,所有这些都使用lxml。请尝试类似于
txt=lec.decode('utf8')。encode('latin9')
decode/encode的操作。输出字符串是相同的。我从根本上简化了这个问题。如果我使用
HTMLParser().unescape
,我会得到:
u'问题是\u2019不能从Huancayo到北部的Huancavelica。
这很好-这正是文本的内容。如果您打印它而不是在REPL中显示变量,您将看到“is not”。这不是典型的ascii撇号,但如果需要,您可以将其替换为一个。检查
print-HTMLParser.HTMLParser().unescape
-vs-
print-HTMLParser.HTMLParser().unescape(),我得到:
u'问题是\u2019不能从万卡约到北方的万卡韦利卡。
这很好-这正是文本的内容。如果您打印它而不是在REPL中显示变量,您将看到“is not”。这不是典型的ascii撇号,但如果需要,可以将其替换为一个。检查
print HTMLParser.HTMLParser().unescape
-vs-
print HTMLParser.HTMLParser().unescape(s)。替换(u'\u2019',“”)