15 подписчиков
Причем, в тему ГОСТов и стандартов по транслицерации меня занесло именно по работе. Казалось бы, плевая задача - сравнивать получаемое значение, порой транслитерированное или даже переведенное на английский (неизвестно на входе), сопоставляя с таким же на русском языке. Причем, не только слова, но и словосочетания, порой даже перепутанные местами и со знаками пунктуации.
Казалось бы, в чем трудность сравнить "Zelenyi shershen" и "шершень, зеленый" ? А огромная, потому что делать это должен компьютер и без человеческого ассоциативного ряда живой ходячей нейронки, привыкшей за десятки лет классифицировать подобные параметры.
Хорошо, можно убрать все символы лишние и транслитерировать исходные значения, чтобы все были в рамках таблицы ASCII. Но что делать с вариантами транслитерации ? Я учитываю почти 30 штук, блин ! Да, их как у дурака фантиков, оказывается. И мы не знаем в каком из вариантов пришло слово. А может и не в нем вообще, или с ошибкой, или *вписать непредвиденное*.
Для этого каждая изначальная фраза на уровне базы бьется на токены (отдельные слова фразы), чтобы сравнивать каждое слово с каждым. Все, кажется вопрос решен ? Взял и сравнил посимвольно все входящие значения со всеми хранящимися. Фигушки ! На маленький словах даже незначительно отклонение от транслитерации может давать выход из диапазона допустимой погрешности. К примеру shershen и scherschen являются идентичными по сути словами, но если в лоб их сравнивать, то получится отличие на 25% от изначального. Можно применить алгоритм расчета расстояния Левенштейна, тогда строки отличаются лишь на 20%. А так как неизвестны варианты транслитерации, то приходится хранить все заранее просчитанные варианты, равно как и сравнивать с ними. Уже для этого использую у российской аналитической базы данных ClickHouse функцию сравнения строк через нессиметричную разность 4-граммного расстояния. В идеале, конечно,
1 минута
1 декабря 2022