JSON Файл: подсчитайте полное количество слов с помощью Python - PullRequest
1 голос
/ 05 мая 2020

В рамках текущего исследовательского проекта я планирую измерить относительное вхождение уникального слова в файле JSON. В настоящее время у меня есть индикатор количества уникальных слов в файле и соответствующего им количества вхождений (например, "technology":"325"), но мне все еще не хватает метода для полного подсчета слов.

Код, как я использование для полного количества слов (total = sum(d[key])) дает следующее уведомление. Я проверил несколько решений аналогичных проблем, но пока не нашел подходящего ответа. Есть ли какой-нибудь разумный способ решить эту проблему?

total = sum(d[key]) - TypeError: 'int' object is not iterable

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

# Create an empty dictionary
d = dict()

# processing:
for row in data:
    line = row['Text Main']
    # 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])

    # Count the total number of words
    total = sum(d[key])
    print(total)

Ответы [ 3 ]

2 голосов
/ 05 мая 2020

https://docs.python.org/3/library/functions.html#sum

Вы пытаетесь ввести sum(iterable, /, start=0) целое число. Это не имеет смысла, потому что sum должен вызываться в итерации. Краткое объяснение итерации состоит в том, что вы можете использовать for l oop. Например, list.

Вы можете изменить свой # Print the contents of dictionary l oop одним из двух следующих способов:

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

    # Count the total number of words
    total += d[key]
    print(total)
print("Actual total: ," total)

Или, более сжато:

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

# Get the total word count
total = sum(d.values())
2 голосов
/ 05 мая 2020
Встроенная функция суммы

python принимает в качестве аргумента итерацию, но вы пытаетесь передать ей одно число. ваш код эквивалентен

total = sum(1)

, но функция суммы должна добавить что-то итеративное для вычисления суммы. например,

sum([1,2,3,4,5,6,7])

, если вы хотите вычислить общее количество слов, вы можете попробовать:

sum(d.values())
1 голос
/ 05 мая 2020
d=dict()
d['A']=1
d['B']=2
d['C']=3
total = sum(d.values())
print total

for key in list(d.keys()):
    print(key, ":", d[key], float(d[key])/total)

    #Count the total number of words

d [ключ] - это единственный int d.values ​​() - это список

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