алгоритм машинного обучения для проверки орфографии

У меня есть список названий лекарств (regular_list) и список новых имен (new_list). Я хочу проверить, присутствуют ли имена в new_list уже в обычном_списке или нет. Проблема в том, что имена new_list могут иметь некоторую опечатку ошибок, и я хочу, чтобы эти имена считались соответствующими обычному списку. Я знаю, что использование stringdist — это решение проблемы, но мне нужен алгоритм машинного обучения.


person rohit    schedule 22.08.2013    source источник
comment
возможный дубликат машинного обучения для преодоления опечаток   -  person Ferdinand.kraft    schedule 11.09.2013


Ответы (1)


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

С одной стороны, вы можете вычислить edit distance между заданным словом x и каждым из словарных слов d_i. Кроме того, вы можете тренировать классификатор по словам

c(d_i, distance(x,d_i)) 

возвращает True (класс 1), если заданное расстояние редактирования было изучено как достаточное, чтобы считать x версией d_i с ошибкой. Это может дать вам более общую модель, чем без использования машинного обучения, так как у вас могут быть разные пороги для каждого словарного слова (некоторые слова пишутся с ошибками чаще, чем другие), но, очевидно, вы должны подготовить обучающий набор в форме (misspelled_word, correct_one) (и добавьте также (correct_one, correct_one).

Вы можете использовать любой тип двоичного классификатора для такой задачи, который может работать с «реальными» входными данными.

person lejlot    schedule 22.08.2013
comment
продолжение проблемы выше. Обычный список моей базы данных содержит около 150 000 слов, тогда как новый список содержит около 350 000 слов. Для расчета расстояния между двумя элементами потребуется (150 000 * 350 000 поисковых запросов). Он работает очень очень медленно. Пожалуйста, могу ли я найти лучший способ - person rohit; 26.08.2013
comment
Есть десятки способов ускорить процесс. Вы можете создавать различные типы индексации, которые отсекают части базы данных, для которых расстояние слишком велико, чтобы их можно было рассматривать (что можно сделать за постоянное время, например, хешируя 3-буквенные префиксы и 3-буквенные суксифы и ища только те, чей префикс или суффикс идеально подходит). Для большого поиска вам следует рассмотреть возможность использования существующих поисковых систем, таких как, например. lucene lucene.apache.org/core - person lejlot; 26.08.2013
comment
может ли любая база данных может быть использована для решения этой проблемы. предположим, что я поместил две таблицы как регулярный_список и новый _список. затем с помощью запроса я могу сравнить вышеупомянутое расстояние и позволить базе данных вернуть решение соответственно???? - person rohit; 30.08.2013