2013-03-31 5 views
0
import sys 
def candidateWord(): 
    filePath = "sample.txt" 
    file = open(filePath,'r') 
    word_count = {} 
    for line in sys.stdin.readlines(): 
     for word in line.split(): 
      #words = word.lower() 
      words = word.strip('!,[email protected]#$%^&*()_+').lower() 
      word_count[words] = word_count.get(words,0) + 1 

     for key in word_count.keys(): 
      #sorted(word, key = str,lower) 
      print (str(key)+' '+str(word_count[key])) 

candidateWord() 

Как бы я сортировал слова, которые у меня есть в текстовом файле по их частоте, используя то, что у меня уже есть?Сортировка слов по их частоте в python

Текстовый файл (sample.txt) содержит следующее: How are you How are you I am good. HBHJKOLDSA How

Мой выход желание должно быть:

how 3 
am 2 
are 2 
i 2 
you 2 
good 1 
hbhjkoldsa 1 

Я работаю в Python 3.

ответ

5

Используйте collections.Counter:

from collections import Counter 

with open("sample.txt", 'r') as f: 
    text = f.read() 

words = [w.strip('!,[email protected]#$%^&*()_+') for w in text.lower().split()] 

counter = Counter(words) 

print(counter.most_common()) 
# [('how', 3), ('are', 2), ('you', 2), ('good', 1), ('i', 1), ('am', 1), ('hbhjkoldsa', 1)] 

Ваш желаемый результат:

print("\n".join("{} {}".format(*p) for p in counter.most_common())) 

 

Использование кода и сортировки по (частоты по алфавиту, слово по возрастанию):

for key, value in sorted(word_count.items(), key=lambda p: (-p[1], p[0])): 
    print("{} {}".format(key, value)) 

 

Результат Счетчик может быть отсортированы таким же образом, как раз заменить word_count.items() на counter.most_common().

+0

Можно ли использовать коллекцию.Содержание с файлами вместо простого текста? – Tosh

+1

Конечно. Почему вы открываете файл, а затем читаете «stdin»? –

+0

Здесь я заменил 'text' содержимым файла. –

Смежные вопросы