2014-02-10 2 views
1

У меня есть файл содержит строки Unicode, я подсчет слов и сортировки его с помощью Counter ObjectНеприятность с ответным объектом

Это моего код

import collections 
import codecs 
from collections import Counter 

with io.open('1.txt', 'r', encoding='utf8') as infh: 
    words =infh.read() 
    Counter(words) 
    print Counter(words).most_common(10000) 

Это мой 1.txt файл

വാര്‍ത്തകള്‍ വാര്‍ത്തകള്‍ വാര്‍ത്തകള്‍ വാര്‍ത്തകള്‍ വാര്‍ത്തകള്‍ വാര്‍ത്തകള്‍ വാര്‍ത്തകള്‍ വാര്‍ത്തകള്‍ 

это дает мне количество символов вместо слова подсчитывает как это

[(u'\u0d4d', 63), (u'\u0d24', 42), (u'\u200d', 42), (u'\n', 26), (u' ', 21), (u'\u0d30', 21), (u'\u0d33', 21), (u'\u0d35', 21), (u'\u0d15', 21), (u'\u0d3e', 21)] 

Что случилось с моим кодом?

+3

'слово = infh.read() раздельный()' –

ответ

0

Counter принимает итерацию элементов в своем конструкторе. infh.read() возвращает строку, которая возвращает отдельные символы при повторении. Вместо этого вам необходимо предоставить список слов: Counter(infh.read().split()).

Если вы хотите, чтобы позже записать отсчеты в файл:.

with open('file.txt', 'wb') as f: 
    for word, count in Counter(words).most_common(10000): 
     f.write(u'{} {}\n'.format(word, count)) 
+0

Ok, Как я могу написать это рассчитывает в файл? –

+0

@karu, считая 'f' был открыт в режиме' wb': 'для слова, count в Counter (слова) .most_common (10000): f.write ('{} {} \ n'.format (слово, count)) ' –

+0

Файл« /home/akallararajappan/corpus/counter.py », строка 9, в f.write ('{} {} \ n'.format (word, count)) UnicodeEncodeError:' ascii 'кодек не может кодировать символы в позиции 0-11: порядковый не в диапазоне (128) –

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