SQL Server 2008中列中出现的所有单词的字数

Pat*_*bug 5 sql sql-server word-count word-frequency

我有一个叫做'ticket_diary_comment'列的表叫做'comment_text'.此列填充了文本数据.我想得到整个专栏中出现的所有单词的频率.例如:

Comment_Text
I am a good guy
I am a bad guy
I am not a guy
Run Code Online (Sandbox Code Playgroud)

我想要的是:

Word    Frequency
I       3
good    1
bad     1
not     1
guy     3
Run Code Online (Sandbox Code Playgroud)

请注意,我还删除了输出中的停用词.我知道计算一个特定单词的频率并不困难,但我正在寻找能够计算一列中出现停用词的所有单词的东西.

我很感激在这个问题上提供任何帮助.我还想提一下,我必须在大数据集(大约1 TB)上应用此查询,因此性能是一个问题.

Wil*_* P. 4

我将使用表值函数来拆分字符串,然后将它们分组到查询中。像这样的东西:

SELECT item, count(1)
FROM ticket_diary_comment 
    CROSS APPLY dbo.fn_SplitString(comment_text, ' ')
GROUP BY item
Run Code Online (Sandbox Code Playgroud)

以及 的定义fn_SplitString

CREATE FUNCTION [dbo].[fn_SplitString]   
(   
    @String VARCHAR(8000),   
    @Delimiter VARCHAR(255)   
)   
RETURNS   
@Results TABLE   
(   
    ID INT IDENTITY(1, 1),   
    Item VARCHAR(8000)   
)   
AS   
BEGIN   
INSERT INTO @Results (Item)   
SELECT SUBSTRING(@String+@Delimiter, num,   
    CHARINDEX(@Delimiter, @String+@Delimiter, num) - num)   
FROM Numbers   
WHERE num <= LEN(REPLACE(@String,' ','|'))   
AND SUBSTRING(@Delimiter + @String,   
            num,   
            LEN(REPLACE(@delimiter,' ','|'))) = @Delimiter   
ORDER BY num RETURN   
END   
Run Code Online (Sandbox Code Playgroud)

这个函数需要一个数字表,它基本上只是CREATE TABLE Numbers(Num int)包含从 1 到 10,000 的所有数字(或根据需要更多/更少)。如果您的数据库中已经有一个数字表,您可以用该表/列替换您已有的表/列。