Java — исправление ошибок в именах

Я пытаюсь создать алгоритм, который выполняет исправление ошибок в именах. Мой подход состоит в том, чтобы иметь базу данных с правильными именами, вычислить расстояние редактирования между каждым из них и введенным именем, а затем предложить 5 или 10 ближайших.

Эта задача значительно отличается от стандартной коррекции ошибок в словах, поскольку некоторые имена могут быть заменены инициалами. Например, «Джонатан Смит» и «Дж. Смит» на самом деле довольно близки и могут легко рассматриваться как одно и то же имя, поэтому расстояние редактирования должно быть действительно небольшим, если не 0. Другая проблема заключается в том, что некоторые имена могут быть написаны по-разному при звучании так же. Например Shnaider а также Schneider это версии с одинаковыми именами, написанные людьми с разными локалями (я думаю, есть лучшие примеры). И еще один случай — просто представьте все возможные ошибки при написании Jawaharlal Nehru большинство из которых не имеют ничего общего с настоящим именем. Опять же, вероятно, большинство из них будут похожи фонетически.

Очевидно, что алгоритм исправления ошибок Lucene мне здесь не поможет, так как он не обрабатывает описанные выше случаи.

Поэтому мой вопрос: знаете ли вы какую-либо библиотеку, способную исправлять ошибки в именах? Можете ли вы предложить какой-то алгоритм для обработки случаев, упомянутых выше?

Я заинтересован в библиотеках в C ++ или Java. Что касается предложений алгоритма, то подойдет любой язык или псевдокод.

7

Решение

Для фонетического соответствия, см. Саундэкс.

Я думаю, что модификация алгоритма расстояния Левенштейна, чтобы трактовать «сокращать до начального» и «расширять из начального» как редактирование с одним расстоянием, должна быть простой, но детали на данный момент мне не известны.

6

Другие решения

Вы также можете посмотреть на Metaphone.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector