Как Вы реализуете, “Вы имели в виду”? [дубликат]

Для настраиваемого класса вам необходимо реализовать Equatable protocol.

import Foundation

func ==(l: MyClass, r: MyClass) -> Bool {
  return l.id == r.id
}

class MyClass: Equtable {
    init(id: String) {
        self.msgID = id
    }

    let msgID: String
}

let item = MyClass(3)
let itemList = [MyClass(1), MyClass(2), item]
let idx = itemList.indexOf(item)

printl(idx)
112
задан Community 23 May 2017 в 12:09
поделиться

15 ответов

На самом деле то, что делает Google, очень нетривиально и также сначала парадоксально. Они не делают ничего как проверка по сравнению со словарем, а скорее они используют статистику для идентификации "подобных" запросов, которые возвратили больше результатов, чем запрос, точный алгоритм не, конечно, известен.

существуют различные подпроблемы решить здесь как фундаментальное основание для всей статистики Обработки естественного языка, связанной существует у, нужно быть книга: Основа статистической обработки естественного языка .

Конкретно для решения проблемы подобия слова/запроса у меня были хорошие результаты с использованием Расстояние Редактирования , математическая мера строкового подобия, которое работает удивительно хорошо. Я раньше использовал Levenshtein, но другие может стоить изучить.

Soundex - по моему опыту - является дерьмом.

На самом деле эффективно хранение и поиск большого словаря слов с ошибками и наличия sub второе извлечение снова нетривиальны, Ваш лучший выбор состоит в том, чтобы использовать существующее полнотекстовое индексирование и поисковые системы (т.е. не Ваша база данных одна), которых Lucene в настоящее время является одним из лучших и по совпадению портированный ко многим много платформ.

86
ответ дан Boris Terzic 24 November 2019 в 02:52
поделиться

Реализация исправления орфографических ошибок для поисковых систем эффективным способом не тривиальна (Вы не можете только вычислить edit/levenshtein расстояние до каждого возможного слова). Решение на основе индексов k-грамма описано в Введение в Информационный поиск (полный текст, доступный онлайн).

0
ответ дан Fabian Steeg 24 November 2019 в 02:52
поделиться

Существует что-то названное aspell, который мог бы помочь: http://blog.evanweaver.com/files/doc/fauna/raspell/classes/Aspell.html

существует рубиновый драгоценный камень для него, но я не знаю, как говорить, это от python http://blog.evanweaver.com/files/doc/fauna/raspell/files/README.html

Вот кавычка от рубиновой реализации

Использование

, Aspell позволяет Вам проверить слова и предложить исправления. Например:

  string = "my haert wil go on"

  string.gsub(/[\w\']+/) do |word|
    if !speller.check(word)
      # word is wrong
      puts "Possible correction for #{word}:"
      puts speller.suggest(word).first
    end
  end

Это производит:

Возможное исправление для основы: сердечное Возможное исправление для wil: Будет

0
ответ дан 24 November 2019 в 02:52
поделиться

Soundex хорош для фонетических соответствий, но работает лучше всего с именами народов (он был первоначально разработан для данных переписи)

Также Полнотекстовое индексирование выезда, синтаксис отличается от логики Google, но это очень быстро и может иметь дело с подобными элементами языка.

0
ответ дан Keith 24 November 2019 в 02:52
поделиться

Soundex и "Носильщик, происходящий" (soundex тривиально, не уверен в носильщике, происходящем).

0
ответ дан Michael Neale 24 November 2019 в 02:52
поделиться

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

2
ответ дан Greg Ogle 24 November 2019 в 02:52
поделиться

Я думаю, что это зависит от как большой Ваш веб-сайт это. На нашей локальной Интранет, которая используется приблизительно 500 членами штата, я просто смотрю на поисковые фразы, которые возвратили нулевые результаты, и введите ту поисковую фразу с новой предложенной поисковой фразой в таблицу SQL.

я их обращаюсь к той таблице, если никакие результаты поиска не были возвращены, однако, это только работает, если сайт является относительно небольшим, и я только делаю это для поисковых фраз, которые наиболее распространены.

Вы могли бы также хотеть посмотреть на мой ответ на подобный вопрос:

4
ответ дан Community 24 November 2019 в 02:52
поделиться
4
ответ дан robaker 24 November 2019 в 02:52
поделиться

Я полагаю, что Google регистрирует все запросы и определяет, когда кто-то делает исправление орфографических ошибок. Это исправление может тогда быть предложено, когда другие предоставляют тот же первый запрос. Это будет работать на любой язык, на самом деле любая строка любых символов.

6
ответ дан Liam 24 November 2019 в 02:52
поделиться

Я предложил бы смотреть SOUNDEX для нахождения подобных слов в базе данных.

можно также получить доступ к Google собственный словарь при помощи Google API, записывающий запрос предложения .

6
ответ дан Espo 24 November 2019 в 02:52
поделиться

Можно хотеть посмотреть на Peter Norvig" , Как Записать Орфографический корректор " статья.

6
ответ дан FA. 24 November 2019 в 02:52
поделиться

Доктор Norvig Google обрисовал в общих чертах, как это работает; он даже дает 20ish строка реализация Python:

http://googlesystem.blogspot.com/2007/04/simplified-version-of-googles-spell.html

http://www.norvig.com/spell-correct.html

доктор Norvig также обсуждает, "сделал Вы имеете в виду" в этот превосходный разговор . Доктор Norvig глава исследования в Google - когда спросили, как "сделал Вы имеете в виду", реализован, его ответ authoritive.

Так его проверка правописания, по-видимому, с динамическим словарем создают из других поисков или даже фактических интернет-фраз и такого. Но это все еще проверка правописания .

SOUNDEX и другие предположения не вкладывают взгляд, людей!

35
ответ дан Will 24 November 2019 в 02:52
поделиться

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

12
ответ дан 24 November 2019 в 02:52
поделиться

Я делаю это с помощью Lucene Spell Checker .

1
ответ дан 24 November 2019 в 02:52
поделиться

Я был приятно удивлен, когда кто-то спросил, как создать самую современную система подсказок правописания для поисковых систем. Я работаю над этой темой более года для компании, занимающейся поисковыми системами, и могу указать на информацию по этой теме в открытом доступе.

Как упоминалось в предыдущем посте, Google (а также Microsoft и Yahoo!) не используют никаких предопределенных словарей и не нанимают орды лингвистов, размышляющих над возможными орфографическими ошибками в запросах. Это было бы невозможно из-за масштабов проблемы, а также из-за того, что неясно, действительно ли люди могут правильно определить, когда и если запрос написан с ошибкой.

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

Этот простой алгоритм отлично подходит для многих типов запросов. Если вы хотите перейти на следующий уровень, я предлагаю вам прочитать статью Microsoft Research по этой теме. Вы можете найти его здесь

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

Если вы хотите перейти на следующий уровень, я предлагаю вам прочитать статью Microsoft Research по этой теме. Вы можете найти его здесь

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

Если вы хотите перейти на следующий уровень, я предлагаю вам прочитать статью Microsoft Research по этой теме. Вы можете найти его здесь

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

12
ответ дан 24 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: