Python中的另一个unicode混乱
我正在用Python NLTK标记一些unicode文本。 问题是文本来自编码错误的数据源,并且没有指定编码。经过一些混乱,我发现文本必须是UTF-8格式。 给定输入字符串: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
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’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',“”)