- необходимо создать список всех фраз в базе данных.
- перебрать все слова в предложении на предмет вхождения в полученный список.
- для каждого слова, для которого на предыдущем этапе были найдены фразы необходимо проверить близлежащие слова, чтобы выбрать правильные варианты
(ну и попутно есть некторые проблемы связанные с конкретной реализацией класса TMStr. Вообщем-то это не настолько существенно, но еще усложняет алгоритм)
Стоит ли говорить о том, что такой подход - медленнен? Поиск по базе с выбором всех вариантов, проверка всех слов на совпадение с выбранными первыми словами фраз и т.п. - циклы, циклы, циклы...
Буквально на днях реализовал другую мысль - перевод английской фразы задается у первого слова фразы, но к этому варианту перевода добавляются дополнительные условия.
Рассмотрим , например, предлог because of: это производная форма от слова because с "пристегнутым" к нему предлогом of. Соответственно, перевод данной фразы задаем у слова because, но дополнительно указываем, что после этого слова должен стоять предлог of.
Чем такой лучше? Если учесть то, как работает система в целом - он идеально в нее вписывается: морфологический анализатор определяется исходные формы слов фразы, после чего производится поиск всех возможных вариантов перевода слов. Соответственно, перевод фразы также будет добавлен к слову because.
И вот тут в дело вступает алгоритм поиска фраз, который выбирает те слова, у которых есть варианты перевода - английские фразы (обращаю внимание - именно английские, т.к. есть еще и русские фразы - переводы английских слов и фраз) и проверяет условия фразы. При совпадении условий выполняет заданные действия.
В принципе, это все. Однако, если бы все было настолько просто - никаких вопросов бы и не возникло.
Проблемы:
- фразы могу быть написаны по разному: shut up, shut the hell up и т.п.
- разные формы основных и "пристегнутых" слов дают разные фразы: going to и go to - это разные фразы (ну... в большинстве случаев, просто пример получше как-то не придумывается).
- думаю стоит упомянуть, что во фразе могут быть слова не в исходной форме, при этом эти слова могут отсутствовать в словаре или же там может быть задан перевод не той части речи, что использован во фразе -> алгоритм морфологического анализа на этих словах даст неверный результат, что не позволит обнаружить фразу
- для некоторых фраз существуют слова-модификаторы, не являющиеся частью фразы, но прямо влияющие на ее перевод (пример был раньше: going to do и going to)
Возможно еще что-то забыл, когда вспомню - допишу.
Ну с п.3 я сделать ничего не могу по-определению.
п.1. Можно задать специальный вид слова фразы (регулярное выражение?), который будет позволять задавать условия вида shut smth up. Реализуемо, вообщем-то. Конечно, хотелось бы чего-нибудь попроще...
п.2. Ввести в параметры перевода основного (первого) слова фразы отдельное поле для параметров, которыми должно обладать английское слово в предложении, чтобы этот вариант перевода мог быть добавлен к слову.
п.4. Ну, опять-таки можно задать отдельный список (в какой форме?) этих слов-модификаторов... Надо думать...
О! Кстати, вокруг всего этого еще и неопределенность с границами фраз есть например: so beautiful as far as i know...
Есть идеи? Замечания?
Комментариев нет:
Отправить комментарий