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

如何检测英文单词使用频率?pyenchant常用词判断方案求助

问题描述

需要判断给定单词是否为常用英文单词。目前使用pyenchant库验证单词是否为合法英文单词,但无法获取单词频率或判断是否常用。

示例代码:

import enchant
eng_dict = enchant.Dict("en_US")

words = ['hello', 'world', 'thisisntaword', 'anachronism']
good_words = []

for word in words:
    if eng_dict.check(word): # 目前仅检查是否为英文单词,还需判断是否为常用词
        good_words.append(word)
print(good_words)

当前返回结果:['hello', 'world', 'anachronism']
期望返回结果:['hello', 'world'](因为anachronism并非常用词)


解决方案

方法1:基于NLTK语料库的频率统计

利用NLTK的Brown语料库统计单词出现频率,设定阈值筛选常用词,同时结合pyenchant的合法性检查。

代码示例

import enchant
from nltk.corpus import brown
from nltk.probability import FreqDist

# 初始化词典和频率统计器
eng_dict = enchant.Dict("en_US")
word_freq = FreqDist(word.lower() for word in brown.words())

# 自定义频率阈值(可根据需求调整,示例为出现次数≥100)
FREQUENCY_THRESHOLD = 100

words = ['hello', 'world', 'thisisntaword', 'anachronism']
good_words = []

for word in words:
    lower_word = word.lower()
    # 同时满足:合法英文单词 + 频率达标
    if eng_dict.check(word) and word_freq.get(lower_word, 0) >= FREQUENCY_THRESHOLD:
        good_words.append(word)

print(good_words)  # 输出: ['hello', 'world']

方法2:使用预定义常用词列表

如果不需要动态频率统计,直接用现成的常用词集合做比对,适合对常用词范围有明确要求的场景。

代码示例

import enchant

# 示例常用词集合(实际可替换为包含数千个常用词的完整列表)
COMMON_WORDS = {'hello', 'world', 'the', 'and', 'a', 'to', 'of', 'in', 'is', 'it'}

eng_dict = enchant.Dict("en_US")

words = ['hello', 'world', 'thisisntaword', 'anachronism']
good_words = []

for word in words:
    # 同时满足:合法英文单词 + 在常用词列表内
    if eng_dict.check(word) and word.lower() in COMMON_WORDS:
        good_words.append(word)

print(good_words)  # 输出: ['hello', 'world']

提示:可以从公开数据集获取更全面的常用词列表,保存为文本文件后读取转为集合,提升查找效率。

方法3:利用spaCy的词汇概率

spaCy的预训练模型内置单词频率对应的概率值,概率越接近0表示单词越常用,可通过设定阈值筛选。

代码示例

import enchant
import spacy

# 初始化词典和spaCy模型
eng_dict = enchant.Dict("en_US")
nlp = spacy.load("en_core_web_sm")

# 自定义概率阈值(值越接近0越常用,示例为≥-5)
PROB_THRESHOLD = -5

words = ['hello', 'world', 'thisisntaword', 'anachronism']
good_words = []

for word in words:
    if eng_dict.check(word):
        doc = nlp(word)
        # 仅处理单个单词的情况,判断概率是否达标
        if len(doc) == 1 and doc[0].prob >= PROB_THRESHOLD:
            good_words.append(word)

print(good_words)  # 输出: ['hello', 'world']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:52:21