понедельник, 23 апреля 2007 г.

Лексический анализ

С вводной частью пока что закончили... Перейдем к описанию отдельных этапов перевода. Первым у нас будет лексический анализ. Основные цели лексического анализатора в разрабатываемой системе это:
  • выделение слов и знаков препинания в тексте
  • определение и пометка границ предложений и абзацев

Первоначально алгоритм был довольно примитивным: более-менне корректно помечались концы предложений, а потом перед каждым знаком препинания ставился пробел, двойные пробелы удалялись, а получившийся текст нарезался по пробелам. Естественно, что долго так жить было нельзя :) Поэтому родился тот ужас что есть сейчас. Встречаем:

- текст режется на отдельные элементы, т.е. слова (числа воспринимаются как слова) и знаки препинания.

- на выходе получаем массив элементов текста. Для каждого элемента расставляются следующие свойства:

  • кол-во пробелов до начала элемента (если элемент - не первый в предложении, то оно всегда 0)
  • кол-во пробелов после элемента
  • маркер конца предложения
  • маркер конца абзаца

- после чего сложные знаки препинания склеиваются, т.е. "..." будет восприниматься как один элемент, а не как 3 разных.

- помимо этого, лексический анализатор активно взаимодействует со словарем для того, чтобы корректно обрабатывать различные сокращения (например "Mr." и т.п.)

По окончании работы алгоритма получаем массив промаркированных элементов текста, который и отдаем TTextParser на растерзание.

Комментариев нет:

Отправить комментарий