Оптимизированный поиск с использованием поиска и поиска
У меня есть проблема, которую нужно решить, которая кажется мне довольно сложной, но я не могу найти, как подойти к этой проблеме. Я попробовал поискать в Google, но не нашел какого-то конкретного направления для продолжения.
Я ищу некоторые указатели, идеи, соответствующие материалы, названия некоторых алгоритмов и т. Д.
проблема
Составьте список названий книг. Например, с текстом "Если позволите, я буду смеяться и жить, как принц Шарм". Возможный список книг будет
- Если бы я мог
- Я буду смеяться сегодня вечером
- Смейся и живи в Тимбакто
- Как принц Шарм
Желательно иметь короткий список, подобный приведенному выше, а не длинный список, подобный.
- Если я умру
- Я могу умереть сегодня вечером
- Я буду рождена свыше
- Смеяться и плакать
- Живи как король
- Принц Елена в беде
- Очарование жизни на горе
- ...
Что доступно
Доступен API для библиотеки, который предоставляет сервис поиска и поиска. Поиск выполняет конкретные поиски по названию книги, где в качестве поиска приводится список книг по заданному ключевому слову (ам).
Некоторые дополнительные ограничения
- Что мы можем сделать, чтобы сделать результат максимально коротким? Можем ли мы найти оптимальное решение?
- Как мы можем минимизировать непревзойденные слова?
- Как мы можем использовать локальное обналичивание для улучшения поиска частых предложений?
Спасибо
1 ответ
Наивным решением может быть следующее:
Для каждого слова в вашем поиске найдите все подходящие названия книг.
Затем для каждого кандидата вычислите показатель корреляции между токенизированным названием книги и всеми словами в вашем поиске.
Базовая корреляционная функция может быть что-то вроде:
public double correlation(String[] a, String[] b, int offset)
{
double ret = 0.;
int maxI = Math.min(a.length, b.length - offset);
for(int i = 0 ; i < maxI ; i++)
{
ret += a[i].equals(b[i+offset]) / maxI;
}
}
Параметр смещения используется для того, чтобы быть устойчивым к сдвигу.
Затем вы можете отсортировать названия книг с этим счетом.
ура