簡體   English   中英

如何從字符串中獲取列表中單詞的頻率?

[英]How to get frequency of words in list from a string?

假設我有一個單詞列表和一個字符串。 我想要一個新數組來表示單詞列表中字符串中每個單詞的頻率。 此外,單詞的每個索引應該相同,並且數組的長度與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] 

您可以拆分句子並將其傳遞給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]

由於您要求一種不使用計數器的方法,因此這里有一段可以工作的代碼,但不確定它的時間復雜度。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM