Как подсчитать уникальные слова с помощью счетчика библиотеки в Python? - PullRequest
1 голос
/ 05 мая 2019

я новичок в Python и пробую различные библиотеки

from collections import Counter
print(Counter('like baby baby baby ohhh baby baby like nooo'))

Когда я распечатываю это, я получаю вывод:

Counter({'b': 10, ' ': 8, 'a': 5, 'y': 5, 'o': 4, 'h': 3, 'l': 2, 'i': 2, 'k': 2, 'e': 2, 'n': 1})

Но я хочу найти количество уникальных слов:

#output example
({'like': 2, 'baby': 5, 'ohhh': 1, 'nooo': 1}, ('baby', 5))

Как я могу это сделать, кроме того, я могу сделать это без использования библиотеки счетчиков с помощью циклов?

Ответы [ 3 ]

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

Используя коллекцию collection.counter, вы должны сначала разбить строку на слова, например, так: words = 'like baby baby ohhh so forth'.split() Затем передать переменную words в счетчик.

Да, вы можете сделать это без модуля коллекций (объект счетчика),Есть несколько способов сделать это.Один из них, возможно, не самый эффективный:

words = 'like baby baby ohhh so forth'.split()
unique_words = set(words)  # converting to set gets rid of duplicates
wordcount ={}  # an epmty dict
for word in unique_words:
    wordcount[word]=0  # set zero counter for each of the words
for word in words:
    wordcount[word]+= 1  # for each occurrence of a word in the list made fro original string, find that key in dict and increment by 1
print(wordcount)
0 голосов
/ 05 мая 2019

Класс счетчика Python принимает в качестве параметра объект Iterable.Поскольку вы даете ему объект String:

Counter('like baby baby baby ohhh baby baby like nooo')

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

Counter({'b': 10, ' ': 8, 'a': 5, 'y': 5, 'o': 4, 'h': 3, 'l': 2, 'i': 2, 'k': 2, 'e': 2, 'n': 1})

обратно из класса.Один из вариантов - передать список в Counter.Таким образом, класс Counter будет выполнять итерацию каждого из элементов списка и создавать ожидаемое количество.

Counter(['like', 'baby', 'baby', 'baby', 'ohhh', 'baby', 'baby', 'like', 'nooo'])

Этого также можно добиться, просто разбив строку на слова, используя метод split:

Counter('like baby baby baby ohhh baby baby like nooo'.split())

Выход

Counter({'baby': 5, 'like': 2, 'ohhh': 1, 'nooo': 1})
0 голосов
/ 05 мая 2019

Попробуйте это:

string = 'like baby baby baby ohhh baby baby like nooo'
words = string.split()
result = dict()

for w in words:
    if result.get(w) == None:
        result[w] = 1
    else:
        result[w] += 1

for w in result:
    print(w + ' -- ' + str(result[w]))
...