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