JSON Файл: Отдельное количество слов для различных объектов с Python - PullRequest
0 голосов
/ 04 мая 2020

Для текущего исследовательского проекта я планирую подсчитать уникальные слова разных объектов в файле JSON. В идеале выходной файл должен содержать отдельные сводки по количеству слов (с учетом количества уникальных слов) для текстов в "Text Main", "Text Pro" и "Text Con". Есть ли какая-нибудь умная настройка, чтобы это произошло?

В данный момент я получаю следующее сообщение об ошибке:

File "index.py", line 10, in <module>
text = data["Text_Main"]
TypeError: list indices must be integers or slices, not str

Файл JSON имеет следующую структуру:

[
{"Stock Symbol":"A",
"Date":"05/11/2017",
"Text Main":"Text sample 1",
"Text Pro":"Text sample 2",
"Text Con":"Text sample 3"}
]

И соответствующий код выглядит так:

# Import relevant libraries
import string
import json
import csv
import textblob

# Open JSON file and slice by object
file = open("Glassdoor_A.json", "r")
data = json.load(file)
text = data["Text_Main"]

# Create an empty dictionary
d = dict()

# Loop through each line of the file
for line in text:
    # Remove the leading spaces and newline character
    line = line.strip()

    # Convert the characters in line to
    # lowercase to avoid case mismatch
    line = line.lower()

    # Remove the punctuation marks from the line
    line = line.translate(line.maketrans("", "", string.punctuation))

    # Split the line into words
    words = line.split(" ")

    # Iterate over each word in line
    for word in words:
        # Check if the word is already in dictionary
        if word in d:
            # Increment count of word by 1
            d[word] = d[word] + 1
        else:
            # Add the word to dictionary with count 1
            d[word] = 1

# Print the contents of dictionary
for key in list(d.keys()):
    print(key, ":", d[key])

# Save results as CSV
with open('Glassdoor_A.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["Word", "Occurences", "Percentage"])
    writer.writerows([key, d[key])

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Ваш JSON файл содержит объект внутри списка. Чтобы получить доступ к нужному контенту, сначала вы должны получить доступ к объекту через data[0]. Затем вы можете получить доступ к строковому полю. Я бы изменил код на:

# Open JSON file and slice by object
file = open("Glassdoor_A.json", "r")
data = json.load(file)
json_obj = data[0]
text = json_obj["Text_Main"]

или вы можете получить доступ к этому полю в одной строке с text = data[0]["Text_Main"], как указано в quamrana.

1 голос
/ 04 мая 2020

Ну, во-первых, ключ должен быть "Text Main", а во-вторых, вам нужно получить доступ к первому dict в list. Так что просто извлеките переменную text следующим образом:

text = data[0]["Text Main"]

Это должно исправить сообщение об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...