python3.6:我可以使用(\\ u \ w \ w \ w \ w)从tweet json中删除所有unicode

时间:2017-10-21 04:07:16

标签: python json regex python-3.x unicode

我正在进行一些Twitter挖掘,并通过pandas将推文的json拉入python3

在进一步处理之前,我注意到很多数据不一致/干净甚至对我有用(现在) 所以我使用正则表达式使推文消息串一致或删除有问题的项目

以下是:

data['full_text'] = data['full_text'].replace('^@ABC(\\u2019s)*[ ,\n\t]*', '', regex=True)
data['full_text'] = data['full_text'].replace('(\\n)', '', regex=True)
data['full_text'] = data['full_text'].replace('(\\t)', '.', regex=True)
data['full_text'] = data['full_text'].replace('(\\u2018)|(\\u2019)', "'", 
regex=True)
data['full_text'] = data['full_text'].replace('(\\u201c)|(\\u201d)', "\"", regex=True)
data['full_text'] = data['full_text'].replace('(\\n)|(\\t)', '', regex=True)

即。 - 如果在开头使用,则删除Twitter句柄(包括链接到它的标点符号) - json应该没有撇号问题。保持一致性并用单个'替换左/右撇号的unicode。 - 有些推文有反斜杠引用,其他推文使用unicode。保持一致并用\"替换unicode - 删除所有标签 - 假设所有新行都是新句子,所以用fullstop替换它们

据我所知,这才是真正需要的。像〜这样的事情可能毫无用处,对他们没有任何实际意义。这些推文也会有我不关心的表情符号(现在)

标点符号的其余部分和这些表情符号遵循格式\ uXXXX 其中x是数字或字母

所以我的最后一行计划如下:

data['full_text'] = data['full_text'].replace('(\\u\w\w\w\w)', "", regex=True)

鉴于我有大量的推文,我无法验证一切是否正常,这就是为什么有人可以给出一些建议?

根据我的研究,我一直看到人们发布的内容如下:

([\u2600-\u27BF])|([\uD83C][\uDF00-\uDFFF])|([\uD83D][\uDC00-\uDE4F])|([\uD83D][\uDE80-\uDEFF]) 

但是当我尝试这些时,我仍然会在json中看到表情符号等。那么为什么不使用\ u \ w \ w \ w \ w ??? (特别是在最后使用时?)

============================================ ========================= 更新

data['full_text'] = data['full_text'].replace('^@ABC(\\u2019s)*[ ,\n\t]*', '', regex=True)
data['full_text'] = data['full_text'].replace('(\\n)', '', regex=True)
data['full_text'] = data['full_text'].replace('(\\t)', '.', regex=True)
data['full_text'] = data['full_text'].replace('(\\u2018)|(\\u2019)', "'", regex=True) 
data['full_text'] = data['full_text'].replace('(\\u201c)|(\\u201d)', "\"", regex=True)
data['full_text'] = data['full_text'].replace('https:\/\/t.co\/(\w{10})', "", regex=True)
import string
data['full_text'] = data['full_text'].replace('[^{}]'.format(string.printable), '', regex=True)

感谢James,尽管我收到了相互矛盾的信息。最后一行是否合适?是否只删除unicode以外的东西?

1 个答案:

答案 0 :(得分:2)

看起来你对unicode有误解。 Unicode是描述字符/ text / emoji / pictoglyphs / etc的标准。就是这样。例如,

  • 字符0041的unicode标准(因为unicode是十六进制的,第65个字符)是"拉丁字母大写字母A"。
  • 角色2600的unicode标准是"带有光线的黑色太阳"。

这就是它。 Unicode给出了字符应该是什么的描述。由特定的字体和编码决定是否在屏幕上显示字符以及它的外观。对于我的特定设置(Windows 10,终端中的Consolas字体),Consolas没有代表SKSpriteNode的字符,因此它只显示默认的'缺少'混乱的豆腐(中间带有问号的盒子)的特征。

那么这与你的问题有何关系?字符串'\u2600'不是5个字符,而是单个字符,由其unicode十六进制代码点表示。这就是为什么'\u2600'的正则表达式不起作用的原因,因为它寻找5个字符,但每个unicode字符只是一个字符。

您可以自己测试一下。

\u\w\w\w\w

如果你真的想删除所有非ascii字符,你可以过滤掉你不想要的文字。

len('\u2600')
# returns
1