SEMANTICKEYPHRASETABLE: примеры (SQL)
SEMANTICKEYPHRASETABLE(table, column [, source_key]): tableОписание функции SEMANTICKEYPHRASETABLE
Функция SEMANTICKEYPHRASETABLE входит в состав компонента полнотекстового и семантического поиска Microsoft SQL Server. Ее основная задача заключается в извлечении ключевых фраз из текста, хранящегося в указанном столбце таблицы. Эти фразы представляют собой наиболее релевантные и значимые словосочетания в тексте, что полезно для автоматического реферирования, анализа тональности, категоризации и улучшения поиска.
Функция используется в запросах SELECT в предложении FROM как возвращающая табличное значение (table-valued function). Ее применение актуально в системах анализа документов, новостных лент, отзывов пользователей или любой другой текстовой информации, где требуется выявить основные темы.
Аргументы функции
table: Имя таблицы или представления, содержащей столбец с индексированным текстом. Указывается в форматеdatabase_name.schema_name.table_name.column: Имя индексированного столбца, из которого извлекаются ключевые фразы. В столбце должен быть настроен семантический индекс.key_column: Имя уникального ключевого столбца таблицы (обычно первичный ключ).source_key: (Необязательный) Конкретное значение ключевого столбца (key_column). Если указано, функция возвращает ключевые фразы только для строки с этим значением. Если аргумент опущен, возвращаются фразы для всех строк в таблице или представлении.
Возвращаемые значения
Функция возвращает таблицу с тремя столбцами:
keyphrase: Текст ключевой фразы, извлеченной из исходного текста.score: Относительная важность (релевантность) данной ключевой фразы в контексте исходного документа. Значение представляет собой дробное число. Более высокий балл указывает на большую значимость фразы.document_key: Значение ключевого столбца (key_column) для строки (документа), из которой была извлечена фраза.
Примеры использования SEMANTICKEYPHRASETABLE
Пример с указанием конкретного документа (source_key).
SELECT TOP 5 keyphrase, score, document_key
FROM SEMANTICKEYPHRASETABLE
(
dbo.Articles,
ArticleText,
ArticleID,
105 -- ID конкретной статьи
) AS SP
ORDER BY score DESC;keyphrase score document_key ----------------------- ---------------------- ------------ анализ данных 0.618347227573395 105 машинное обучение 0.52203232049942 105 большие данные 0.455123722553253 105 SQL Server 0.389455050230026 105 облачные вычисления 0.30123457312584 105
Пример получения ключевых фраз для всех документов в таблице.
SELECT TOP 10 SKP.keyphrase, SKP.score, SKP.document_key, A.Title
FROM SEMANTICKEYPHRASETABLE
(
dbo.Articles,
ArticleText
) AS SKP
INNER JOIN dbo.Articles AS A ON SKP.document_key = A.ArticleID
ORDER BY SKP.score DESC;keyphrase score document_key Title ---------------- ----------- ------------ -------------------------- кибербезопасность 0.7501234 204 Угрозы нового десятилетия искусственный интеллект 0.69845 105 Будущее ИИ отладка кода 0.512389 156 Советы разработчикам ... ... ... ...
Похожие функции MS SQL
FREETEXTTABLE: Осуществляет полнотекстовый поиск по смыслу, а не по точному совпадению слов. Возвращает релевантные строки и оценку релевантности. Используется, когда нужно найти документы по неструктурированному запросу, но не требуется извлекать ключевые фразы из самих документов.CONTAINSTABLE: Выполняет точный или взвешенный полнотекстовый поиск с использованием сложных условий (NEAR, AND, OR). Возвращает совпадающие строки. Предпочтительна для точного поиска терминов, фраз, синонимов или слов в определенной близости друг от друга.SEMANTICSIMILARITYTABLE: Функция семантического поиска, которая находит документы, семантически похожие на указанный документ. Возвращает идентификаторы похожих документов и оценку сходства. Используется для рекомендаций "похожие документы".
Выбор функции зависит от задачи: SEMANTICKEYPHRASETABLE извлекает ключевые фразы из текста, SEMANTICSIMILARITYTABLE ищет похожие документы, а FREETEXTTABLE и CONTAINSTABLE предназначены для поиска документов по запросу.
Аналоги в других СУБД и языках
Прямых встроенных аналогов SEMANTICKEYPHRASETABLE в других СУБД обычно нет, так как это специализированная функция семантического анализа. Однако существуют альтернативные подходы и расширения.
PostgreSQL (с расширением ts_stat или сторонними библиотеками): Извлечение часто встречающихся словосочетаний.
SELECT word, ndoc, nentry FROM ts_stat('SELECT to_tsvector(''simple'', body_text) FROM articles') ORDER BY nentry DESC LIMIT 5;word | ndoc | nentry ------------+------+-------- данных | 45 | 120 программирования | 32 | 98 ... | ... | ...
Python (библиотеки NLP, например, spaCy, rake-nltk, yake): Гибкое извлечение ключевых слов вне СУБД.
import yake
text = "Статья о машинном обучении и анализе данных..."
kw_extractor = yake.KeywordExtractor()
keywords = kw_extractor.extract_keywords(text)
for kw, score in keywords[:3]:
print(f"{kw}: {score}")машинное обучение: 0.023 анализ данных: 0.045 нейронные сети: 0.098
Oracle Text: Использует компонент CTX_DOC для анализа. Функция CTX_DOC.THEMES извлекает основные темы, что концептуально ближе.
DECLARE
themes CTX_DOC.THEME_TAB;
BEGIN
CTX_DOC.THEMES('news_index', '123', themes);
FOR i IN 1..themes.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(themes(i).theme || ' ' || themes(i).weight);
END LOOP;
END;Ключевое отличие MS SQL функции — ее глубокая интеграция в ядро СУБД и работа в рамках транзакций, в то время как внешние библиотеки предоставляют больше алгоритмов настройки.
Типичные ошибки
- Отсутствие семантического индекса: Функция требует предварительного создания семантического индекса на целевом столбце.
-- Ошибка: Для столбца ArticleText не существует семантического индекса.
SELECT * FROM SEMANTICKEYPHRASETABLE(dbo.Articles, ArticleText);Msg 4129, Level 16, State 1, Line 1 Для полнотекстового или семантического поиска в полнотекстовом индексе "FT_Articles" для столбца "ArticleText" не включен статистический семантический поиск.
- Указание несуществующего столбца или таблицы: Приводит к ошибке разрешения объектов.
SELECT * FROM SEMANTICKEYPHRASETABLE(dbo.NonexistentTable, WrongColumn);Msg 208, Level 16, State 1, Line 1 Недопустимое имя объекта 'dbo.NonexistentTable'.
- Использование функции без соединения, когда ожидаются данные из связанной таблицы: Может привести к неполным результатам, если не выполнен
JOINпоdocument_key.
-- Возвращает только ключевые фразы и ID, без названий статей.
SELECT keyphrase, score FROM SEMANTICKEYPHRASETABLE(dbo.Articles, ArticleText);Изменения в последних версиях
Начиная с SQL Server 2017 и в SQL Server 2019, функция SEMANTICKEYPHRASETABLE не претерпела значительных синтаксических изменений. Однако, в этих версиях были общие улучшения компонента полнотекстового и семантического поиска, касающиеся производительности и стабильности.
Важное изменение связано с поддержкой: статистический семантический поиск, частью которого является эта функция, удален из SQL Server 2022 и более поздних версий, а также из Управляемого экземпляра SQL Azure. Это означает, что в будущих версиях данная функция доступна не будет. Для схожих задач рекомендуется использовать интеграцию с внешними службами машинного обучения или NLP-библиотеками.
Расширенные примеры
Пример 1: Группировка ключевых фраз по документам с агрегацией.
-- Получение трех наиболее значимых фраз для каждого документа
WITH RankedKeyPhrases AS (
SELECT
document_key,
keyphrase,
score,
ROW_NUMBER() OVER (PARTITION BY document_key ORDER BY score DESC) AS rn
FROM SEMANTICKEYPHRASETABLE(dbo.Articles, ArticleText)
)
SELECT
RKP.document_key,
A.Title,
RKP.keyphrase,
RKP.score
FROM RankedKeyPhrases AS RKP
INNER JOIN dbo.Articles AS A ON RKP.document_key = A.ArticleID
WHERE RKP.rn <= 3
ORDER BY RKP.document_key, RKP.score DESC;document_key Title keyphrase score ------------ --------------------- ------------------ ---------- 101 Введение в Python программирование 0.789 101 Введение в Python синтаксис 0.654 101 Введение в Python основы 0.521 102 Обзор новых технологий инновации 0.812 ... ... ... ...
Пример 2: Фильтрация ключевых фраз по минимальному порогу оценки.
-- Выбор только высокоуровневых фраз
SELECT
SKP.keyphrase,
SKP.score,
SKP.document_key,
A.PublicationDate
FROM SEMANTICKEYPHRASETABLE(dbo.Articles, ArticleText) AS SKP
INNER JOIN dbo.Articles AS A ON SKP.document_key = A.ArticleID
WHERE SKP.score > 0.5 -- Порог значимости
AND A.PublicationDate > '2023-01-01'
ORDER BY SKP.score DESC;Пример 3: Использование в сочетании с SEMANTICSIMILARITYTABLE для анализа тематики похожих документов.
-- Найти ключевые фразы для документов, похожих на статью с ID = 200
SELECT DISTINCT
SKP.keyphrase,
SUM(SKP.score) OVER (PARTITION BY SKP.keyphrase) AS total_score
FROM SEMANTICKEYPHRASETABLE(dbo.Articles, ArticleText) AS SKP
INNER JOIN SEMANTICSIMILARITYTABLE
(dbo.Articles, ArticleText, 200) AS SST
ON SKP.document_key = SST.matched_document_key
ORDER BY total_score DESC;keyphrase total_score ---------------- ----------- блокчейн 2.145678 криптовалюта 1.987654 ... ...
MS SQL SEMANTICKEYPHRASETABLE function comments
- Ms SQL SEMANTICKEYPHRASETABLE - аргументы и возвращаемое значение
- Функция sql SEMANTICKEYPHRASETABLE - описание
- SEMANTICKEYPHRASETABLE - примеры
- SEMANTICKEYPHRASETABLE - похожие методы на sql
- SEMANTICKEYPHRASETABLE на mySQL, Oracle, PostgreSQL, SQLite
- SEMANTICKEYPHRASETABLE изменения sql
- Примеры SEMANTICKEYPHRASETABLE на ms SQL