2016-09-11 4 views
2

Скажем, у меня предложение: «Джон любит принимать его домашнее животное баранину в его Lamborghini Huracan больше, чем в его Lamborghini Gallardo» и у меня есть словарь, содержащий «Lamborghini», " Lamborghini Gallardo "и" Lamborghini Huracan ". Каков хороший способ извлечения смелых терминов, достижения терминов «Lamborghini Gallardo» и «Lamborghini Huracan» в качестве фразовых совпадений и других частичных матчей «Lamborghini» и «lamb»? Предоставление предпочтения фразе соответствует отдельным ключевым словам.Частичное и полное фразовый

Эластичный поиск обеспечивает точное совпадение сроков, совпадение фразы и частичное совпадение. Точный срок, очевидно, не будет работать здесь, и ни одна из них не соответствует фразе, поскольку в этом случае все предложение считается фразой. Я считаю, что частичное совпадение было бы уместным, если бы у меня были только ключевые слова, представляющие интерес для предложения. Просматривая предыдущие SO-потоки, я нашел proximity for relevance, который кажется уместным, хотя не уверен, что это «лучший вариант», поскольку требует установки порога. Или даже если есть более простые/лучшие альтернативы, чем elasticsearch (что больше похоже на полнотекстовый поиск, а не на простое сопоставление ключевых слов с базой данных)?

ответ

2

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

[Курсивом условия выше, чтобы помочь вам найти соответствующие ответы на SO и Google]


Этот уровень анализа принимает вас немного из стека поиска в стек обработки естественного языка. Поскольку НЛП имеет тенденцию быть ресурсоемким, он имеет тенденцию проходить в автономном режиме или в случае поисковых запросов в индекс-время.

Чтобы осуществить это, нужно:

  1. Интегрировать инструмент для извлечения ключевой фразы, в код поиска индексации, чтобы сгенерировать список распознаваемых ключевых фраз для каждого документа.
  2. Укажите эти ключевые фразы как shingles в новое поле поиска Elasticsearch.
  3. Включите это поле ключевой фраки в список полей, поиск по времени запроса - скорее всего, с повышением баллов.

Для быстрого выигрыша, который поможет вам с контролируемым изъятием ключевой фразы, зарегистрируйтесь KEA (написан в java).

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

+0

Спасибо за ваш информативный ответ Питер. Поскольку мой словарь содержит ключевые слова и фразы, которые я хочу сопоставить (вместо документов), черепица не требуется для базы данных, нет? Я думал об использовании черепицы, наоборот; создайте черепицу из пользовательских терминов поиска, затем либо выполните «нормальные» точные совпадающие запросы с этими черепицами, чтобы идентифицировать битрамы или триграммы, либо использовать частичное совпадение и усиление оценки для самой длинной согласованной черепицы (сделанной по умолчанию). Таким образом, я могу также проверить орфографические ошибки, а также определить ключевые фразы. Имеет ли это смысл? – dter

+1

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

+0

Таким образом, я надеялся, что черепица позволит сопоставлять биграмм/триграмм, нечеткий фильтр позволит использовать опечатки, усиление даст самое близкое соответствие, а синонимы - синонимы. Удивительно, если этот подход более простой и более/одинаково) эффективен как обучение модели распознавания имен по имени ... – dter

Смежные вопросы