PostgreSQL: поиск предложений, наиболее близких к данному предложению
947 просмотра
2 ответа
У меня есть таблица изображений с заголовками предложений. Учитывая новое предложение, я хочу найти изображения, которые лучше всего соответствуют ему, основываясь на том, насколько близко новое предложение к сохраненным старым предложениям.
Я знаю, что могу использовать @@
оператор с, to_tsquery
но tsquery
принимает конкретные слова в качестве запросов.
Одна проблема в том, что я не знаю, как преобразовать данное предложение в значимый запрос. В предложении могут быть знаки препинания и цифры.
Однако я также чувствую, что мне нужно что-то вроде косинусного сходства, но я не знаю, как получить это из PostgresQL. Я использую последнюю версию GA и с удовольствием использую версию для разработчиков, если это решит мою проблему.
Автор: Real Geek N Источник Размещён: 12.07.2019 11:35Ответы (2)
4 плюса
Полнотекстовый поиск (FTS)
Вы можете использовать plainto_tsquery()
для (в соответствии с документацией ) ...
производить
tsquery
игнорирование пунктуации
SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
plainto_tsquery
------------------
'sentenc' & 'irrelev' & 'word' & 'punctuat'
Используйте это как:
SELECT *
FROM tbl
WHERE to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
Но это все еще довольно строго и только обеспечивает очень ограниченную терпимость к подобию.
Сходство триграмм
Может лучше подходить для поиска сходства , даже в некоторой степени преодолевать опечатки.
Установите дополнительный модуль pg_trgm
, создайте индекс GiST и используйте оператор подобия%
в поиске ближайшего соседа :
В основном, с индексом GiST триграммы sentence
:
-- SELECT set_limit(0.3); -- adjust tolerance if needed
SELECT *
FROM tbl
WHERE sentence % 'My new sentence'
ORDER BY sentence <-> 'My new sentence'
LIMIT 10;
Больше:
- Быстрый поиск похожих строк в PostgreSQL
- Поиск похожих постов с помощью PostgreSQL
- Медленный полнотекстовый поиск по терминам с высоким уровнем встречаемости
Объединить оба
Вы даже можете объединить FTS и сходство триграмм:
Автор: Erwin Brandstetter Размещён: 05.01.2016 05:041 плюс
ответ довольно поздний, но я добавляю на всякий случай. Если вы добавите «: *» в конце слов, это вызовет аналогичные. Пример: JS autocomlete -> Codeigniter:
штрих-код = $ this-> input-> get ("term"). "*";
Запрос: $ query = 'select * from tablaneme где xx @@? LIMIT 15 '; $ barcodequery = $ this-> db-> query ($ query, array (explode ("", $ barcode)))) -> result_array ();
Автор: Savaş Hasçelik Размещён: 12.06.2019 11:59Вопросы из категории :
- postgresql Как выбрать n-ую строку в таблице базы данных SQL?
- postgresql Как конкатенировать строки поля строки в запросе PostgreSQL?
- postgresql Возможно ли выполнять кросс-запросы к базе данных с PostgreSQL?
- postgresql Хранение изображений в PostgreSQL
- postgresql Привилегии PostgreSQL 8.3 не обновлены - неправильное использование?
- full-text-search Что такое полнотекстовый поиск против LIKE
- full-text-search Инструменты для поиска строк внутри файлов без индексации
- full-text-search Есть ли чистый Python Lucene?
- full-text-search Как я могу управлять релевантностью полнотекстового поиска MySQL, чтобы сделать одно поле более «ценным», чем другое?
- full-text-search Ошибка MySQL: «Столбец столбца» не может быть частью индекса FULLTEXT »
- tf-idf Python: tf-idf-cosine: найти сходство документа
- tf-idf точное определение вектора запроса в модели векторного пространства
- tf-idf Могу ли я использовать CountVectorizer в scikit-learn, чтобы подсчитать частоту документов, которые не использовались для извлечения токенов?
- tf-idf Вес функции tf-idf с использованием sklearn.feature_extraction.text.TfidfVectorizer
- tf-idf Корпус с фразами
- cosine-similarity Может ли кто-нибудь привести пример сходства косинусов очень простым графическим способом?
- cosine-similarity Можно ли нормализовать косинус-сходство?
- cosine-similarity Вычислить подобие косинуса с учетом 2 строк предложения
- cosine-similarity Какой самый быстрый способ в Python для вычисления косинусного сходства, учитывая разреженные данные матрицы?
- cosine-similarity Python панды: Нахождение косинусного сходства двух столбцов