如何使用BigQuery识别英文文本并过滤YouTube频道描述?
筛选英文YouTube频道描述的优化方案
针对你的需求,以下几种方案比手动标记+逻辑回归更高效,可根据精度要求和资源情况选择:
方案1:基于字符集的快速初步筛选
思路:英文核心字符以ASCII(32-126位)为主,通过统计ASCII字符占比设定阈值过滤,适合快速批量初筛。缺点是会误判含少量非ASCII(如表情、外来词)的英文内容,可调整阈值适配。
WITH foo AS ( SELECT ".olá sejam muito bem vindos. este canal foi criado" AS x UNION ALL SELECT "Hello, I am Abhy and welcome to my channel." AS x UNION ALL SELECT "Channels I love: Labrant Fam, Norris Nuts, La Familia Diamond, Piper Rockelle" AS x UNION ALL SELECT "हेलो दोस्तो रमेश और सागर और सुखदेव आपका स्वागत करते हैं इस चैनल के ऊपर" AS x UNION ALL SELECT "Hi, I'm K-POP RANDOM👩🇲🇨 === 🌈KPOP RANDOM DANCE🌈 === 🌻I hope you can enjoy" AS x UNION ALL SELECT 'Public TV Kannada news channel. The slogan is "Yaara Aasthiyoo Alla, Idu Nimma TV"' AS x UNION ALL SELECT "Instagram: www.instagram.com/whatsfordinner5291/" AS x UNION ALL SELECT "Welcome to RunningBoy12, a gaming channel brought to you by RO!" as x ) SELECT x, SAFE_DIVIDE( SUM(IF(ORD(SUBSTR(x, pos, 1)) BETWEEN 32 AND 126, 1, 0)), LENGTH(x) ) AS ascii_char_ratio, CASE WHEN SAFE_DIVIDE(SUM(IF(ORD(SUBSTR(x, pos, 1)) BETWEEN 32 AND 126, 1, 0)), LENGTH(x)) >= 0.9 THEN 'English' ELSE 'Non-English' END AS language_prediction FROM foo, UNNEST(GENERATE_ARRAY(1, LENGTH(x))) AS pos GROUP BY x ORDER BY ascii_char_ratio DESC;
方案2:用BigQuery集成的自然语言API精准检测
思路:直接调用Google Cloud自然语言API(需提前启用权限),返回文本主语言及置信度,是精度最高的方案,适合最终筛选环节。
WITH foo AS ( SELECT ".olá sejam muito bem vindos. este canal foi criado" AS x UNION ALL SELECT "Hello, I am Abhy and welcome to my channel." AS x UNION ALL SELECT "Channels I love: Labrant Fam, Norris Nuts, La Familia Diamond, Piper Rockelle" AS x UNION ALL SELECT "हेलो दोस्तो रमेश और सागर और सुखदेव आपका स्वागत करते हैं इस चैनल के ऊपर" AS x UNION ALL SELECT "Hi, I'm K-POP RANDOM👩🇲🇨 === 🌈KPOP RANDOM DANCE🌈 === 🌻I hope you can enjoy" AS x UNION ALL SELECT 'Public TV Kannada news channel. The slogan is "Yaara Aasthiyoo Alla, Idu Nimma TV"' AS x UNION ALL SELECT "Instagram: www.instagram.com/whatsfordinner5291/" AS x UNION ALL SELECT "Welcome to RunningBoy12, a gaming channel brought to you by RO!" as x ) SELECT x, ML.DETECT_LANGUAGE(x) AS language_info FROM foo;
返回的language_info包含语言代码(如en代表英文)、置信度等字段,可通过language_info.language = 'en' AND language_info.confidence > 0.7过滤高置信度的英文内容。
方案3:规则+统计的轻量筛选
思路:结合英文常见特征(如停用词占比),无需外部API,平衡成本与精度,适合离线场景。
WITH foo AS ( SELECT ".olá sejam muito bem vindos. este canal foi criado" AS x UNION ALL SELECT "Hello, I am Abhy and welcome to my channel." AS x UNION ALL SELECT "Channels I love: Labrant Fam, Norris Nuts, La Familia Diamond, Piper Rockelle" AS x UNION ALL SELECT "हेलो दोस्तो रमेश और सागर और सुखदेव आपका स्वागत करते हैं इस चैनल के ऊपर" AS x UNION ALL SELECT "Hi, I'm K-POP RANDOM👩🇲🇨 === 🌈KPOP RANDOM DANCE🌈 === 🌻I hope you can enjoy" AS x UNION ALL SELECT 'Public TV Kannada news channel. The slogan is "Yaara Aasthiyoo Alla, Idu Nimma TV"' AS x UNION ALL SELECT "Instagram: www.instagram.com/whatsfordinner5291/" AS x UNION ALL SELECT "Welcome to RunningBoy12, a gaming channel brought to you by RO!" as x ), english_stopwords AS ( SELECT word FROM UNNEST(['the', 'and', 'i', 'to', 'a', 'is', 'you', 'my', 'welcome', 'hope']) AS word ) SELECT x, SAFE_DIVIDE(COUNT(DISTINCT sw.word), (SELECT COUNT(*) FROM english_stopwords)) AS stopword_match_ratio, CASE WHEN SAFE_DIVIDE(COUNT(DISTINCT sw.word), (SELECT COUNT(*) FROM english_stopwords)) >= 0.2 THEN 'English' ELSE 'Non-English' END AS language_prediction FROM foo LEFT JOIN english_stopwords sw ON REGEXP_CONTAINS(LOWER(x), CONCAT(r'\b', sw.word, r'\b')) GROUP BY x ORDER BY stopword_match_ratio DESC;
方案对比
你提出的手动标记+逻辑回归方案适合数据有特殊英文特征的定制场景,但标注成本高。上述方案各有优势:
- 方案1最快,适合批量初筛;
- 方案2精度最高,适合最终筛选;
- 方案3无需外部依赖,平衡成本与效果。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

