使用NLTK编写程序,判断输入单词在Brown语料库中名词动词频率高低
NLTK Brown语料库词性频率统计实现方案
完整可运行代码如下:
import nltk # 首次运行需下载对应依赖,下载完成后可注释以下两行 nltk.download('brown') nltk.download('averaged_perceptron_tagger') from nltk.corpus import brown # 接收用户输入,统一转小写消除大小写差异 target_word = input("Enter a word: ").lower() noun_count = 0 verb_count = 0 # 遍历Brown语料库所有带词性标注的词汇 for word, tag in brown.tagged_words(): if word.lower() == target_word: # 名词类标签统一以NN为前缀,动词类标签统一以VB为前缀 if tag.startswith('NN'): noun_count += 1 elif tag.startswith('VB'): verb_count += 1 # 输出统计结果 print(f"单词 '{target_word}' 作为名词出现次数:{noun_count}") print(f"单词 '{target_word}' 作为动词出现次数:{verb_count}") # 比较使用频率 if noun_count > verb_count: print(f"该单词作为*名词*的使用频率更高") elif verb_count > noun_count: print(f"该单词作为*动词*的使用频率更高") else: print("该单词作为名词和动词的使用频率相同")
代码说明
- 词性匹配规则:Brown语料库的词性标注体系中,所有名词细分类型(普通名词、专有名词、名词复数等)的标签都以
NN为前缀,所有动词细分类型(原型、过去式、现在分词、过去分词等)的标签都以VB为前缀,匹配前缀即可覆盖对应词性的所有场景 - 大小写处理:代码默认将输入词汇和语料库词汇都转为小写后匹配,避免大小写差异导致的统计遗漏。如果需要严格区分大小写,删除代码中所有
.lower()即可 - 效率优化方案:如果觉得全量遍历语料库速度较慢,可以使用NLTK自带的条件频率分布类实现更高效的查询,将统计逻辑替换为以下代码即可:
# 优化版统计逻辑,提前构建统计索引,查询速度更快 cfd = nltk.ConditionalFreqDist((word.lower(), tag[:2]) for word, tag in brown.tagged_words()) noun_count = cfd[target_word].get('NN', 0) verb_count = cfd[target_word].get('VB', 0)
内容的提问来源于stack exchange,提问作者Sophia Turner
相关产品推荐
相关产品推荐

