Ответ 1
Вы должны проверить статью Петра Норвига о реализации проверки орфографии в нескольких строках python: Как написать корректор орфографии Он также имеет ссылки для реализаций на других языках (например, С#)
Возможный дубликат:
Как вы реализуете "Вы имели в виду" ?
Я пишу приложение, где мне нужна функциональность, похожая на Google, "вы имели в виду?" функция, используемая их поисковой системой:
Есть ли исходный код для такой вещи или где я могу найти статьи, которые помогут мне создать собственный?
Вы должны проверить статью Петра Норвига о реализации проверки орфографии в нескольких строках python: Как написать корректор орфографии Он также имеет ссылки для реализаций на других языках (например, С#)
Я посетил семинар инженером Google полтора года назад, где они говорили об их подходе к этому. Ведущий говорил, что (по крайней мере, часть) их алгоритм не имеет большого интеллекта; а использует огромные объемы данных, к которым они имеют доступ. Они определили, что если кто-то ищет "Бриттани Спирс", не нажимает ни на что, а затем выполняет другой поиск "Бритни Спирс" и нажимает на что-то, мы можем честно догадываться о том, что они искали, и могут предположить, что в будущее.
Отказ от ответственности: это может быть только часть их алгоритма
Python имеет модуль под названием difflib
. Он предоставляет функциональность под названием get_close_matches
. Из документации Python:
get_close_matches(word, possibilities[, n][, cutoff])
Верните список лучших "хороших достаточно" совпадений. слово - последовательность для которых требуются близкие совпадения (обычно строка) и возможности - это список последовательностей, с которыми нужно сопоставлять word (обычно список строк).
Дополнительный аргумент n (по умолчанию
3
) - максимальное число закрытий совпадения для возврата; n должно быть больше0
.Необязательный параметр cutoff (по умолчанию
0.6
) является поплавком в диапазоне [0, 1]. Возможности, которые не забивают по крайней мере, это похоже на слово игнорируются.Лучшее (не более n) совпадение среди возможностей возвращаются в списке, отсортированном по сходству оценка, наиболее похожее первое.
>>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
['apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('apple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
Может ли эта библиотека помочь вам?
Вы можете использовать http://developer.yahoo.com/search/web/V1/spellingSuggestion.html, который даст аналогичную функциональность.
Вы можете проверить исходный код Xapian, который предоставляет эту функциональность, а также множество других библиотек поиска. http://xapian.org/
Я не уверен, что он служит вашей цели, но String Edit. Алгоритм со словарем может быть достаточным для небольшого приложения.
Я бы посмотрел эту статью на Google бомбардировки. Он показывает, что он просто предлагает ответы на основе ранее введенных результатов.
АФАЙК "ты имел в виду?" функция не проверяет правописание. Это дает вам другой запрос на основе контента, проанализированного Google.
Великую главу к этой теме можно найти в открытой публикации Введение в информационный поиск.
U может использовать ngram для сравнения: http://en.wikipedia.org/wiki/N-gram
Использование модуля python ngram: http://packages.python.org/ngram/index.html
import ngram
G2 = ngram.NGram([ "iis7 configure ftp 7.5",
"ubunto configre 8.5",
"mac configure ftp"])
print "String", "\t", "Similarity"
for i in G2.search("iis7 configurftp 7.5", threshold=0.1):
print i[0], "\t", i[1]
U получаем:
>>>
String Similarity
"iis7 configure ftp 7.5" 0.76
"mac configure ftp 0.24"
"ubunto configre 8.5" 0.19
взгляните на Levenshtein-Automata