查询以显示对应的每个不同单词的计数
query to display count of corresponding each distinct word
table 中有一列最多可存储 4000 个字符。因此,对于给定的行,我们需要编写一个查询来显示句子中对应的每个不同单词的计数。
例如该列有 "Jack and Jill went up a hill. Jack came tumbling down"
Output :
<Word> - <Count>
Jack - 2
Jill - 1
hill - 1
and - 1
a - 1
came - 1 ... and so on
首先,将单词转换成行,然后进行分组。
在此查询中,我们使用 CONNECT BY
行生成的基本概念。
例如:
select level from dual CONNECT BY level <= 10;
上面的查询将生成 10 行。(分层查询)。
基于这个简单的逻辑,现在我们要计算这里的空格数,并生成那么多行。REGEXP_COUNT(str,'[^ ]+')
会给出句子中的空格数。
然后使用级别,从每行的句子中提取一个词。 REGEXP_SUBSTR(str,'[^ ]+',1,level)
会这样做。
您可以尝试使用此查询来处理其他情况。祝你好运。
with tokenised_rows(str) as(
SELECT REGEXP_SUBSTR('Jack and Jill went up a hill. Jack came tumbling down','[^ ]+',1,LEVEL)
FROM dual
CONNECT BY level <= REGEXP_COUNT('Jack and Jill went up a hill. Jack came tumbling down','[^ ]+')
)
select str,count(1) from tokenised_rows
group by str;
由于您标记了 Teradata
,您可以将 STRTOK_SPLIT_TO_TABLE
用于分词部分。只需将更多字符添加到分隔符列表即可:
with cte as
(select
1 as keycol,
'Jack and Jill went up a hill. Jack came tumbling down' as col)
select keycol, token, count(*) as cnt
FROM TABLE (STRTOK_SPLIT_TO_TABLE(cte.keycol, cte.col,
' .,;:-?!()''"') -- list of separators
RETURNS (keycol INTEGER,
tokennum INTEGER,
token VARCHAR(100) CHARACTER SET UNICODE)
) AS d
group by 1,2
order by 1, cnt desc
但是统计单词可能要复杂得多,因为它通常包括分词、词干提取和停用词。
table 中有一列最多可存储 4000 个字符。因此,对于给定的行,我们需要编写一个查询来显示句子中对应的每个不同单词的计数。
例如该列有 "Jack and Jill went up a hill. Jack came tumbling down"
Output :
<Word> - <Count>
Jack - 2
Jill - 1
hill - 1
and - 1
a - 1
came - 1 ... and so on
首先,将单词转换成行,然后进行分组。
在此查询中,我们使用 CONNECT BY
行生成的基本概念。
例如:
select level from dual CONNECT BY level <= 10;
上面的查询将生成 10 行。(分层查询)。
基于这个简单的逻辑,现在我们要计算这里的空格数,并生成那么多行。REGEXP_COUNT(str,'[^ ]+')
会给出句子中的空格数。
然后使用级别,从每行的句子中提取一个词。 REGEXP_SUBSTR(str,'[^ ]+',1,level)
会这样做。
您可以尝试使用此查询来处理其他情况。祝你好运。
with tokenised_rows(str) as(
SELECT REGEXP_SUBSTR('Jack and Jill went up a hill. Jack came tumbling down','[^ ]+',1,LEVEL)
FROM dual
CONNECT BY level <= REGEXP_COUNT('Jack and Jill went up a hill. Jack came tumbling down','[^ ]+')
)
select str,count(1) from tokenised_rows
group by str;
由于您标记了 Teradata
,您可以将 STRTOK_SPLIT_TO_TABLE
用于分词部分。只需将更多字符添加到分隔符列表即可:
with cte as
(select
1 as keycol,
'Jack and Jill went up a hill. Jack came tumbling down' as col)
select keycol, token, count(*) as cnt
FROM TABLE (STRTOK_SPLIT_TO_TABLE(cte.keycol, cte.col,
' .,;:-?!()''"') -- list of separators
RETURNS (keycol INTEGER,
tokennum INTEGER,
token VARCHAR(100) CHARACTER SET UNICODE)
) AS d
group by 1,2
order by 1, cnt desc
但是统计单词可能要复杂得多,因为它通常包括分词、词干提取和停用词。