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

如何为二元语法(bigrams)添加nltk.pos_tag()标注并统计频率

带词性标注的二元语法频率统计实现方法

问题说明

需要将NLTK的pos_tag()与二元语法(bigrams)结合,获取每个词都附带词性标注的二元语法频率结果。现有代码仅能生成普通二元语法并统计频率,代码及输出如下:

from nltk.util import ngrams
from collections import Counter
bigrams = list(ngrams(all_file_data, 2))
print(bigrams[:50])
print(Counter(bigrams).most_common(30))

当前输出:

[('SUBDELAGATION', 'ON'), ('ON', 'AGENDA'), ('AGENDA', 'ITEM'), ('ITEM', '3'), ...]

解决方案

核心逻辑是先做词性标注,再生成二元语法,具体步骤如下:

  1. 对原始文本中的每个词汇完成词性标注,得到(词,词性标签)的元组列表
  2. 基于标注后的列表生成二元语法,每个二元组将包含两组(词+词性)的结构
  3. 用Counter统计带标注二元语法的出现频率

完整代码示例

from nltk.util import ngrams
from collections import Counter
import nltk

# 首次使用需下载词性标注模型,仅需运行一次
# nltk.download('averaged_perceptron_tagger')

# 1. 对原始数据做词性标注
tagged_words = nltk.pos_tag(all_file_data)

# 2. 生成带词性标注的二元语法
tagged_bigrams = list(ngrams(tagged_words, 2))

# 3. 统计并输出结果
print("前50个带标注二元语法:")
print(tagged_bigrams[:50])
print("\n高频带标注二元语法(前30):")
print(Counter(tagged_bigrams).most_common(30))

输出示例

运行后会得到类似如下的结果,每个元素都是包含词性标签的二元结构:

[ (('SUBDELAGATION', 'NN'), ('ON', 'IN')), (('ON', 'IN'), ('AGENDA', 'NN')), ... ]

其中NN是名词的词性标签,IN是介词的词性标签,标签规则遵循NLTK默认的Penn Treebank词性标注体系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:05:02