Частотный анализ текстов

Недавно, ради эксперимента, да и просто ради углубленного изучения языка, я решил заняться одной интересной проблемой — частотным анализом текстов.

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

Для начала создадим два текстовых файла, которые условно назовем source.txt и words.txt: в первый будем помещать текст для анализа, во второй — поместим список слов или символов, которые мы будем искать, располагая каждое слово с новой строки. Также нам потребуется функция подсчета количества повторений определенной строки в некотором файле, с учетом того,что в Icon есть функция find, возвращающая позицию одной строки в другой, то наша функция будет выглядеть так:

procedure search(f,s)
local res,tmp
res:=0
every tmp:=!f ? {
  if find(s,tmp) then res+:=1	
}
return res
end

Она будет принимать на вход два параметра — открытый текстовый файл и строка, количество повторений которой надо посчитать.

Используя эту функцию, нетрудно реализовать программку подсчета количества повторений слов, взятых из файла words.txt, в тексте, взятом из файла source.txt, для чего воспользуемся циклом every-do вкупе с генерацией элементов структуры, в качестве которой выступает файл words.txt:

procedure main()
local a,b,c,f
b:=open("words.txt","r")
every c:=!b do {
   f:=open("source.txt","r")
   a:=search(f,c)
   close(f)
   write(c," ",a)
}
end

procedure search(f,s)
local res,tmp
res:=0
every tmp:=!f ? {
  if find(s,tmp) then res+:=1	
}
return res
end

Остается только заполнить два файла нужными для обработки данными. В качестве слов в файл words.txt можно вставить буквы алфавита (разделяя их новой строкой) — и получить таким образом,количество вхождений каждой буквы в строках файла. Ниже представлен результат анализа этой статьи по таким параметрам:

  • а 7
  • б 6
  • в 7
  • г 4
  • д 7
  • е 7
  • ж 4
  • з 6
  • и 7
  • й 7
  • к 7
  • л 7
  • м 7
  • н 7
  • о 7
  • п 7
  • р 7
  • с 7
  • т 7
  • у 7
  • ф 5
  • х 5
  • ц 3
  • ч 6
  • ш 2
  • щ 1
  • ъ 0
  • ы 7
  • ь 7
  • э 3
  • ю 2
  • я 6

aquaratixc

Программист-самоучка и программист-любитель

Добавить комментарий