среда, 25 апреля 2007 г.

Back to basics

Посмотрел предыдущие посты и понял, что про реализацию переводчика я практически ничего и не написал. Исправляюсь. Не секрет, что любой компьютерный переводчик - ошибается. Иногда - сильно. (Почему про это забыли ПРОМТовцы - я не имею ни малейшего представления). Поэтому система изначально спроектирована под работу с несколькими вариантами перевода, т.е.:
  • каждое английское слово имеет несколько вариантов перевода
  • каждое английское предложение также имеет несколько вариантов перевода

В общем виде, реализованный мной алгоритм перевода выглядит так:

  1. Получение текста для перевода.
  2. Лексический анализ
  3. Преобразование разбитого на элементы текста во внутреннее представление (TextParser)
  4. Для каждого предложения текста производится поиск всех вариантов перевода для каждого слова предложения
  5. Выполняется первичный синтаксический анализ. Его особенность в том, что применяемые правила должны быть 100% истинными (без исключений/неясностей). Например, для словосочетания "his hand" можно сразу отбросить варианты перевода-глаголы для слова hand.
  6. Генерируются варианты предложения. Их особенность в том, что у каждого слова в предложении должны быть переводы только одной части речи (соотв. в другом варианте предложения - у этого слова будут переводы другой части речи)
  7. Для каждого варианта предложения опять запускаем синтаксический анализ
  8. Формируем русские предложения по английским
  9. Склоняем все слова в каждом варианте русских предложений
  10. Формируем текст для пользователя

Ну, до кучи, там еще меняются приоритеты некоторых вариантов перевода слова (как захочет пользователь) и предложений, ну и некоторые другие действия.

Конечно, у многих сразу возникает вопрос - как много вариантов перевода предложения будет генерироваться и насколько сильно такой подход требователен к памяти/процессору?

Отвечаю: на текущий момент, при 1500 слов в словаре, в среднем по 0,77 перевода на слово более 16 вариантов перевода предложения не было получено ни разу. При этом процесс перевода тестового фрагмента (29 кб текст, кусок книжки) длится на Athlon 3000+ порядка 6 секунд. Этот же текст в ПРОМТе переводится не менее 10 мин. (Ну понятно, что когда будет реализован хоть какой-то алгоритм семантического анализа скоростные показатели изменятся, но пока что...)

Разрабатываемый сейчас алгоритм поиска фраз будет находиться между 4-ым и 5-ым пунктами.

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

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