【发布时间】:2015-06-06 09:15:57
【问题描述】:
例如,如果我有 1000 行数据,其中包含客户 ID(例如 123)及其在我们产品上的 cmets(例如易于使用的出色产品)
如何使用 Teradata(版本 15)进行词频计数,以便输出有两列,一列包含单词,另一列包含频率,例如(伟大:20,产品:10)?
谢谢
【问题讨论】:
-
最后的输出是一个词云,词的大小是基于频率的。
标签: sql teradata word-cloud
例如,如果我有 1000 行数据,其中包含客户 ID(例如 123)及其在我们产品上的 cmets(例如易于使用的出色产品)
如何使用 Teradata(版本 15)进行词频计数,以便输出有两列,一列包含单词,另一列包含频率,例如(伟大:20,产品:10)?
谢谢
【问题讨论】:
标签: sql teradata word-cloud
您可以使用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
这会将 cmets 字段中的每个单词拆分为单独的记录,然后计算每个单词的出现次数。只需将您自己的<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
【讨论】:
< 和> 符号中。我只是用那些标记它们。此外,如果您遇到更多问题,请使用 TD_SYSFNLIB.strtok_split_to_table 作为函数名称,如果它仍然犹豫不决。最后,我从我自己的系统中添加了一些用于快速测试的位。