如何使用 BigQuery 识别停用词?
How to identify stopwords with BigQuery?
我正在查看 reddit 评论。我正在使用一些常见的停用词列表,但我想为这个数据集创建一个自定义列表。我如何使用 SQL 执行此操作?
识别停用词的一种方法是查看出现在大多数文档中的停用词。
此查询中的步骤:
- 根据相关性、质量过滤帖子(选择你的 subreddits,选择最低分数,选择最小长度)。
- Unescape reddit HTML 编码值。
- 决定什么算作一个词(在本例中
r'[a-z]{1,20}\'?[a-z]+'
)。
- 每个文档(评论)中的每个单词只计算一次,无论它在每个评论中重复了多少次。
- 通过计算它们出现的文档数量来获得前 x 个词。
查询:
#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]{1,20}\'?[a-z]+') words
FROM `fh-bigquery.reddit_comments.2017_07`
WHERE body NOT IN ('[deleted]', '[removed]')
AND subreddit IN ('AskReddit', 'funny', 'movies')
AND score > 100
), words_per_doc AS (
SELECT id, word
FROM words_by_post, UNNEST(words) word
WHERE ARRAY_LENGTH(words) > 20
GROUP BY id, word
)
SELECT word, COUNT(*) docs_with_word
FROM words_per_doc
GROUP BY 1
ORDER BY docs_with_word DESC
LIMIT 100
我正在查看 reddit 评论。我正在使用一些常见的停用词列表,但我想为这个数据集创建一个自定义列表。我如何使用 SQL 执行此操作?
识别停用词的一种方法是查看出现在大多数文档中的停用词。
此查询中的步骤:
- 根据相关性、质量过滤帖子(选择你的 subreddits,选择最低分数,选择最小长度)。
- Unescape reddit HTML 编码值。
- 决定什么算作一个词(在本例中
r'[a-z]{1,20}\'?[a-z]+'
)。 - 每个文档(评论)中的每个单词只计算一次,无论它在每个评论中重复了多少次。
- 通过计算它们出现的文档数量来获得前 x 个词。
查询:
#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]{1,20}\'?[a-z]+') words
FROM `fh-bigquery.reddit_comments.2017_07`
WHERE body NOT IN ('[deleted]', '[removed]')
AND subreddit IN ('AskReddit', 'funny', 'movies')
AND score > 100
), words_per_doc AS (
SELECT id, word
FROM words_by_post, UNNEST(words) word
WHERE ARRAY_LENGTH(words) > 20
GROUP BY id, word
)
SELECT word, COUNT(*) docs_with_word
FROM words_per_doc
GROUP BY 1
ORDER BY docs_with_word DESC
LIMIT 100