Где я могу узнать больше о поиске в Google "вы имели в виду" алгоритм?

Возможный дубликат:
Как вы реализуете "Вы имели в виду" ?

Я пишу приложение, где мне нужна функциональность, похожая на Google, "вы имели в виду?" функция, используемая их поисковой системой:

alt text

Есть ли исходный код для такой вещи или где я могу найти статьи, которые помогут мне создать собственный?

Ответ 1

Вы должны проверить статью Петра Норвига о реализации проверки орфографии в нескольких строках python: Как написать корректор орфографии Он также имеет ссылки для реализаций на других языках (например, С#)

Ответ 2

Я посетил семинар инженером Google полтора года назад, где они говорили об их подходе к этому. Ведущий говорил, что (по крайней мере, часть) их алгоритм не имеет большого интеллекта; а использует огромные объемы данных, к которым они имеют доступ. Они определили, что если кто-то ищет "Бриттани Спирс", не нажимает ни на что, а затем выполняет другой поиск "Бритни Спирс" и нажимает на что-то, мы можем честно догадываться о том, что они искали, и могут предположить, что в будущее.

Отказ от ответственности: это может быть только часть их алгоритма

Ответ 3

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']

Может ли эта библиотека помочь вам?

Ответ 5

Вы можете проверить исходный код Xapian, который предоставляет эту функциональность, а также множество других библиотек поиска. http://xapian.org/

Ответ 6

Я не уверен, что он служит вашей цели, но String Edit. Алгоритм со словарем может быть достаточным для небольшого приложения.

Ответ 7

Я бы посмотрел эту статью на Google бомбардировки. Он показывает, что он просто предлагает ответы на основе ранее введенных результатов.

Ответ 8

АФАЙК "ты имел в виду?" функция не проверяет правописание. Это дает вам другой запрос на основе контента, проанализированного Google.

Ответ 10

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