Добрый день.
А есть тут люди, кто писал алгоритм перевода с одного языка на другой с учётом словоформ в двух языках? Я пишу приложение которое позволяет читать сербские книги и переводить сербские слова на русский язык с учётом словоформы, т.е. kuca -> дом, kuce -> дома и т.д.
Вопрос такой, допустим в сербском словоформы к русскому языку ещё как то вяжутся. Для славянских языков базовый словарный перевод в читалке можно хорошо построить вокруг морфологии: словоформа → лемма → грамматические признаки (для этого есть готовые базы данных) → перевод. А что насчёт английского? Как вообще принять обрабатывать английские слова? В славянских языках с этим проще - слово является единственной атомарной леммой языка имеющий смысл, т.е. нажал на kuce - это дома. А в английском многое решают фразовые глаголы, частицы перед словами и т.д. например: find - искать, out - вне, выход, за пределы чего либо, а вместе find out - выяснять, разузнавать.
Мне не совсем понятно как матчить такое. В сербском я отслеживаю нажатие на слово N или же если двойной тап - то беру все предложение. Это легко организовать технически, что такое слово и что такое предложение понятно программируется. А как понять что в предложении "I found out the truth." или что ещё хуже, "I found it out yesterday." - тут фразовый глагол вообще разделён! Мы тут не говорим про LLM методы распознавание фразовых глаголов внутри приложения. Возможно есть давно написанный, простой и понятно реализованный алгоритм решающий эту проблему? Я читал, там нужно как то разбивать предложение и токенизировать каждое слово по отдельности, но до конца так и не понял концепцию. Объясните как к этому подступиться вообще?
Единица перевода в английском — не токен, а multiword expression: find out, look up, give up. При клике на found не надо сразу искать find — берёшь dep parse предложения, смотришь есть ли у глагола партикл с dep_ == "prt" (spaCy умеет из коробки). В "found it out" out всё равно прилинкован к found через dep, независимо от позиции — это именно работа парсера, не регэкс. Словарь хранишь отдельными статьями: find → искать, find out → выяснять, look up → смотреть в словаре.