Собственно идея не нова

Я уже несколько раз про свой проект писал на RSDN, но все-таки — вдруг кто заинтересуется?
Для тех, кто читал ранние посты — забудьте о том
как там все было реализовано
Проект является попыткой написать легко модифицируемую/расширяемую систему обработки текста, для получения его перевода (в принципе — начиналось все с переводчика, но всегда можно попробовать найти не традиционный способ ичпользования традиционных вещей

)
Как переводчик, предоставляет следующие основные возможности
— многовариантный перевод слов
— многовариантный перевод отдельных предложений
— единое представление единиц "слово" и "предложение" во всех частях алгоритма перевода
Моя идея в следующем:
— все элементы алгоритма перевода представляются в виде интерфейсов
— все интерфейсы загружаются динамически, таким образом, реализацию
любой части алгоритма можно легко заменить на другую — более удобную (естественно, при этом от удаляемой реализации не должны зависеть другие части алгоритма (именно на
реализацию, а не на ее интерфейс), думаю понятно почему

)
Структурная схема алгоритма тут:
http://img169.imagevenue.com/img.php?image=55125_classdiagram1_122_578lo.jpg
Комментарии по схеме (за названия классов/интерфейсов просьба сильно не бить

):
IGUIModule — интерфейс для плагинов к GUI — например, для того чтобы, например, в меню основной программы можно было легко встроить вызов специфического редактора бд или еще чего-нибудь (в том числе и какой-нибудь дополнительной функциональности)
TTextParser — реализация описания обратываемого текста. Базируется на интерфейсе
ITextParser — для того, чтобы мою реализацию GUI можно было смело выкинуть, если что
ISentence — описание одного предложения вместе со всеми его вариантами перевода
IParagraph — описание параграфа, состоящего из предложений. Соответсвенно — ITextParser состоит из списка параграфов.
ITextPos — текущее выбранное слово в тексте и его позиция в описании текста
ITextGenerator — занимается преобразованием из описания текста к тексту. Попросту говоря — генерирует текст перевода и оригинала (если вдруг и это надо)
ILexer — алгоритм лексического анализа, выполняет преобразование из текста к списку слов TMWord
TMWord — класс, содержащий в себе всю необходимую информацию о слове, как то:
— исходная форма
— начальная форма (то, как это слово выглядело до склонения)
— список параметров слова (род, число и т.п.)
— список частей речи слова — зависит от того, какие есть у слова переводы и от их частей речи
— дополнительные параметры, пока не важно, я думаю
TEStr — класс, описывающий исходное предложение. Содержит все необходимые функции для удаления, добавления слов, управления связями междлу словами. Также — умеет производить свертку последовательности слов, что позволяет представлять, например, словосочетания как одно слово (моя реализация алгоритма анализа этим активно пользуется)
TRStr — фактически — список слов из TEStr с их переводами. Его наличие позволяет упростить генерацию выходных текстов. Но об этом — потом
Самим процессом перевода управляет класс
TTextTranslator.
Перевод осуществляется построчно. Процесс перевода выглядит так:
— Определяются все исходные формы слов в предложении и получаются их варианты перевода. За это отвечает
IWordTranslator
— Последовательно вызываются все зарегистрированные в системе
IEStrProccessor. При помощи них можно производить, например, поиск фраз, анализ — вообщем любую обработку текста
— Вызывается IStrVariantsGenerator, который генерирует несколько вариантов "перевода" предложения. То есть те предложения, которые необходимо обрабатывать дальше, чтобы отбросить некорректные/неправильные. В моей реализации генерация производится по принципу: каждое слово в предложении имеет переводы только одной части речи.
— Последовательно вызываются все зарегистрированные в системе
IEStrProccessor2. Которые также производят анализ, но уже сгенерированных на предыдущем этапе вариантов перевода.
— Производится преобразование переводов предложения в формат TRStr и последовательно вызываются все зарегистрированные в системе
IRStrProccessor. На этом этапе, например, можно производить склонение/спряжение слов
По окончании обработки всех предложений генерируется выходной текст.
Примечание: на рисунке отдельно выделены блоки IWordTranslator и IDeclenser (интерфейс модуля для склонения слов). Причина — проект активно рефакторится. По идее — эти два блока должны относиться к IEStrProccessor и IRStrProccessor соответственно. Я над эти работаю
В идеале — TextTranslator также должен быть выполнен в виде динамически подгружаемого модуля.
Хотелось бы узнать мнение специалистов ну и вообще — покритикуйте

Может быть что-то поправлю пока еще не поздно.
Ну и вообще — вдруг кто заинтересуется и присоединится

Или же прикрутит свой алгоритм к моему
P.S.: то что вы видите — работающий проект. 18 версия

Даже переводит. Не то чтобы хорошо — но и не так чтобы совсем уж плохо. Но пока что упор я делаю именно на программную часть, правила перевода — дело наживное

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>