如何使用SQL(BigQuery)计算TF / IDF
发布时间:2021-01-22 12:55:36 所属栏目:MsSql教程 来源:网络整理
导读:我正在对reddit注释进行文本分析,我想在BigQuery中计算TF-IDF. 解决方法 此查询适用于5个阶段: 获取我感兴趣的所有reddit帖子.规范化单词(LOWER,只有字母和’,unescape一些HTML).将这些单词拆分为数组. 计算每个文档中每个单词的tf(术语频率) – 计算它在每
|
我正在对reddit注释进行文本分析,我想在BigQuery中计算TF-IDF. 解决方法此查询适用于5个阶段:>获取我感兴趣的所有reddit帖子.规范化单词(LOWER,只有字母和’,unescape一些HTML).将这些单词拆分为数组. 此查询通过将获取的值传递到链上,在一次传递中设法执行此操作. #standardSQL
WITH words_by_post AS (
SELECT CONCAT(link_id,'/',id) id,REGEXP_EXTRACT_ALL(
REGEXP_REPLACE(REGEXP_REPLACE(LOWER(body),'&','&'),r'&[a-z]{2,4};','*'),r'[a-z]{2,20}'?[a-z]+') words,COUNT(*) OVER() docs_n
FROM `fh-bigquery.reddit_comments.2017_07`
WHERE body NOT IN ('[deleted]','[removed]')
AND subreddit = 'movies'
AND score > 100
),words_tf AS (
SELECT id,word,COUNT(*) / ARRAY_LENGTH(ANY_VALUE(words)) tf,ARRAY_LENGTH(ANY_VALUE(words)) words_in_doc,ANY_VALUE(docs_n) docs_n
FROM words_by_post,UNNEST(words) word
GROUP BY id,word
HAVING words_in_doc>30
),docs_idf AS (
SELECT tf.id,tf.tf,ARRAY_LENGTH(tfs) docs_with_word,LOG(docs_n/ARRAY_LENGTH(tfs)) idf
FROM (
SELECT word,ARRAY_AGG(STRUCT(tf,id,words_in_doc)) tfs,ANY_VALUE(docs_n) docs_n
FROM words_tf
GROUP BY 1
),UNNEST(tfs) tf
)
SELECT *,tf*idf tfidf
FROM docs_idf
WHERE docs_with_word > 1
ORDER BY tfidf DESC
LIMIT 1000
(编辑:天瑞地安资讯网_瑞安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 将每日时间表分组为[开始日期;结束日期]与工
- sql – 如何使用Excel VBA获取新插入记录的ID?
- SQL SERVER临时表排序问题的解决办法
- sql-server – 如何防止Sql Server作业同时运行
- sql-server – DL380p-Gen8 D2700适用于SQL 2012标准版的适
- sql-server – SQL Server CASE语句是否评估所有条件或在第
- wcf – 如何从自定义位置读取app.config,即从.NET中的数据库
- 在SQL代理作业中运行C#代码
- 数据库 – 是否可以使用主键的字符值?
- 将行转换为SQL Server 2008 R2中的列
站长推荐
热点阅读

