Где я могу найти некоторую статистику опечаток в реальном мире?
Я пытаюсь сопоставить входной текст людей с внутренними объектами, и люди склонны совершать орфографические ошибки.
Существует 2 вида ошибок:
опечатки
- «Helllo» вместо «Hello» / «Satudray» вместо «Saturday» и т. Д. Spelling
- «Shikago» вместо «Chicago» Я использую расстояние Дамерау-Левенштейна для опечаток и двойной метафон для орфографии (реализации Python здесь и здесь ). 12260] Я хочу сосредоточиться на Дамерау-Левенштейне (или просто edit-distance
). Реализации учебника всегда используют «1» для веса удалений, вставок, замен и транспозиций. Хотя это просто и допускает хорошие алгоритмы, оно не соответствует «реальности» / «вероятностям реального мира».
Примеры:
Какими должны быть веса «реального мира» для удалений, вставок, подстановок и транспозиций?
Даже Очень крутой корректор орфографии Норвиг использует невзвешенное расстояние редактирования.
Кстати, я уверен, что веса должны быть функциями, а не простыми числами (как указано выше
Какими должны быть веса «реального мира» для удалений, вставок, подстановок и транспозиций?
Даже Очень крутой корректор орфографии Норвиг использует невзвешенное расстояние редактирования.
Кстати, я уверен, что веса должны быть функциями, а не простыми числами (как указано выше примеры) ...
Я могу настроить алгоритм, но где я могу «узнать» эти веса? У меня нет доступа к данным в масштабе Google ...
Должен ли я их угадать?
РЕДАКТИРОВАТЬ - пытаясь ответить на вопросы пользователей:
Возможный источник статистики опечаток в реальном мире - Полная история правок Википедии.
http://download.wikimedia.org/
Также вас может заинтересовать RegExTypoFix от AWB
Я бы посоветовал вам проверить алогрифм триграммы . На мой взгляд, он лучше работает для поиска опечаток, чем алгоритм редактирования расстояния. Он также должен работать быстрее, и если вы храните словарь в базе данных postgres, вы можете использовать index.
Вы можете найти полезную тему stackoverflow о Google "Возможно, вы имели в виду"
Если исследование представляет для вас интерес, я думаю, что продолжение работы с этим алгоритмом, попытка найти достойные веса была бы плодотворной.
Я не могу помочь вам со статистикой опечаток, но я думаю, что вам также стоит поиграть с python's difflib. В частности, с методом ratio() в SequenceMatcher. Он использует алгоритм, который, как утверждается в документации http://docs.python.org/library/difflib.html, хорошо подходит для совпадений, которые "выглядят правильно", и может быть полезен для дополнения или проверки того, что вы делаете.
Для программистов на Python, просто ищущих опечатки, это хорошее место для начала. Один из моих коллег использовал и Levenshtein edit distance, и SequenceMatcher's ratio() и получил гораздо лучшие результаты от ratio().
Несколько вопросов для вас, которые помогут вам определить, следует ли вам задавать вопрос «где я могу найти реальные веса»:
Вы действительно измерили эффективность реализации единого взвешивания? Как?
Сколько у вас различных «внутренних объектов», т.е. каков размер вашего словаря?
Как вы на самом деле используете расстояние редактирования, например, Джон / Джоан, Мармадук / Мармедук, Фезерстонхау / Фезерстонхау: это «всего одна ошибка» или разница в 25% / 11,1% / 5,9%? Какой порог вы используете?
Сколько пар словарных статей находится в пределах вашего порога (например, Джон против Джоан, Джоан против Хуана и т. Д.)? Если вы ввели причудливую систему взвешивания, сколько пар словарных статей переместилось бы (а) изнутри порогового значения во внешнее (б) наоборот?
Что вы будете делать, если и Джон, и Хуан есть в вашем словаре и в пользователе типы Джоан?
Каковы штрафы / затраты (1) выбор неправильного слова из словаря (не того, которое имел в виду пользователь) (2) неспособности распознать ввод пользователя?
Будет ли на самом деле введение сложной системы взвешивания уменьшить вероятность двух вышеуказанных типов ошибок с достаточным запасом, чтобы оправдать усложнение и снижение скорости?
Кстати, как узнать, какую клавиатуру использовал пользователь?
Обновление:
"" "Мой текущий невзвешенный алгоритм часто дает сбой при обнаружении опечаток по указанным выше причинам." Return on Tursday ": каждый «реальный человек» может легко сказать, что четверг более вероятен, чем вторник, но они оба находятся на расстоянии 1 редактирования! (Да, я записываю и измеряю свою производительность)."" "
Да, четверг -> четверг, опуская" h ", но вторник -> четверг, заменяя" r "вместо" e ". E и R находятся рядом друг с другом на qwERty и azERty клавиатуры. Каждый «реальный человек» может легко предположить , что четверг более вероятен, чем вторник. Даже если статистика, а также предположения указывают на то, что четверг более вероятен, чем вторник (возможно, исключение h будет стоить 0,5 и e-> r будет стоить 0,75), будет ли разница (возможно, 0,25) достаточно значительной, чтобы всегда выбирать четверг? Может ли ваша система спросить: «Вы имели в виду вторник?» или она просто продвинется вперед с четвергом?