Attachment 'anna_noRE.py'

Download

   1 #!/usr/bin/env python
   2 # coding: utf
   3 '''
   4 Рассмотрим текст романа Л. Н. Толстого «Анна Каренина» (следует использовать электронную версию романа, находящуюся по адресу http://ejudge.ru/study/anna.txt; есть на этом вики). Словоформой назовем последовательность латинских или русских букв. Словоформы ограничиваются символами, не являющимися латинскими или русскими буквами. В словоформах не различаются заглавные и строчные буквы и буквы е и ё. Например, Осел и осёл — это одна словоформа. Выпишите 10 наиболее часто встречающихся словоформ длиной 4 буквы в порядке уменьшения частоты их появления и для каждой словоформы укажите частоту ее появления. Словоформы должны быть выписаны строчными буквами, с буквой ё, преобразованной к букве е. Если несколько словоформ имеют равную частоту появления, они должны быть упорядочены по алфавиту (причем русские буквы идут раньше латинских). Обоснуйте свой ответ и приложите исходные тексты (например, тексты программ или электронные таблицы), использованные для получения ответа.
   5 '''
   6 
   7 Letters=u"".join([unichr(c) for c in range(ord(u"a"),ord(u"z")+1)+range(ord(u"а"),ord(u"я")+1)])
   8 
   9 def cmpv(kv1,kv2):
  10     return cmp(kv1[1],kv2[1]) or cmp(ord(kv1[0][0])/128,ord(kv2[0][0])/128) or cmp(kv2[0],kv1[0])
  11 
  12 def wsplit(s):
  13     r,state=[],0
  14     for c in s:
  15         if state:   # в середине слова
  16             if c not in Letters: state=0
  17             else: r[-1]+=c
  18         else:
  19             if c in Letters:
  20                 state=1
  21                 r.append(c)
  22     return r
  23 
  24 W,N,Voc=4,10,{}
  25 for l in file("anna.txt").readlines():
  26     l=wsplit(l.decode("utf8").lower().replace(u"ё",u"е"))
  27     for w in l:
  28         if len(w)==W:
  29             Voc[w]=Voc.setdefault(w,0)+1
  30 VK=Voc.items()
  31 VK.sort(cmpv,reverse=True)
  32 for v,k in VK[:10]:
  33     print u"{1}: {0}".format(k,v).encode("utf8")

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.

You are not allowed to attach a file to this page.