如何计算Teradata中的单词频率

时间:2015-04-01 16:07:44

标签: sql teradata word-cloud

例如,如果我有1000行数据,其中包含客户ID(例如123)及其对我们产品的评论(例如,易于使用的产品)

如何使用Teradata(版本15)进行字频计数,以便输出有两列,一列带有字,另一列带有频率,例如(太棒了:20,产品:10)?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用strtok_split_to_table将其关闭。

如下所示:

SELECT d.token, SUM(d.outkey)
FROM TABLE (strtok_split_to_table(1, <yourtable>.<yourcommentsfield>, ' ')
        RETURNS (outkey integer, tokennum integer, token varchar(20)character set unicode) ) as d 
GROUP BY 1

这会将您的评论字段中的每个单词拆分为单个记录,然后计算每个单词的出现次数。只需将自己的<yourtable>.<yourcommentsfield>放在那里,你应该好好去。

有关strtok_split_to_table的更多信息:http://www.info.teradata.com/HTMLPubs/DB_TTU_14_00/index.html#page/SQL_Reference/B035_1145_111A/String_Ops_Funcs.084.242.html

以下是我系统上测试的SQL和结果:

CREATE SET TABLE db.testcloud ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      customer VARCHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC,
      comments VARCHAR(1000) CHARACTER SET LATIN NOT CASESPECIFIC)
PRIMARY INDEX ( customer );


INSERT INTO testcloud (1, 'This is a test comment');
INSERT INTO testcloud (2, 'This is also comment of something');

SELECT d.token, SUM(d.outkey)
FROM TABLE (TD_SYSFNLIB.strtok_split_to_table(1, testcloud.comments, ' -/')
        RETURNS (outkey integer, tokennum integer, token varchar(20)character set unicode) ) as d 
GROUP BY 1

--token Sum(outkey)
--is    2
--also  1
--This  2
--of    1
--test  1
--a 1
--comment   2
--something 1