You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python NLP任务:优化Google Ngram API调用或寻找替代词频服务

问题描述

我正在开展一项Python NLP任务,需要从含噪声的名词短语列表中剔除非技术类/极常用的名词短语。示例列表为:

["people", "US presidents", "New York City", "electric cars", "vegan food", "the best"]

需剔除"people"和"the best"。计划利用Ngram数据集实现:这两个短语的出现频率远高于其他短语,可标记为异常值剔除。我尝试调用Google Ngram的非公开API,代码如下:

import requests

url = "https://books.google.com/ngrams/json"

query_params = {
        "content": <my_noun_phrase/string of noun phrases>,
        "year_start": 2017,
        "year_end": 2019,
        "corpus": 26,
        "smoothing": 1,
        "case_insensitive": True
    }
response = requests.get(url=url, params=query_params)

但该API无法承载大量请求,频繁遇到429(请求过多)错误。想请教:是否有更优的Google Ngram API调用方式?或有其他可获取大型语料库中多词表达式词频数据的API/服务?

解决方案

一、优化Google Ngram API调用方式

  • 批量请求:Google Ngram API支持在content参数中传入多个短语,用逗号分隔(如content="people,US presidents,New York City"),大幅减少请求次数,降低触发429错误的概率。
  • 添加随机请求延迟:在连续请求之间加入1-3秒的随机延迟,模拟人类访问节奏,避免被判定为恶意请求。示例代码:
import requests
import time
import random

def fetch_ngram_freq(phrases):
    url = "https://books.google.com/ngrams/json"
    content_str = ",".join(phrases)
    query_params = {
        "content": content_str,
        "year_start": 2017,
        "year_end": 2019,
        "corpus": 26,
        "smoothing": 1,
        "case_insensitive": True
    }
    response = requests.get(url=url, params=query_params)
    # 此处添加响应处理逻辑
    time.sleep(random.uniform(1, 3))
    return response.json()
  • 使用会话保持连接:通过requests.Session()复用TCP连接,减少握手开销,同时降低被识别为异常请求的可能。

二、替代的词频数据API/服务

  • NLTK内置语料库:自带Brown、Gutenberg等大型语料库,支持离线统计短语频率,无需依赖外部API,彻底避免限流问题。示例代码:
from nltk.corpus import brown
from nltk.util import ngrams
from collections import Counter

# 统计2-gram频率
bigrams = ngrams(brown.words(), 2)
bigram_freq = Counter(bigrams)
# 查询特定短语频率
print(bigram_freq[("New", "York")])
  • spaCy语料统计:结合spaCy的预训练模型或自定义加载大型文本语料,统计短语频次,还可配合实体识别功能辅助筛选技术类短语。
  • 维基百科离线语料:下载维基百科dump文件,用WikiExtractor提取文本后自行统计短语频率,数据量庞大且覆盖各类术语,适合批量离线处理。
  • COCA(当代美国英语语料库):提供在线查询接口,支持多词短语频率统计,语料涵盖口语、书面语等多种类型,更新及时。
  • BNC(英国国家语料库):包含1亿词的英式英语语料,可通过在线工具或离线下载后统计短语频率,适配英式英语场景的任务。

内容的提问来源于stack exchange,提问作者mr_faulty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:50:31