Частота слов в списке из строки - PullRequest
0 голосов
/ 06 мая 2020

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

listWords = ['Noodles', 'Instant', 'Flavour', 'Ramen', 'Chicken', 'Flavor', 'Spicy', 'Beef']

string = "Cup Noodles Chicken Vegetable Noodles"

Результирующий массив должен выглядеть так:

Каждый индекс представляет частоту каждого слова в списке, 0 в противном случае

result = [2, 0, 0, 0, 1, 0, 0, 0]

Ответы [ 2 ]

5 голосов
/ 06 мая 2020

Вы можете разделить предложение и передать его на Collections.counter(). С его помощью вы можете посмотреть количество слов в своем списке слов. Например:

from collections import Counter

string = "Cup Noodles Chicken Vegetable Noodles"
listWords = ['Noodles', 'Instant', 'Flavour', 'Ramen', 'Chicken', 'Flavor', 'Spicy', 'Beef']

counts = Counter(string.split())
[counts[word] for word in listWords]
# [2, 0, 0, 0, 1, 0, 0, 0]

Без счетчика ()

Конечно, вы можете сделать это без Counter(). Вам просто нужно обработать KeyError, которое возникает, когда вы пытаетесь получить доступ к ключу в первый раз. Затем вы можете использовать get(word, 0), чтобы вернуть значение по умолчанию 0 при поиске слов. Что-то вроде:

string = "Cup Noodles Chicken Vegetable Noodles"
listWords = ['Noodles', 'Instant', 'Flavour', 'Ramen', 'Chicken', 'Flavor', 'Spicy', 'Beef']

counts = {}

for word in string.split():
    try:
        counts[word] += 1
    except KeyError:
        counts[word] = 1


[counts.get(word, 0) for word in listWords]
# still [2, 0, 0, 0, 1, 0, 0, 0]
0 голосов
/ 06 мая 2020

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

listWords = ['Noodles', 'Instant', 'Flavour', 'Ramen', 'Chicken', 'Flavor', 'Spicy', 'Beef']
indicies = {}
freq = [0]*len(listWords)
for i in range(len(listWords)):
    indicies[listWords[i]] = i

string = "Cup Noodles Chicken Vegetable Noodles"

for word in string.split():
    if word in indicies.keys():
        freq[indicies[word]]+=1

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