Релевантность документа нескольким ключевым словам

Предположим, что D — это текстовый документ, и

K = < k1, ..., kN >

представляет собой набор терминов, содержащихся в документе. Например:

D = "What a wonderful day, isn't it?"
K = <"wonderful","day">

Моя цель — посмотреть, говорит ли документ D обо всех словах в K в целом. Например:

D = "The Ebola in Africa is spreading at high speed"
K = <"Ebola","Africa">

это случай, когда D сильно связано с K, а:

D = "NEWS 1: Ebola is a dangerous disease that is causing thousands of deaths. Many governments are taking precautions to prevent its spread. NEWS 2: population in Africa is increasing."
K = <"Ebola","Africa">

это случай, когда D не связано с K, поскольку «Эбола» и «Африка» упоминаются в разных местах документа, в отдельных предложениях и не связаны между собой.

Как я могу синтезировать эту концепцию «родства» D с K? Есть ли какая-то современная технология, которую можно использовать?

Спасибо.


person Eleanore    schedule 12.03.2015    source источник


Ответы (2)


Вероятно, вам нужна векторная пространственная модель.

Вы можете преобразовать D в тот же формат, что и K, список слов, например. ‹"Что", "а", "чудесный", "день", "не" "это">. Это делается чем-то, что называется токенизатором.

После этого вы можете удалить бесполезные слова, которые не имеют значения, такие как «и», «это», «это» и т. д. Слова, которые нужно удалить, называются стоп-слова, сохраненные в стоп-листе.

Вы также должны преобразовать все слова в нижний регистр (или даже в верхний регистр), чтобы «что» и «что» не классифицировались как разные слова.

После этого документ можно представить в виде списка слов и их частотности (взгляните на перевернутый указатель).

Вычислите косинусное сходство между документом (D) и запросом (K).

person jksnw    schedule 31.03.2015

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

Конкретное решение: я заметил, что у вас есть маркеры абзаца в ваших документах, а именно «Новости:». Вы можете рассматривать содержимое этих маркеров как свои единицы индексации, что позволит вам получить оценки поиска для этих абзацев. В качестве шага после поиска вы можете вычислить оценку поиска на уровне документа путем агрегирования (среднего или максимального) оценок отдельных абзацев.

Общее решение:

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

Это то, что широко используют поисковые системы.

person Debasis    schedule 13.03.2015