Переводчик
От: 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>>
Re: Переводчик
От: Аноним  
Дата: 17.01.07 21:36
Оценка:
по-простому: а где брать словари?
Re[2]: Переводчик
От: Fahrain Россия ertranslator.narod.ru
Дата: 21.01.07 08:59
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>по-простому: а где брать словари?


Ручками набивать

На самом деле словарь — это только маленькая часть переводчика. Там кроме пар англ.слово->перевод еще куча дополнительной информации нужно (параметры слов: род, например + склонение/спряжение для слов). Но все это в моей реализации алгоритма. Алгоритм сделан так, что любой его кусок можно заменить какую-либо иную реализацию. Соответственно, если у кто-то занимается, например, исследованием текстов — то процесс разработки программы можно сильно сократить, т.к. все что нужно уже есть, а чего нет — можно прикрутить самостоятельно
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Переводчик
От: Аноним  
Дата: 22.01.07 06:12
Оценка:
F>На самом деле словарь — это только маленькая часть переводчика. Там кроме пар англ.слово->перевод еще куча дополнительной информации нужно (параметры слов: род, например + склонение/спряжение для слов). Но все это в моей реализации алгоритма.

------
а ты с переводчиками общался? Для них главное не алгоритм а перевод. Посмотри на лингво, промт. Там огромные словари с уклоном в разные виды деятельности типа медицинского или финансового. Без этого любой алгоритм ничего не стоит.

Кстати, грамматика (правила перевода для твоего алгоритма) это тоже большой объём информации. Может для аглицкого ты сам что-то напишешь но для финского или японского вряд ли. Причём английский, как ты знаешь, бывает американский, британский, австралийский.


Итого: только академический интерес.
Re[4]: Переводчик
От: Fahrain Россия ertranslator.narod.ru
Дата: 22.01.07 17:36
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>а ты с переводчиками общался? Для них главное не алгоритм а перевод.


Конечная цель не в этом. Разрабатываемая система является базой для того, чтобы те самые переводчики могли проверить свои предположения, алгоритмы, и вообще — что угодно

Представь что тебе пришла в голову идея как улучшить результат перевода.
1. Берем ПРОМТ... Плюем и выбрасываем — нет практически никакой возможности как-то повлиять на результат. То что есть — ну этого мало.
2. решаем писать свое — ну хотя бы чтобы посмотреть, а вдруг то что мы придумали работает?
Итак, надо написать:
1. Словарь (научиться работать с чужим или написать полностью свой)
— ну, естественно, интерфейс для ввода данных в словарь
2. Жизненно-необходимые алгоритмы:
а) лексический анализ
б) морфологический анализ
в) поиск фраз
г) синтаксический анализ
д) алгоритм склонения/спряжения слов
3. Ну, естественно — интерфейс для взаимодействия с пользователем. Хотя бы чтобы текст можно было ввести и получить результат

Это по-минимуму. Каждая из этих задач достаточно сложна. Каждая — требует времени на разработку хотя бы в самом черновом варианте, дико медленном и обладающем кучей недостатков.
Результат: ради того, чтобы реализовать интересную идею необходимо потратить раз в 200 больше времени на вещи, которые к этой самой идее отношения не имеют вообще, но без них ее реализовать невозможно!

Более приземленно: допустим мы решили писать хороший алгоритм, например, морфологического анализа. Лексер кто писать будет? А словарь, без которого морфоанализатор работать будет... Хм, а не будет он работать

Так вот, в данном прокете, все элементы алгоритма перевода/интерфейса пользователя (кроме совсем уж базовых) легко заменяемы. Тогда, для приведенного примера, все что нужно сделать — это реализовать только алгоритм морфологического анализа, использовав стандартный интерфейс и встроив его в мою программу. Экономия времени, я думаю очевидна?

Тебе не нравится мой словарь? Да флаг тебе в руки! Напиши нечто вроде прокси между лингво и моим переводчиком — и будет у тебя крутой словарь

P.S.: пример из жизни: когда я только начинал писать алгоритм синтаксического анализа на основе правил, мне пришлось потратить почти месяц на написание парсера файла с данными (имеющими сильно разветвленную структуру). При этом даже через год я ловил в нем ошибки (в то время xml еще не был так популярен, да и писал я тогда на С++, что тоже сыграло большую роль). Однако сам алгоритм я написал в течение 4-х часов (правда без этих самых правил, этот алгоритм работать не мог)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Переводчик - public beta
От: Fahrain Россия ertranslator.narod.ru
Дата: 25.02.07 11:13
Оценка:
Вчерне завершил все модификации в переводчике. Посмотреть переводчик и документацию к нему можно тут: http://ertranslator.narod.ru/ERTranslateIt_25_02_2007.rar

На данный момент:

— все элементы алгоритма перевода представляются в виде интерфейсов
— все модули обработки загружаются динамически, таким образом, реализацию любой части алгоритма можно легко заменить на другую или добавить свой обработчик

С вопросами обращаться или тут, или по адресу pankov2 at mail.ru
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Переводчик - public beta
От: Fahrain Россия ertranslator.narod.ru
Дата: 10.03.07 15:54
Оценка:
Возникла интересная проблема, может кто подкажет?

Суть: алгоритм перевода построен на цепочке вызовов функций-обработки предложений (ProcessString). Среди примерно десятка алгоритмов имеем такие:
1. алгоритм сортировки вариантов перевода слова в соответствии с предпочтением пользователя
2. алгоритм синтаксического анализа

Алгоритм синтаксического анализа выполняет определенные действия над словами в предложении, в частности — может добавить новое слово (соответственно, для этого слова берутся переводы из базы данных). И вот тут возникает следующая проблема: переводы нельзя отсортировать, т.к. синтаксический анализатор не знает о сортировщике (я надеюсь понятно почему? Т.к. сортировщик может написать кто угодно), а сортировщик — не знает о том, что синтаксический анализатор будет вставлять слова и более того — алгоритм сортировки применяется до этапа синтаксического анализа

Как лучше решить эту проблему? А то у меня идей совсем нет...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Переводчик
От: Аноним  
Дата: 18.03.07 10:10
Оценка:
да кому нужен алгоритм без словарей? Никому, так, поиграться. Ты ж его даже с промптом сравнить не сможешь т.к. баз нет.

Открытый проект по формату обмена мультиязыковых словарных баз

http://xdxf.revdanica.com/

много словарей, описание формата есть там же. Попробуй с ними объединиться если сможешь
Re[2]: Переводчик
От: alt-vision  
Дата: 02.05.07 10:36
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>по-простому: а где брать словари?

А чем не угодны словари от стардикта?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Переводчик
От: alpha21264 СССР  
Дата: 06.06.07 15:44
Оценка:
Здравствуйте, Fahrain, Вы писали:

F>Здравствуйте, <Аноним>, Вы писали:


А>>а ты с переводчиками общался? Для них главное не алгоритм а перевод.


F>Конечная цель не в этом. Разрабатываемая система является базой для того, чтобы те самые переводчики могли проверить свои предположения, алгоритмы, и вообще — что угодно


А чем тебя вот этот велосипед не устраивает?
http://www.prawda.newmail.ru

Течёт вода Кубань-реки куда велят большевики.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.