2016-11-09 2 views
1

リストの中で最も頻度の高い単語を取得します私はこのように類似したリストを得ることができる方法がわからない場合は、データがどこクリーンなSQLを使用しますが、正規化されていないデータを持つ:には、例えば、私は正規化されていない名前のリストを持っている

'Dog' - 4 
'Horse' - 3 
'A' - 3 
... 

を私はPythonが役に立つことができカウンタモジュールを持っていることを見てきました、それは文字列の1つをと数え、単語の組み合わせではないとします"One", "Bull".

前に文字列を分割していますか?

+1

'X = [リスト内のyのy.split()]のような' 'split'それを平坦化した後' count'を使用して初期リストを変更します。 –

答えて

3

あなたは別の言葉に、リスト内の項目を分割し、collections.Counterでカウントする前にstr.capitalizeを使用して大文字に最初の文字をひそかことができます。

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)] 
0

私は与えられたリストを最初に正規化するいくつかのPythonコードを書いています。その後、カウントを行うことができます。カウントするための既存のコードがたくさんあります。

私の最初の提案と密接に関連しているもう1つの試み:どの動物が出現する可能性があるかを確認し、animals = ['dog', 'horse', 'bird', bull']のようなリストがあることを確認してください。今度はanimalsを繰り返し、各動物が何回出現するかを数えます。文字列を小文字にしたい場合があります。

関連する問題