- выделение слов и знаков препинания в тексте
- определение и пометка границ предложений и абзацев
Первоначально алгоритм был довольно примитивным: более-менне корректно помечались концы предложений, а потом перед каждым знаком препинания ставился пробел, двойные пробелы удалялись, а получившийся текст нарезался по пробелам. Естественно, что долго так жить было нельзя :) Поэтому родился тот ужас что есть сейчас. Встречаем:
- текст режется на отдельные элементы, т.е. слова (числа воспринимаются как слова) и знаки препинания.
- на выходе получаем массив элементов текста. Для каждого элемента расставляются следующие свойства:
- кол-во пробелов до начала элемента (если элемент - не первый в предложении, то оно всегда 0)
- кол-во пробелов после элемента
- маркер конца предложения
- маркер конца абзаца
- после чего сложные знаки препинания склеиваются, т.е. "..." будет восприниматься как один элемент, а не как 3 разных.
- помимо этого, лексический анализатор активно взаимодействует со словарем для того, чтобы корректно обрабатывать различные сокращения (например "Mr." и т.п.)
По окончании работы алгоритма получаем массив промаркированных элементов текста, который и отдаем TTextParser на растерзание.
Комментариев нет:
Отправить комментарий