如何统计POS标注中NNP,MD,VB模式出现次数并新增dataframe列
实现步骤
首先默认你的DataFrame结构符合以下约定:
- 存储POS标注结果的列名为
pos_tagged,每一行的格式是由(词, 词性)元组组成的列表 - 需要新增的计数列名为
pattern_count
核心逻辑说明
我们用大小为3的滑动窗口遍历每一条POS标注序列,检查连续三个元组的词性是否依次匹配NNP→MD→VB的模式,每匹配到一次计数加1。
完整代码实现
import pandas as pd # 1. 定义模式匹配计数函数 def count_pattern(pos_list, target_pattern=('NNP', 'MD', 'VB')): count = 0 # 滑动窗口遍历,范围设置保证窗口不越界 for i in range(len(pos_list) - 2): # 提取当前窗口三个元素的词性 current_triple = (pos_list[i][1], pos_list[i+1][1], pos_list[i+2][1]) if current_triple == target_pattern: count += 1 return count # 2. 把函数应用到POS列,生成新统计列 # 请把下方的pos_tagged替换为你实际的POS标注列名 df['pattern_count'] = df['pos_tagged'].apply(count_pattern)
效果验证
拿你给出的示例测试:
示例POS序列:[(communications, NNS), (between,IN), (the, DT), (Principal, NNP), (and, CC), (the, DT), (Contractor, NNP), (shall, MD), (be,VB), (in, DT), (the, DT), (English, JJ), (language, NN)]
调用函数后返回结果为1,和预期一致。
特殊场景适配
- 如果你的POS标注结果不是元组列表格式,而是拼接好的字符串,需要先写预处理函数把字符串解析为元组列表后再调用上述计数函数
- 如果需要匹配其他词性序列模式,直接修改
target_pattern参数的元组内容即可
内容的提问来源于stack exchange,提问作者cookieclatter
相关产品推荐
相关产品推荐

