2017-10-30 5 views
3

Ich habe eine große Liste von Kommentaren von reddit. Die Saiten werden in Worte geteilt, Zeichensetzung entfernt und quantifizierten die am häufigsten verwendeten Wörter auf einer bestimmten subreddit zu zeigen:Stoppwörter von BigQuery entfernen?

SELECT word, COUNT(*) as num_words 
FROM(FLATTEN((
    SELECT SPLIT(LOWER(REGEXP_REPLACE(body, r'[\.\",*:()\[\]/|\n]', ' ')), ' ') word 
    FROM [fh-bigquery:reddit_comments.2017_08] 
    WHERE subreddit="The_Donald" 
), word)) 
GROUP EACH BY word 
HAVING num_words >= 1000 
ORDER BY num_words DESC 

Ich habe eine Liste von Stoppwörter zu entfernen, wie würde ich mich über das Hinzufügen, dass zu dem Code? Thanks :)

+0

Im Fall, dass Sie Ihre eigenen Listen Stoppwort machen: https://stackoverflow.com/a/47058865/132438 –

Antwort

2

Unten Beispiel ist für BigQuery Legacy-SQL (wie es in Ihrer Frage ist)

#legacydSQL 
SELECT word, COUNT(*) AS num_words 
FROM(FLATTEN((
    SELECT SPLIT(LOWER(REGEXP_REPLACE(body, r'[\.\",*:()\[\]/|\n]', ' ')), ' ') word 
    FROM [fh-bigquery:reddit_comments.2017_08] 
    WHERE subreddit="The_Donald" 
), word)) 
WHERE NOT word IN (
    'the','to','a','and' 
) 
GROUP EACH BY word 
HAVING num_words >= 1000 
ORDER BY num_words DESC 

BigQuery Team Standard SQL
So verwenden empfiehlt dringend, wenn Sie migrate entscheiden - unten ist Beispiel in Standard-SQL
Es vorausgesetzt, dass Sie Ihre Stop-Wörter in your_project.your_dataset.stop_words Tabelle haben

#standardSQL 
SELECT word, COUNT(*) AS num_words 
FROM `fh-bigquery.reddit_comments.2017_08`, 
UNNEST(SPLIT(LOWER(REGEXP_REPLACE(body, r'[\.\",*:()\[\]/|\n]', ' ')), ' ')) word 
WHERE subreddit="The_Donald" 
AND word NOT IN (SELECT stop_word FROM `your_project.your_dataset.stop_words`) 
GROUP BY word 
HAVING num_words >= 1000 
AND word != '' 
ORDER BY num_words DESC 

Sie können mit folgenden Dummy-Daten hier testen/spielen Sie

#standardSQL 
WITH `your_project.your_dataset.stop_words` AS (
    SELECT stop_word 
    FROM UNNEST(['the','to','a','and']) stop_word 
) 
SELECT word, COUNT(*) AS num_words 
FROM `fh-bigquery.reddit_comments.2017_08`, 
UNNEST(SPLIT(LOWER(REGEXP_REPLACE(body, r'[\.\",*:()\[\]/|\n]', ' ')), ' ')) word 
WHERE subreddit="The_Donald" 
AND word NOT IN (SELECT stop_word FROM `your_project.your_dataset.stop_words`) 
GROUP BY word 
HAVING num_words >= 1000 
AND word != '' 
ORDER BY num_words DESC 
+0

Yup, die großen Werke. Danke :) – ProfPepper

+0

Überlegen Sie, ob Sie die Antwort annehmen und stimmen Sie ab, wenn es Ihnen geholfen hat –

Verwandte Themen