![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() "Построение частотного словаря и проверка закона Ципфа"
Нужно написать программу, которая обрабатывает текстовые файлы, пополняя базу данных встречающихся слов, сохраняя частоту встречаемости слов. По накопленному словарю построить гистограмму встречаемости слов разной длины и проверить закон Ципфа. (желательно для хранения словаря использовать суффиксное дерево). Люди знающие, подскажите с чего начать хотя бы |
#2
|
|||
|
|||
![]() Закон Ципфа говорит о том, что если проанализировать достаточно большой текст, то слово, которое чаще всего в нем встречается, будет встречаться примерно в два раза чаще, чем второе по частоте, в три раза - чем третье и т.д. Что в данном контексте означает слово "примерно" для абстрактной задачи сказать сложно, но, видимо, как-то можно определить допустимую погрешность, исходя, например, из общего объема текста. Или еще как-то.
Суффиксные деревья применяются для решения задачи поиска самой длинной повторяющейся подстроки в заданном тексте. Прочитать про них можно здесь: http://algolist.manual.ru/ Вот тут http://www.delphisources.ru/forum/showthread.php?t=2944 лежит программа, которая ищет в произвольном текстовом файле слова, встречающиеся в каждом предложении. Это не то, что вам нужно, но может быть полезным. А может и не быть ![]() Вам нужно слова выбирать с учетом словоформ, как я понял? |
#3
|
|||
|
|||
![]() Ну да, союзы, предлоги - всё это. Пасиб, почитаем
|
#4
|
|||
|
|||
![]() Спрашивая про словоформы, я имел в виду вот что: слова, допустим, "программист" и "программисты" нужно считать как одно слово или как разные? Потому, что если как разные, то здесь вообще не видно проблемы, разве что продумать грамотную организацию словаря для быстрого поиска. Если же это считается как одно слово, но в разных формах, то тогда уже хитрее алгоритм получается.
|
#5
|
|||
|
|||
![]() Нет, всё-таки нужны слова. "программист" и "программисты" нужно считать как РАЗНЫЕ слова. Еще есть вопрос - подразумевает ли данная программы использование базы данных на Delphi (в условии есть фраза "пополняя базу данных встречающихся слов")?
|
#6
|
|||
|
|||
![]() Проблема в том, как хранить этот частотный словарь?
Есть мнение по реализации программы: "Заводишь большой массив структуры{слово,частота}. Открываешь файл. Считываешь слово. Автоматом заносишь его в массив. Частоту увеличиваешь на 1. Считываешь следущее слово. Пробегаешь по массиву от начального элемента до текущего. Смотришь, было ли оно там. Если было, частоту слова увеличиваешь на 1. Если нет помещаешь в массив новое слово. И так, пока не конец файла." А где этот массив записей хранить тогда, в типизированном файле? |
#7
|
|||
|
|||
![]() Попробуй написать класс...
А данные храни в xml и парси в класс... Может так будет лучше.. |
#8
|
|||
|
|||
![]() Для меня это звучит жестоко ))
|
#9
|
|||
|
|||
![]() Да не так уж это и страшно...
Тогда создай таблицу.. в БД.. А то типизированные долго обрабатывать будешь... если слов много.. |
#10
|
|||
|
|||
![]() Код:
Не могу загнать данные (слово, частота) в массив записей mas_slov. Главное в Memo выводит r^.str и r^.col, а в массив нет! |
#11
|
|||
|
|||
![]() Код:
|
#12
|
|||
|
|||
![]() Спасибо, Rosenkrantz.
НО частотный словарь хотелось бы хранить и наращивать, вкидывая на обработку новые тексты. Ладно, это мои проблемы. Больше нет времени, ничего координально править не буду. Еще раз спасибо. P.S. завтра пойду на защиту с комиссией, лишь бы не запарили не по делу |
#13
|
|||
|
|||
![]() Всё норм - сдал. Всем спасибо, тема закрыта.
|