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





написать заполнить (10)


Я бы взглянул на эту статью о бомбардировке 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






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




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







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




Python имеет модуль под названием difflib . Он предоставляет функциональность, называемую get_close_matches . Из документации Python:

get_close_matches(word, possibilities[, n][, cutoff])

Верните список лучших «хороших» матчей. word - последовательность, для которой требуются близкие совпадения (обычно строка), а возможности - это список последовательностей, с которыми сопоставляется слово (как правило, список строк).

Необязательный аргумент n (по умолчанию 3 ) - максимальное количество совпадающих совпадений для возврата; n должно быть больше 0 .

Необязательный параметр cutoff (по умолчанию 0.6 ) - это float в диапазоне [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']

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




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

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




Наборы данных / инструменты, которые могут быть полезны:

Вы можете использовать WordNet в качестве простого словаря терминов, и вы можете увеличить его с помощью частых терминов, извлеченных из корпуса.

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

Вместо этого я предлагаю вам использовать что-то вроде чувствительного к местоположению хэширования (LSH). Это обычно используется для обнаружения дубликатов документов, но оно будет работать так же хорошо, как и исправление орфографии. Вам понадобится список терминов и строк терминов, извлеченных из ваших данных, которые, по вашему мнению, люди могут искать, вам нужно будет выбрать длину отсечки для строк. Альтернативно, если у вас есть данные о том, что люди на самом деле ищут, вы можете использовать это. Для каждой строки терминов вы создаете вектор (возможно, символьные биграммы или триграммы будут делать трюк) и сохраните его в LSH.

При любом запросе вы можете использовать приблизительный поиск ближайшего соседа в LSH, описанный Charikar чтобы найти ближайшего соседа из вашего набора возможных совпадений.

Примечание: ссылки удалены, поскольку я новый пользователь - извините.





algorithm nlp spell-checking