Применение collections.counter() в UTF-8

У меня есть список, состоящий из неанглоязычного текста в формате utf-8. Поэтому, когда я пытаюсь напечатать одно слово, мне выдается следующее: u'والأرنب'

Поэтому, чтобы напечатать его как исходное слово, мне нужно зациклить его, и оно будет выводиться правильно, как исходное слово.

Я хочу найти 5 самых частых слов. При сохранении слов в функцию collections.counter() они вводятся в формате Unicode. Как мне получить доступ к слову внутри счетчика(), чтобы напечатать 5 самых частых слов.

Я сделал следующий код: (txt - мой текстовый файл)

слова = [w вместо w в txt.split()]

распечатает

[u'كان', u'يا', u'ما', ...u'كان', u'في', u'قديم']

Поэтому я зацикливаю его, чтобы получить желаемый результат (я не знаю, почему)

 >>> for w in words:
        print w,

распечатает

كان يا ما كان

Я использую функцию counter(), чтобы найти наиболее часто встречающиеся слова.

 >>> count = collections.Counter(words)
 >>> print count.most_common(5)

распечатает

 >>> [(u'\u0627\u0644\u0633\u0644\u062d\u0641\u0627\u0629', 5),
  (u'\u0627\u0644\u0645\u063a\u0631\u0648\u0631', 3), 
(u'\u0627\u0644\u0623\u0631\u0646\u0628', 2), (u'\u060c', 2), 
(u'\u0648\u0627\u0644\u0623\u0631\u0646\u0628', 2)]

Я хочу получить доступ к каждому слову и зациклить его, чтобы распечатать его с его частотой.


person user1799092    schedule 07.11.2012    source источник


Ответы (1)


В вашем первом примере вы можете просто напечатать слово напрямую, чтобы получить оригинал (я не могу читать по-арабски, так что это может быть неправильно):

>>> print u'\u0648\u0627\u0644\u0623\u0631\u0646\u0628'
والأرنب

Если вы делаете это через интерпретатор и явно не используете print, вы все равно увидите представление юникода:

>>> u'\u0648\u0627\u0644\u0623\u0631\u0646\u0628'
u'\u0648\u0627\u0644\u0623\u0631\u0646\u0628'

Поэтому вы можете просто вызвать print, чтобы увидеть фактическое слово:

>>> l
[(u'\u0627\u0644\u0633\u0644\u062d\u0641\u0627\u0629', 5),
 (u'\u0627\u0644\u0645\u063a\u0631\u0648\u0631', 3), 
 (u'\u0627\u0644\u0623\u0631\u0646\u0628', 2), (u'\u060c', 2), 
 (u'\u0648\u0627\u0644\u0623\u0631\u0646\u0628', 2)]
>>> for el in l:
    print el[0], el[1]


السلحفاة 5
المغرور 3
الأرنب 2
، 2
والأرنب 2
person RocketDonkey    schedule 07.11.2012
comment
@ user1799092 Нет проблем, рад, что помогло :) - person RocketDonkey; 07.11.2012