在列表中获取最常用的单词

时间:2016-11-09 10:57:01

标签: python

我有一个未规范化的名称列表,例如:

Range Selection Syntax

我想要得到的是一个最常见的值列表,如果数据干净,但没有规范化数据我不知道如何获得类似的列表,这将很容易使用SQL:

'one Bull', 'A Horse', 'Horse', 'Dog', 'Black dog', 'Brown dog', 'Bird', 'I'm a horse', 'I'm not a dog'

我已经看到Python有一个可能有用的Counter模块,但它会将一个String计为一个'Dog' - 4 'Horse' - 3 'A' - 3 ... ,而不是单词"One bull"的混合

可能之前分裂字符串?

2 个答案:

答案 0 :(得分:4)

您可以将列表中的项目拆分为单独的字词,然后使用str.capitalize将第一个字母转换为大写字母,然后使用collections.Counter进行计数:

from collections import Counter

lst= ['one Bull', 'A Horse', 'Horse', 'Dog', 'Black dog', 'Brown dog', 'Bird', 'I\'m a horse', 'I\'m not a dog']
c = Counter(i.capitalize() for x in lst for i in x.split())
print(c)
# Counter({'Dog': 4, 'Horse': 3, 'A': 3, "I'm": 2, 'Black': 1, 'Brown': 1, 'Bull': 1, 'Not': 1, 'One': 1, 'Bird': 1})

然后使用计数器对象的most_common来获取所需数量的最常见项目:

print(c.most_common(3))
# [('Dog', 4), ('Horse', 3), ('A', 3)]

答案 1 :(得分:0)

我会写一些Python代码来首先规范化给定列表。之后你可以做一个计数,有很多现有的计数代码。

另一个尝试,与我的第一个建议密切相关:确保您知道哪些动物可以出现,并确保您有一个列表,如animals = ['dog', 'horse', 'bird', bull']。现在迭代animals并计算每只动物出现的次数。您可能希望在字符串上执行小写。