
- •Практикум 12.
- •Цели и задачи обработки текстов
- •Ниже, под словом «текст» будем понимать содержимое текстового файла, состоящего из строк переменной
- ••Морфологический анализ лексемы или словоформы. К числу учебных задач относятся задачи поиска в
- •Технология обработки текстовых файлов
- •Впростейшем случае на этапе чтения из файла обычно объявляют предельную размерность статических массивов
- •BEGIN
- •//2. Сформировать словарь (массив слов)
- •//3. Сохранить в новом файле файле.
- •Примеры алгоритмов.
- •Листинг тестовой программы приведен без заголовка. В разделе описаний процедур и функций необходимо
- •BEGIN
- •А. Функции обработки отдельной строки.
- •Function StrToNum(s : string; Var x : integer) : byte;
- •3.Функция замены символа другим символом или строкой символов.
- •Function SymbolToStr(s : string) : string;
- •Б.Функции обработки массива строк.
- •Сама функция поиска использует стандартный алгоритм. Вначале предполагается, что искомая строка является первой.
- •2.Подсчет количества повторений лексемы (слова, строки) в массиве строк.
- •3. Поиск лексемы с максимальным количеством вхождений в массив строк.
- •Задание
Практикум 12.
Цели и задачи обработки текстов. Работа с текстовыми файлами
1.Цели и задачи обработки текстов.
2.Технология обработки текстовых файлов.
3.Примеры алгоритмов.
4.Частотный анализ исходного кода
Цели и задачи обработки текстов
Машинная обработка текста на компьютере имеет своей целью установление «смысла» текста. Кавычки здесь употреблены не случайно, поскольку само слово «смысл» не имеет смысла (ха-ха опять пошутил удачно?!) по отношению к машине, она же компьютер, она же ЭВМ, и она же не человек.
В этом отношении задачи обработки текста безусловно
являются задачами искусственного интеллекта, которые с точки зрения утилитарного подхода, вполне понятны и,
что самое главное, выполнимы. Существует, правда, и
другая точка зрения, которая получила название психолингвистической, предполагающая «понимание»
смысла компьютером, но это уж для отъявленных фантазеров – поклонников «Матрицы» или гениев.
Не вдаваясь в тонкости этой, кстати довольно интересной дискуссии, далее будем все же придерживаться утилитарной точки зрения.
Ниже, под словом «текст» будем понимать содержимое текстового файла, состоящего из строк переменной длины. Будем также считать, что каждая строка файла является либо отдельным предложением (повествовательным, вопросительным или восклицательным), либо отдельной лексемой, т.е. словом, числом или отдельным символом.
Случай, когда строка состоит из нескольких предложений далее не рассматривается, поскольку такую строку всегда можно разбить на несколько отдельных предложений.
Исходя из этой классификации, задачи обработки текстов можно подразделить на:
•Синтаксический анализ предложения. В учебных задачах это обычно подсчет слов в предложении с разбиением на лексемы и составление массива слов. Подсчет знаков препинания. В более сложных задачах – анализ структуры предложения, выделение союзов.
•Морфологический анализ лексемы или словоформы. К числу учебных задач относятся задачи поиска в массиве слов самого длинного/короткого слова; поиск слов с максимальным/минимальным количеством гласных/согласных; слов начинающихся/заканчивающихся на слог «гласная + согласная»; замены группы символов на другую группу символов и т.п.
•Символьный анализ в предложении или в лексеме. Этот анализ предполагает выделение цифровых комбинаций символов в строке и преобразование их в целое или действительное число. К этой же группе относятся задачи преобразование числа, полученного в результате подсчета символов заданного сорта, в строку с последующей записью этой строки в файл и т.п.
Технология обработки текстовых файлов
Текстовые файлы являются одним из трех видов файлов в DELPHI, которые предназначены для хранения строк произвольного текста.
Файлы вообще, и текстовые файлы в частности, редко обрабатываются на внешних носителях из-за малой скорости доступа, поэтому в программе или подпрограмме необходимо предусмотреть массив строк – образ, эквивалент текстового файла, где и будет вестись вся последующая обработка.
Таким образом, типичная технология обработки текстов предполагает наличие трех этапов:
•Чтение и из файла.
•Собственно обработка, например анализ текста.
•Запись в файл результата при необходимости
Впростейшем случае на этапе чтения из файла обычно объявляют предельную размерность статических массивов и соответствующие типы и переменные. Именно так мы и будем поступать в учебных задачах, в которых использование динамических массивов нецелесообразно, но безусловно будет приветствоваться.
Const nmax = 1000;
Type Tw = array[1..nmax] of string[255];
Var ft : Text;// Это файл на внешнем носителе,
w : Tw; // а это массив строк – образ файла nz : word;// Размерность массива строк

BEGIN
// 1. Чтение из файла в массив строк с выводом AssignFile(ft,'PZI_F12text.txt'); Reset(ft);// Открыть файл только для чтения nz:=0;
while not EoF(ft) do begin
inc(nz); readln(ft, w[nz]); writeln(w[nz]);
end; |
После того как файл прочитан |
CloseFile(ft); |
в массив строк он, как |
readln; |
правило, закрывается и вся |
END. |
дальнейшая работа идет уже |
|
с массивом строк. |
//2. Сформировать словарь (массив слов)
//В раздел описаний поместить функции
DelZnakP // и StrToWord. Объявления остальных переменных // добавлять в раздел Var по мере
необходимости
nwr:=0; // Глобальный счетчик слов for i:=1 to nz do // Цикл по строкам begin
s:=w[i];
DelZnakP(s);
nws:=StrToWord(s, ws);// Слов в строке
for j:=1 to nws do // Цикл по словам в строке begin
//writeln(ws[j]); // Отладка если надо inc(nwr); wr[nwr]:=ws[j];
end;
end;
//3. Сохранить в новом файле файле.
//При каждом запуске файл 'PZI_F10textWord.txt‘
//будет создаваться заново.
AssignFile(ft,'PZI_F10textWord.txt');
Rewrite(ft);// Создать файл для записи for i:=1 to nwr do writeln(ft, wr[i]);
CloseFile(ft);
Примеры алгоритмов.
Приведенные ниже алгоритмы предполагают, что дальнейшая обработка ведется на уровне лексем, т.е. строк, состоящих из одной словоформы будь то «истинное» слово или число или то и другое вместе, но без разделителей.
Для этого необходимо сформировать словарь лексем и записать его в текстовый файл, т.е. выполнить программу, рассмотренную ранее. Если в качестве исходного текстового файла используется текст самой программы, то
целесообразно дополнить список разделителей, используемых в DelZnakP(s).
Const ZnakP : set of Char= ['.',',',':',';','?','!','=','-','/',
'(',')','{','}','[',']',''''];