Переводчик
От: Fahrain Россия ertranslator.narod.ru
Дата: 10.01.07 19:38
Оценка:
Собственно идея не нова Я уже несколько раз про свой проект писал на 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.