如何在BigQuery的Stack Overflow标签中查找强关联核心标签?
在BigQuery中筛选Stack Overflow核心数据结构标签的解决方案
嘿,我明白你想要的——从Stack Overflow的问题里揪出和data-structures相关的核心数据结构标签,比如2-3-4 trees、binary-search-trees、dfs这类,同时把C++、Python这些语言标签踢出去对吧?之前尝试共现标签没完成,那咱们直接用BigQuery写个精准的查询就能搞定!
具体查询代码(带注释)
WITH language_tags AS ( -- 先定义要排除的常见语言标签列表,你可以根据需要补充更多 SELECT tag FROM UNNEST([ 'python', 'javascript', 'java', 'c++', 'c#', 'php', 'ruby', 'go', 'rust', 'swift', 'kotlin', 'typescript', 'c', 'bash', 'sql', 'html', 'css' ]) AS tag ), data_structure_questions AS ( -- 筛选出带有data-structures标签的所有问题 SELECT id, tags FROM `bigquery-public-data.stackoverflow.posts_questions` WHERE REGEXP_CONTAINS(tags, r'<data-structures>') ), cooccurring_tags AS ( -- 提取所有和data-structures共现的标签,并统计出现次数 SELECT LOWER(REGEXP_EXTRACT(tag, r'^<(.*)>$')) AS tag, COUNT(DISTINCT id) AS question_count FROM data_structure_questions, UNNEST(SPLIT(tags, ' ')) AS tag GROUP BY tag ) -- 过滤掉语言标签,只保留核心数据结构标签,按频次排序 SELECT tag, question_count FROM cooccurring_tags WHERE tag NOT IN (SELECT tag FROM language_tags) -- 可选:额外过滤非核心标签(比如算法类、工程类),根据你的需求调整 AND tag NOT IN ('algorithm', 'software-engineering', 'programming-languages') ORDER BY question_count DESC LIMIT 50;
关键步骤说明
- 黑名单过滤语言标签:用
language_tags预先定义要排除的语言,后续直接过滤掉这些标签,避免干扰核心数据结构结果。 - 锁定目标问题池:
data_structure_questions先把所有带data-structures标签的问题捞出来,确保咱们只处理相关内容。 - 统计共现标签频次:
cooccurring_tags拆分每个问题的标签,统计每个标签和data-structures一起出现的问题数量,反映标签的关联度。 - 精准筛选核心标签:最后一步剔除语言标签和非核心标签,按频次排序后,就能得到你想要的
binary-search-trees、dfs这类核心数据结构标签了。
小技巧:补全语言黑名单
如果担心漏了某些语言标签,你可以先跑个小查询看看哪些标签和data-structures共现最多,再把遗漏的语言加到黑名单里:
SELECT LOWER(REGEXP_EXTRACT(tag, r'^<(.*)>$')) AS tag, COUNT(DISTINCT id) AS question_count FROM `bigquery-public-data.stackoverflow.posts_questions`, UNNEST(SPLIT(tags, ' ')) AS tag WHERE REGEXP_CONTAINS(tags, r'<data-structures>') GROUP BY tag ORDER BY question_count DESC LIMIT 20;
内容的提问来源于stack exchange,提问作者Ankur Kothari
相关产品推荐
相关产品推荐

