sql - 字符串列中单词的频率
问题描述
我正在寻找一个可以让我
想象这是一张“News_Articles”表,有两列:“ID”和“Headline”。我怎样才能从这个显示中得到结果
NEWS_ARTICLES
ID | 标题 |
---|---|
0001 | 今日新闻:今天的地方选举! |
0002 | 今天 COVID-19 利率下降 |
0003 | 今天是在当地购物的日子 |
- 每行一个字(来自标题栏)
- 它出现在多少个唯一 ID 中的计数
- 单词在整个数据集中出现的总次数
期望的结果
单词 | Unique_Count | 总数 |
---|---|---|
今天 | 3 | 4 |
当地的 | 2 | 2 |
选举 | 1 | 1 |
理想情况下,我们也希望从单词中删除任何连词(请参阅上面的“今天”被视为“今天”)。
我还希望能够删除诸如“the”或“a”之类的填充词。理想情况下,这将通过一些现有的库,但如果没有,我总是可以手动删除我看到的带有 where 子句的库。
如果需要,我还会将所有字符更改为小写。
谢谢!
解决方案
您可以使用全文搜索并unnest
提取词位,然后聚合:
SELECT parts.lexeme AS word,
count(*) AS unique_count,
sum(cardinality(parts.positions)) AS total_count
FROM news_articles
CROSS JOIN LATERAL unnest(to_tsvector('english', news_articles.headline)) AS parts
GROUP BY parts.lexeme;
word │ unique_count │ total_count
═══════╪══════════════╪═════════════
-19 │ 1 │ 1
covid │ 1 │ 1
day │ 1 │ 1
drop │ 1 │ 1
elect │ 1 │ 1
local │ 2 │ 2
news │ 1 │ 1
rate │ 1 │ 1
shop │ 1 │ 1
today │ 3 │ 4
(10 rows)
推荐阅读
- javascript - 使用momentjs从范围内获取几个月和几周
- serverless-framework - 在无服务器中使用标签时 API Gateway 中缺少标签
- arduino - 优化转换函数(字符串到字节)
- javascript - 将数据绑定到角度复选框
- laravel - 创建具有多个一对多关系值的数据列表
- google-app-engine - Google Cloud 函数能否与 Appengine 共享数据存储?
- neural-network - 使用“咖啡时间”对 alexnet 测试进行基准测试
- nginx - 为什么 nginx 不测试所有可用位置?
- python - Visual Studio Code - 具有自动完成功能的 Python 交互式数据科学 REPL
- traefik - Traefik - 重定向不适用于没有斜杠的 PathPrefixStrip