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)上应用此查询,因此性能是一个问题.
我将使用表值函数来拆分字符串,然后将它们分组到查询中。像这样的东西:
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 的所有数字(或根据需要更多/更少)。如果您的数据库中已经有一个数字表,您可以用该表/列替换您已有的表/列。
| 归档时间: |
|
| 查看次数: |
10120 次 |
| 最近记录: |