gpt4 book ai didi

Python Collections.counter 并从 JSON 中排除内容

转载 作者:太空宇宙 更新时间:2023-11-04 02:14:23 24 4
gpt4 key购买 nike

我想创建 Facebook 上“my”和“my gf”之间常用词的可视化。我直接从 JSON 文件中从 FB 下载了所有消息,我让计数器工作了

但是:

  • 计数器还计算来自 JSON 的元素名称,如“sender_name”或 13 数字的时间戳
  • JSON 文件缺少 UTF 编码 - 我有像 \u00c5\u0082a\u00c5 这样的字符串>, \u0082a硬编码成单词

我如何排除短而无意义的单词,例如“you, I, a, but”等?

对于第一个问题,我尝试创建一个要排除的单词词典,但我什至不知道如何排除它们。此外,问题在于删除时间戳数字,因为它们不是常量。

对于第二个问题,我尝试在文字编辑器中打开文件并替换符号代码,但由于文件的大小(超过 150 万行),每次都会崩溃。

这是我用来打印最常用词的代码:

import re
import collections
import json

file = open('message.json', encoding="utf8")
a = file.read()

words = re.findall(r'\w+', a)

most_common = collections.Counter(map(str.lower, words)).most_common(50)
print(most_common)

JSON 文件结构如下所示:

{
"sender_name": "xxxxxx",
"timestamp_ms": 1540327935616,
"content": "Podobaj\u00c4\u0085 ci si\u00c4\u0099",
"type": "Generic"
},

最佳答案

问题是你正在对整个文件使用 findall,做这样的事情:

import re
import collections
import json


def words(s):
return re.findall('\w+', s, re.UNICODE | re.IGNORECASE)

file = open('message.json', encoding="utf8")
data = json.load(file)

counts = collections.Counter((w.lower() for e in data for w in words(e.get('content', ''))))
most_common = counts.most_common(50)
print(most_common)

输出

[('siä', 1), ('ci', 1), ('podobajä', 1)]

输出是针对具有以下内容(JSON 对象列表)的文件:

[{
"sender_name": "xxxxxx",
"timestamp_ms": 1540327935616,
"content": "Podobaj\u00c4\u0085 ci si\u00c4\u0099",
"type": "Generic"
}]

解释

使用 json.load 将文件内容加载为字典 data 列表,然后遍历字典的元素并对 的单词进行计数>'content' 字段使用函数 wordsCounter

进一步

  1. 要删除诸如 I、a 和 but 之类的词,请参阅 this

更新

鉴于文件的格式,您需要更改行:data = json.load(file)data = json.load(file)["messages"],内容如下:

{
"participants":[],
"messages": [
{
"sender_name": "xxxxxx",
"timestamp_ms": 1540327935616,
"content": "Podobaj\u00c4\u0085 ci si\u00c4\u0099",
"type": "Generic"
},
{
"sender_name": "aaa",
"timestamp_ms": 1540329382942,
"content": "aaa",
"type": "Generic"
},
{
"sender_name": "aaa",
"timestamp_ms": 1540329262248,
"content": "aaa",
"type": "Generic"
}
]
}

输出是:

[('aaa', 2), ('siä', 1), ('podobajä', 1), ('ci', 1)]

关于Python Collections.counter 并从 JSON 中排除内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52971170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com