我使用Twitter API下载了一堆西班牙语推文,但其中一些推文中有一些我不想要的奇怪的ANSI字符。我有大约18000个文件,我想删除这些字符。我将所有文件编码为UTF-8。 例如:
b'Me quedo con una frase de nuestra reuni\xc3\xb3n de hoy.'
如果他们是重音字符(我们有很多西班牙语)我想删除重音字母并将其替换为非重音字母。那是因为在那之后我正在做一些文本挖掘分析,我想统一这些词,因为可能有人不使用重音。
我认为b
意味着处于字节模式。
如果我在python中放入以下内容,那么
print(u'Me quedo con una frase de nuestra reuni\xc3\xb3n de hoy con @Colegas')
我在终端上得到了这个:
Me quedo con una frase de nuestra reunión de hoy con @Colegas
我不喜欢,因为它不是西班牙语中使用过的口音。应该有角色ó。我不明白为什么也不是正确的。
我也希望文件开头的b
消失。
要对文件进行编码,我使用了以下内容:
f.write(str(FILE.encode('utf-8','strict')))
我从UTF-8中的一些json创建我的文件,其中包含每个推文的很多键。也许我应该改变它,或者我在那里做错了。
在某些情况下,尝试获取python终端中的字符时也存在问题。例如:
print(u'\uD83D\uDC1F')
我认为那是因为python不能代表那些字符(上例中的 )。是这样吗?我也想删除它们。
很抱歉,如果有一些英语错误,请随时询问是否有不明确的事情。
提前致谢。
编辑:我正在使用Python 3.4
答案 0 :(得分:1)
你正在搅拌苹果和橘子。 b'reuni\xc3\xb3n'
是u'reuni\u00f3n'
的UTF-8编码,当然是人类可读格式的reunión。
>>> print b'reuni\xc3\xb3n'.decode('utf-8')
reunión
>>> repr(b'reuni\xc3\xb3n'.decode('utf-8'))
"u'reuni\\xf3n'"
这里没有“ANSI”(无论如何它都是用词不当;通常它用于指代Windows字符编码,但不一定是你期望的那种)。
至于如何从重音字符中删除重音,短版本是规范化为Unicode“NFD”表示,然后丢弃任何具有“变音符号”分类的代码点。这包括例如在What is the best way to remove accents in a Python unicode string?;为了使这个答案自成一体,这里是这个问题的一个答案的要点 - 但是要阅读所有这些答案,如果只是为了决定最适合你的用例。
import unicodedata
stripped = u"".join([c for c in unicodedata.normalize('NFKD', input_str)
if not unicodedata.combining(c)])
答案 1 :(得分:1)
在Python 3中处理传入文本的模式之一(以bytes
的形式)是在收到时立即解码它们。
所以你从twitter获得;
In [1]: tweetbytes = b'Me quedo con una frase de nuestra reuni\xc3\xb3n de hoy.'
你做;
In [2]: tweet = tweetbytes.decode('utf-8')
记住首字母缩略词BADTIE;字节被解码,文本被编码。
现在是文字;
In [3]: type(tweet)
Out[3]: str
你可以这样使用它;
In [4]: print(tweet)
Me quedo con una frase de nuestra reunión de hoy.
答案 2 :(得分:-2)
首先:您需要100%确定这些字符在twitter中编码的语言。如果您确定它是ANSI(通常是西班牙语编码语言将是Latin-1),那么您从twitter获得的所有内容都需要使用此功能
struct stekas *top = NULL;
<。> .encode('ANSI')将告诉python您从外部获取的所有内容都是用ANSI编写的,他应该用Unicode转换它。
然后,每当你想在你的程序的任何部分重新使用myStr时(特别是如果你想在某个地方写它),你必须使用decode函数。在你的情况下将是:
a = getStufFromTwitter() #you parse twitter
myStr = a.encode('Latin-1')
这应该有效。但是,如果我们能够看到很多代码,那么帮助您会更容易。你在Python中有一些非常恶劣的规范(你使用的是Python 2.7吗?如果是的话,请在每个脚本的开头添加以下内容:
with open('myfile.txt','w') as f:
f.write(myStr.decode('UTF-8'))
再一次,它是python的一个非常棘手的部分。