эффективный алгоритм для проверки орфографии в документе HTML - PullRequest
0 голосов
/ 24 декабря 2009

У меня есть HTML-документ, список типичных орфографических ошибок и правильное написание для каждого случая. Документы HTML будут содержать до ~ 50 страниц, а количество исправлений орфографии составляет ~ 30 000.

Как эффективный способ исправить все орфографические ошибки в этом HTML-документе?
(Примечание: моя реализация будет на Python, если вы знаете какие-либо соответствующие библиотеки.)


Я подумал о 2 возможных подходах:

  • построить хеш-таблицу данных орфографии
  • парсинг текста из HTML
  • разбить текст по пробелам на токены
  • если маркер в хэш-таблице орфографии заменить на исправление
  • создание нового HTML-документа с обновленным текстом

Этот подход потерпит неудачу для исправлений орфографии из нескольких слов, которые будут существовать. Ниже приведен более простой, но, казалось бы, менее эффективный подход, который будет работать для нескольких слов:

  • повторять данные правописания
  • поиск слова в документе HTML
  • если слово существует, заменить на исправление

Ответы [ 2 ]

3 голосов
/ 24 декабря 2009

Вы правы, что первый подход будет НАМНОГО быстрее, чем второй (кроме того, я бы рекомендовал рассмотреть Попытки вместо прямого хэша, экономия пространства будет весьма существенной для 30 тыс. Слов).

Чтобы по-прежнему иметь возможность обрабатывать случаи из нескольких слов, вы можете либо отслеживать предыдущий токен и, таким образом, проверять свой хэш на наличие комбинированной строки, такой как «prev cur».

В противном случае вы можете исключить исправления из нескольких слов из хэша и объединить два подхода: сначала использовать хэш для отдельных слов, а затем выполнить сканирование для комбинации из нескольких слов (или наоборот). Это все еще может быть относительно быстро, если количество исправлений из нескольких слов относительно мало.

Будьте осторожны, вытащить жетоны слов сложнее, чем просто разбить пробел. Вы не хотите исправлять ошибку просто потому, что не нашли 'instence' с запятой в своем хэше.

2 голосов
/ 25 декабря 2009

Я согласен с предложением Роба об использовании дерева, основанного на символах, потому что я программировал алгоритм исправления орфографии много лет назад, основываясь на том, что словарь правильных слов хранится как дерево. Используя ветвление и привязку, я смог предложить, возможно, правильное написание слов с ошибками (на расстояние Левенштейна ). Кроме того, поскольку trie - это просто большой конечный автомат, довольно легко добавить общие префиксы и суффиксы, поэтому он может обрабатывать такие «слова», как «постнационализаторские».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...