Jon*_*Jon 6 sql tf-idf sql-server-2008
我的数据库中有一个包含自由文本字段列的表.
我想知道每个单词出现在所有行上的频率,或者甚至可以为所有单词计算TF-IDF,其中我的文档是每行的字段值.
是否可以使用Sql查询来计算?如果没有或有更简单的方法,请指导我吗?
非常感谢,
乔恩
在SQL Server 2008中,根据您的需要,您可以对列应用全文索引,然后查询sys.dm_fts_index_keywords和sys.dm_fts_index_keywords_by_document 表值函数以获取出现次数.
编辑:实际上,即使没有创建持久的全文索引,您仍然可以利用解析器
WITH testTable AS
(
SELECT 1 AS Id, N'how now brown cow' AS txt UNION ALL
SELECT 2, N'she sells sea shells upon the sea shore' UNION ALL
SELECT 3, N'red lorry yellow lorry' UNION ALL
SELECT 4, N'the quick brown fox jumped over the lazy dog'
)
SELECT display_term, COUNT(*) As Cnt
FROM testTable
CROSS APPLY sys.dm_fts_parser('"' + REPLACE(txt,'"','""') + '"', 1033, 0,0)
WHERE TXT IS NOT NULL
GROUP BY display_term
HAVING COUNT(*) > 1
ORDER BY Cnt DESC
Run Code Online (Sandbox Code Playgroud)
返回
display_term Cnt
------------------------------ -----------
the 3
brown 2
lorry 2
sea 2
Run Code Online (Sandbox Code Playgroud)