Статистическая проверка орфографии: общий подход и избегайте петель обратной связи
База данных, которую я создаю, имеет большое количество имен, которые часто повторяются. Однако многие имена имеют орфографические ошибки, и я хочу попытаться автоматически исправить орфографические ошибки. Я не знаю правильный список имен заранее.
Мой текущий подход состоял в том, чтобы вести список лучших N
имена вместе с их частотами в корпусе. Затем, когда новое имя вводится в базу данных, я нахожу имя, которое максимально term_freq(name) / edit_distance(new_name, name)
, То есть я нахожу существующее имя в топе N
имена, которые с наибольшей частотой делятся на расстояние редактирования между именем кандидата и кандидатом.
Это разумный подход к проверке имен? Я иду об этом неправильно?
Я обеспокоен тем, что если система обнаружит группу документов, которые неправильно пишут имя, они могут попасть в топ N
имена, а затем заставить все другие имена измениться.
1 ответ
Итак, во-первых... Я обязан сказать, что я подозреваю, что вы создадите больше проблем с этим, чем сохраните, и что вы, возможно, будете счастливее, просто требуя от всех правильного написания слов (и принимайте, что все сломается хороший, предсказуемый способ, если они этого не делают). При этом, если вы собираетесь делать вещи таким образом, я бы посмотрел на закон Байя:
P(H|E) = P(H) * P(E|H) / P(E)
(Это гласит: "Вероятность гипотезы с учетом определенных доказательств равна вероятности гипотезы, умноженной на вероятность доказательства с учетом гипотезы, деленную на вероятность доказательства".)
В этом случае вам следует учитывать вероятность того, что имя является неверно написанной версией другого имени, учитывая частоты и некоторые заранее определенные ожидания относительно вероятности опечаток:
P(H)
будет вероятность (некоторое количество конкретных опечаток | длина имени)P(E)
будет основной вероятностью увидеть это имя (для этого я буду хранить неизмененный список всех введенных слов)P(E|H)
будет сумма вероятностей всех имен, которые (некоторое количество опечаток) от этого имени.
Я бы тогда сравнил результаты этого с вероятностью того, что они были правы в первую очередь, т.е. P(Zero Typos| Length of Name) * P(This Spelling)
,