Для заданного списка строк количество слов нет

#python

Вопрос:

У меня есть заданный список строк, который:

 strings = ["the method of lagrange multipliers is the economists workhorse for solving optimization problems", "the technique is a centerpiece of economic theory but unfortunately its usually taught poorly"]
 

Теперь я хочу найти отсутствие слова в каждом предложении, чтобы мой вывод был

 {'the': 2, 'method': 1, 'of': 1, 'lagrange': 1, 'multipliers': 1, 'is': 1, 'economists': 1, 'workhorse': 1, 'for': 1, 'solving': 1, 'optimization': 1, 'problems': 1}

{'the': 1, 'technique': 1, 'is': 1, 'a': 1, 'centerpiece': 1, 'of': 1, 'economic': 1, 'theory': 1, 'but': 1, 'unfortunately': 1, 'its': 1, 'usually': 1, 'taught': 1, 'poorly': 1}
 

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

 from collections import Counter

dataset = ["the method of lagrange multipliers is the economists workhorse for solving optimization problems",
           "the technique is a centerpiece of economic theory but unfortunately its usually taught poorly"]


for index,row in enumerate(dataset):
    word_frequency = dict(Counter(row.split(" ")))
    
print(word_frequency)
 

С помощью этого я получаю вывод, который является:

 {'the': 1, 'technique': 1, 'is': 1, 'a': 1, 'centerpiece': 1, 'of': 1, 'economic': 1, 'theory': 1, 'but': 1, 'unfortunately': 1, 'its': 1, 'usually': 1, 'taught': 1, 'poorly': 1}
 

Очевидно, что он рассматривает только второе предложение и считает его, но не первое.

Кто-нибудь может помочь мне понять, что не так в моем коде?

Комментарии:

1. это потому, что вы переписываете свой первый счетчик

2. Ваш word_frequency каждый раз сбрасывается. Вы можете либо переместиться print(word_frequency) внутри цикла, либо добавить словарь в список

3. Простой способ — составить список счетчиков: counts = [Counter(row) for row in map(str.split, dataset) ]

Ответ №1:

Он word_frequency обновляется с каждой строкой в списке наборов данных.В конце концов , он сохраняет счетчик для последней строки в наборе данных.Следовательно, отображение счетчика слов в последней строке. Вы можете использовать print(word_frequency) внутри цикла for или использовать a list и добавлять word_frequency его в список каждый раз, и как только вы выйдете из цикла, просто распечатайте list .

 from collections import Counter

dataset = ["the method of lagrange multipliers is the economists workhorse for solving optimization problems",
           "the technique is a centerpiece of economic theory but unfortunately its usually taught poorly"]

l = []
for index,row in enumerate(dataset):
    word_frequency = dict(Counter(row.split(" ")))
    l.append(word_frequency)
    
print(l)
 

Ответ №2:

Просто переместите печать так, чтобы она находилась внутри вашего for цикла, когда вы перезаписываете вычисленный параметр word_frequency.

Ответ №3:

Печать внутри цикла вместо установки переменной внутри цикла (которая будет перезаписываться на каждой итерации, прежде чем вы распечатаете ее в конце):

 >>> dataset = ["the method of lagrange multipliers is the economists workhorse for solving optimization problems",
...            "the technique is a centerpiece of economic theory but unfortunately its usually taught poorly"]
>>> from collections import Counter
>>> for sentence in dataset:
...     print(dict(Counter(sentence.split())))
...
{'the': 2, 'method': 1, 'of': 1, 'lagrange': 1, 'multipliers': 1, 'is': 1, 'economists': 1, 'workhorse': 1, 'for': 1, 'solving': 1, 'optimization': 1, 'problems': 1}
{'the': 1, 'technique': 1, 'is': 1, 'a': 1, 'centerpiece': 1, 'of': 1, 'economic': 1, 'theory': 1, 'but': 1, 'unfortunately': 1, 'its': 1, 'usually': 1, 'taught': 1, 'poorly': 1}
 

Ответ №4:

Вы перезаписываете word_frequency переменную внутри for цикла, то есть выводится только конечное значение из конечного числа.

Вместо этого вы должны определить Counter внешний цикл for, добавить его значения, используя функции добавления счетчика в цикле for, а затем преобразовать в dict и распечатать в конце:

 from collections import Counter

dataset = ["the method of lagrange multipliers is the economists workhorse for solving optimization problems",
           "the technique is a centerpiece of economic theory but unfortunately its usually taught poorly"]

cumulative_counter = Counter()
for index,row in enumerate(dataset):
  cumulative_counter  = Counter(row.split(" "))

word_frequency = dict(cumulative_counter)
print(word_frequency)
 

Выходы:

{'the': 3, 'method': 1, 'of': 2, 'lagrange': 1, 'multipliers': 1, 'is': 2, 'economists': 1, 'workhorse': 1, 'for': 1, 'solving': 1, 'optimization': 1, 'problems': 1, 'technique': 1, 'a': 1, 'centerpiece': 1, 'economic': 1, 'theory': 1, 'but': 1, 'unfortunately': 1, 'its': 1, 'usually': 1, 'taught': 1, 'poorly': 1}