Сходство двух терминов содержит орфографические ошибки - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь определить сходство между двумя терминами; одна написана правильно, а другая может содержать или не содержать орфографическую ошибку (и).

Чтобы сделать это прямо сейчас, я векторизовываю оба термина, используя TFIDFvectorizer, затем использую метод сходства, чтобы определить сходство между ними.

Это работает для следующих типов примеров:

Original term  | Input term  |  Similarity
---------------------------------------
red car        | red car     |  1.0
red car        | big red car |  0.75

Однако, если есть орфографическая ошибка, такая как:

Original term  | Input term  |  Similarity
------------------------------------------
red car        | redd carr   |  0.0

Это дает сходство 0, даже если они несколько похожи (я не исключаю, чтобы получить сходство 1.0, но стремимся получить сходство> 0.0.

Одно из соображений, которое я имел, состояло в том, чтобы разбить каждое слово на X символов, чтобы каждый термин был:

Original term = ['re', 'ed', 'd ', ' c', 'ca', 'ar']

Input term = ['re', 'ed', 'dd', 'd ', ' c', 'ca', 'ar', 'rr']

Затем определите их сходство по отношению друг к другу и вычислите среднее сходство.

Буду очень признателен за любые другие предложения относительно возможных подходов к этой проблеме.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Я бы предложил проверить следующую ссылку, где он показывает Как написать корректор орфографии .

Для целей tf-idf вас также может заинтересовать получение корня слов. Библиотека nltk, в частности часть stem() (см. Следующую ссылку ), может помочь вам в этом процессе. Однако, если ваша проблема заключается только в этих конкретных словах, вы можете просто создать функцию замены для этих орфографических ошибок и передать ее перед использованием tf-idf.

0 голосов
/ 27 июня 2018

Вам пригодится difflib anu? Я думаю, что это может быть направлено на более длинные последовательности.

In[1]: import difflib
In[5]: mr = difflib.SequenceMatcher()
In[7]: mr.set_seqs('red car', 'redd carr') 
In[8]: mr.ratio()
Out[8]: 0.875
In[9]: mr.set_seqs('red car', 'redd ship') 
In[10]: mr.ratio()
Out[10]: 0.5
...