close

Вход

Забыли?

вход по аккаунту

?

PS22.МарьинКЛ

код для вставкиСкачать
Министерство общего и профессионального образования РФ
Марийский Государственный Технический Университет
РАСЧЕТНО-ГРАФИЧЕСКАЯ РАБОТА
На тему "Обработка текстовых данных"
по дисциплине ПнаЯВУ
Выполнил: студент гр. ПС-22
Марьин К.Л.
Проверил:
Ильин А.А.
Йошкар-Ола,
2011
Содержание
Техническое задание................................................................................3
Введение....................................................................................................3
Основная часть..........................................................................................4
Вывод................. .......................................................................................8
Техническое задание.
1. Статистика встречаемости слов в файле
1.1. Разработайте программу Count Words, которая подсчитывает число слов в текстовом файле и собирает статистику встречаемости для каждого слова. Размер анализируемых текстовых файлов не ограничен. Словом считается последовательность букв русского или латинского алфавитов, все остальные символы интерпретируются как пробелы. Различные словоформы одного слова считаются разными словами. Статистика накапливается в текстовом файле, который отсортирован в алфавитном порядке и содержит строки формата: <слово><пробел><количество вхождений>
1.2. Оптимизируйте программу Count Words в Count Words 2, таким образом, чтобы минимизировать количество обращений к файлу статистики при анализе входного файла.
1.3. Выполните анализ трудоемкости исходного и оптимизированного алгоритмов в терминах количества операций ввода-вывода и времени работы на контрольном примере.
2. Статистика встречаемости слов в файле с учетом словоформ
2.1. Спроектируйте программу Gather Words, которая анализирует файл статистики, подготовленный программой Count Words и подсчитывает количество слов, объединяя статистику для однокоренных слов, модифицированных с помощью окончаний. Формат файла статистики <слово>, <слово>, ..., <слово> : <количество вхождений>
2.2. Разработайте и отладьте программу определения категории текста спроектированную в задании 2.1.
3. Определение тематической категории текста по частоте встречаемости ключевых слов
3.1. Спроектируйте программу, которая выполняет автоматический анализ и категоризацию текстов из различных предметных областей. Программа использует набор опорных текстов, для которых категоризация была выполнена вручную. Опорные тексты размещенных в соответствующих каталогах на диске: компьютеры, здравоохранение, сельское хозяйство, спорт. Программа анализирует опорные документы и строит для каждой категории некоторую модель. Используя эту модель, программа анализирует документ и делает вывод о принадлежности его к одной из известных категорий, либо помещает документ в категорию "прочее".
Требования: корректное определение категории текста не менее, чем в 75% случаев
3.2. Разработайте и отладьте программу определения категории текста спроектированную в задании 3.1.
Введение
Для реализации расчетно-графической работы к каждому заданию нужно спроектировать программу и реализовать ее на языке Pascal.
Основная часть
Для решения первого задания работы, были использованы переменные и строковые типы данных. Данные считывались из входного файла, после чего записывались в промежуточный файл в преобразованном виде. Реализация преобразования проходила с помощью функции LetterLower (преобразование строчных букв в заглавные) и цикла: READ(FIn, Ch);
IF Ch IN Letters
THEN {Помещаем Ch в верхнем регистре в строку Word}
BEGIN
Index := Index + 1;
Word[Index] := LetterLower(Ch);
END
ELSE {Помещаем слово от Word[1] до Word[Index] FTemp}
IF Index <> 0
THEN
BEGIN
FOR I := 1 TO Index
DO
WRITE(FTemp, Word[I]);
WRITELN(FTemp); Index := 0
END
Далее производилась сортировка в промежуточном файле методом BubbleSort.
В финальной части программы данные из промежуточного файла переписывались в выходной файл, при этом производился подсчет каждого слова:
WHILE NOT EOF(FTemp)
DO
BEGIN
READLN(FTemp, Word2);
IF Word2 = Word1
THEN
WordNumber := SUCC(WordNumber)
ELSE
BEGIN
WRITELN(FOut, Word1, ' ', WordNumber);
Word1 := Word2;
WordNumber := 1
END
END.
Для решения второй задачи была использована задача №1. Принцип считывания и вывода слов остался прежним, однако был изменен метод сортировки с BubbleSort на TreeSort. Для работы с большими файлами было реализовано считывание по блокам, количество кадого блока 800 слов. Основная процедура сортировки:
WHILE NOT EOF(F)
DO
BEGIN
I := 0;
Root := NIL;
WHILE (NOT EOF(F)) AND (I < 800)
DO
BEGIN
READLN(F, Str);
Insert(Root, Str);
I := I + 1
END;
REWRITE(F1);
PrintTree(F1, Root);
RESET(F1);
RESET(F2);
REWRITE(F3);
READLN(F1, Str1);
READLN(F2, Str2);
WHILE (NOT EOF(F1)) OR (NOT EOF(F2))
DO
BEGIN
IF (Str1 < Str2) AND (Str2 <> '') AND (Str1 <> '')
THEN
BEGIN
WRITELN(F3, Str1);
IF NOT EOF(F1)
THEN
READLN(F1, Str1)
ELSE
BEGIN
WRITELN(F3, Str2);
Void(F2, F3)
END
END
ELSE
BEGIN
WRITELN(F3, Str2);
IF NOT EOF(F2)
THEN
READLN(F2, Str2)
ELSE
BEGIN
WRITELN(F3, Str1);
Void(F1, F3)
END
END
END;
IF NOT EOF(F2)
THEN
BEGIN
RESET(F3);
REWRITE(F2);
Void(F3, F2)
END
END,
где процедуры Insert и PrintTree - основные процедуры программы TreeSort.
Для решения третей задачи был использован выходной файл второй задачи и файл, содержащий в себе окончания. Окончания с файла были занесены в массив.
Основной работой программы стала процедура определения корня слова TakeBase.
LeightWord := LENGTH(Words);
I := LeightWord;
B := FALSE;
WHILE (I > 0) AND (NOT B)
DO
BEGIN
EndWord := COPY(Words, I, LeightWord);
FOR J := 1 TO 100
DO
IF EndWord = WordEnd[J]
THEN
BEGIN
B := TRUE;
Flag := I;
BREAK
END;
I := I - 1
END;
IF B
THEN
BEGIN
BaseWord := COPY(Words, 1, Flag - 1);
EndWord := COPY(Words, Flag, LeightWord)
END
ELSE
BEGIN
BaseWord := Words;
EndWord := ''
END
Далее производилось сравнение основ двух слов и производилась запись и подсчет одинаковых слов в выходной файл
IF BaseWord1 = BaseWord2
THEN
BEGIN
WRITE(FOut, Word1, ', ');
CountWord1 := CountWord1 + CountWord2;
Word1 := Word2
END
ELSE
BEGIN
WRITELN(FOut, Word1, ' ', CountWord1);
Word1 := Word2;
BaseWord1 := BaseWord2;
CountWord1 := CountWord2
END
Для решения четвертой задачи были взяты основы предыдущих задач. Слова из входного файла приводились к одному регистру, сортировались и записывались в промежуточный файл. Далее определялось вхождение каждого слова в исходный файл и их база(основа слова, без окончания). База и количество слов записывалось в промежуточный файл.
Далее производилось сравнение каждого слова со словами из опорных текстов (опорные тексты хранятся в отдельном каталоге) и подсчитывалось количество одинаковых слов для каждого текста
WHILE NOT EOF(F1)
DO
BEGIN
READLN(F1, Word1);
IF Word1 = Word
THEN
Count1 := Count1 + CountWord
END;
WHILE NOT EOF(F2)
DO
BEGIN
READLN(F2, Word2);
IF Word2 = Word
THEN
Count2 := Count2 + CountWord
END;
WHILE NOT EOF(F3)
DO
BEGIN
READLN(F3, Word3);
IF Word3 = Word
THEN
Count3 := Count3 + CountWord
END;
WHILE NOT EOF(F4)
DO
BEGIN
READLN(F4, Word4);
IF Word4 = Word
THEN
Count4 := Count4 + CountWord
END,
где файлы F1, F2, F3, F4 - это опорные тестовые файлы о компьютерах, медицине, сельском хозяйстве и спорте соответственно.
В финальной части программы сравнивалось количество слов для каждого слова, и тип исходного текста определялся по наибольшему числу. Если количество слов не превышает 5%, то тексту присваивается тип прочее.
Вывод
Для решения расчетно-графической работы были использованы полученные за один год обучения знания и реализованы в конечной программе TypeTexts. Для разработки первой программы CountWords были использованы целочисленные, вещественные, логические и символьные типы данных. Для разработки CountWords2 был использован алгоритм первой программы, однако оптимизирован процесс сортировки, что помогло более детально разобраться с указателями. В третьей программе GatherWords был создан массив с окончаниями слов. Благодаря этому мы разобрались со структурированным типом данных, в частности, с массивами. Для разработки четвертой программы TypeTexts были использованы предыдущие программы, а также была проведена работа с текстовыми файлами. Таким образом, нами были использованы все типы данных, которые мы прошли за один год обучения.
- 2 -
Документ
Категория
Без категории
Просмотров
6
Размер файла
23 Кб
Теги
ps22, марьинкл
1/--страниц
Пожаловаться на содержимое документа