【发布时间】:2018-03-30 23:03:08
【问题描述】:
我有一个 json 文件,里面装满了用户 cmets(来自网络抓取),我用 pandas 将其拉入了 python
import pandas as pd
data = pd.DataFrame(pd.read_json(filename, orient=columnName,encoding="utf-8"),columns=columnName)
data['full_text'] = data['full_text'].replace('^@ABC(\\u2019s)*[ ,\n]*', '', regex=True)
data['full_text'] = data['full_text'].replace('(\\u2019)', "'", regex=True)
data.to_json('new_abc_short.json',orient='records')
这些消息与在线的相应消息不完全匹配。 (表情符号显示为 \u0234 或其他内容,撇号为 \u2019,链接中的正斜杠,引号有反斜杠。
我想清理它们,所以我学习了一些正则表达式,所以我可以拉入 python,清理它们,然后以不同的名称将它们重新保存回 json(现在)(https://docs.python.org/3/howto/regex.html)
第二行有助于删除 twitter 句柄(如果它只存在于开头),然后删除 's 如果它被使用(例如 @ABC's )。如果开头没有 twitter 句柄(可能在消息中间使用),则保留该句柄。然后它会删除所有留下的空格和逗号(同样仅在字符串的开头) 例如“@ABC,你好”变成“你好”。 “嗨@ABC”保持不变。 “@ABC 的推特很大”会变成“推特很大”
第三行有助于替换所有无法显示的撇号(例如,don\u2019t 变回 don't)
我有数千条记录(并非所有记录都存在撇号、引号、链接等问题),根据我看过的非常小的示例,它们似乎有效
但我的第三个不起作用:
data['full_text'] = data['full_text'].replace('\\"', '"', regex=True)
json 中的示例消息:"full_text":"@ABC 你怎么能\"意外关闭\"我的帐户"
我想删除双引号旁边的 \,使它看起来像真正的消息(我假设它是用户显然没有输入的转义字符)
但无论我做什么,我都无法删除它
从我的正则表达式学习中,“不是元字符。所以反斜杠甚至不应该存在。但无论如何,我已经尝试过:
\\" (which i think should be the obvious one, i have \", no special quirk in " but there is in \ so i need another back slash to escape that)
\\\\" (some forums posts online mention needing 4 slashes
\\\" ( i think someone mention in the forum posts that they got it workin with 3)
\\\(\") (i know that brackets provide groupings so i tried different combinations)
(\\\\")
上面的所有表达式我都用单引号括起来,但它们不起作用。我想也许双引号是问题,因为我只有一个,所以我用单引号 x3 替换了单引号
'''\\"'''
但以上都不适用于三单引号
我一直在重新检查新保存的 json 并且一直看到:
"full_text":"你怎么能\"不小心关闭\"我的账户" (即用空格删除@ABC,但不是反斜杠位)
最初,我尝试研究转换这些 unicode 问题,即使用 encoding="utf-8") 虽然我在这方面的经验有限并且一直失败,所以正则表达式是我最好的选择
【问题讨论】:
-
这样做几乎可以肯定是错误的方法。更好的是找到额外级别的转义,并使用相同的工具来取消转义字符串。
-
@DanielH 如果你所说的工具是指什么提供了数据然后保存到 json 中,那么那将是通过抓取 Twitter 吗?所以我想我真的不能从 Twitter 方面做任何事情?
-
等等...当你说
print(data['full_text'])时你会得到什么?
标签: python json regex python-3.x pandas