统计元组第二个元素频率并删除NN组元组求助
解决方案
1. 数据加载与环境准备
假设你的数据存储在CSV文件中,用Python的pandas和collections模块就能高效处理:
import pandas as pd from collections import Counter # 如果是从CSV加载数据 df = pd.read_csv('你的数据文件.csv') # 用你提供的示例数据构造DataFrame(测试用) data = { 'pos_tag': [ [('semoga', 'SC'), ('saja', 'RB'), ('di', 'IN'), ('sini', 'PR'), ('bisa', 'MD'), ('cepat', 'JJ'), ('cair', 'NN'), ('semoga', 'NN'), ('saja', 'RB'), ('ini', 'PR'), ('beneran', 'NN'), ('ada', 'VB'), ('nya', 'NN'), ('bantuan', 'NN'), ('buat', 'JJ'), ('butuh', 'VB'), ('banget', 'NN')], [('kak', 'VB'), ('kenapa', 'WH'), ('perbaikan', 'NN'), ('sistem', 'NN'), ('nya', 'PRP'), ('tidak', 'NEG'), ('selesai', 'VB')], [('sangat', 'RB'), ('baik', 'JJ')] ] } df = pd.DataFrame(data)
2. 统计标签出现频率
把所有行的元组展开,提取第二个元素(标签),用Counter统计频率:
# 收集所有标签 all_tags = [] for tuples_list in df['pos_tag']: all_tags.extend(tag for _, tag in tuples_list) # 统计并转换为表格格式 tag_freq = Counter(all_tags) freq_df = pd.DataFrame(tag_freq.items(), columns=['tag', 'frequency']).sort_values(by='frequency', ascending=False) # 打印结果(或保存为CSV) print(freq_df)
输出结果示例:
| tag | frequency |
|---|---|
| NN | 8 |
| RB | 3 |
| JJ | 3 |
| VB | 3 |
| PR | 2 |
| SC | 1 |
| IN | 1 |
| MD | 1 |
| WH | 1 |
| PRP | 1 |
| NEG | 1 |
3. 过滤"NN"标签的元组
定义过滤函数,批量处理每行数据:
def remove_nn_tuples(tuples_list): return [t for t in tuples_list if t[1] != 'NN'] # 生成清洗后的列 df['pos_tag_clean'] = df['pos_tag'].apply(remove_nn_tuples) # 查看结果 print(df[['pos_tag', 'pos_tag_clean']])
输出结果完全匹配你的预期格式:
| pos_tag | pos_tag_clean |
|---|---|
| [(semoga, SC), (saja, RB), (di, IN), (sini, PR), (bisa, MD), (cepat, JJ), (cair, NN), (semoga, NN), (saja, RB), (ini, PR), (beneran, NN), (ada, VB), (nya, NN), (bantuan, NN), (buat, JJ), (butuh, VB), (banget, NN)] | [(semoga, SC), (saja, RB), (di, IN), (sini, PR), (bisa, MD), (cepat, JJ), (saja, RB), (ini, PR), (ada, VB), (buat, JJ), (butuh, VB)] |
| [(kak, VB), (kenapa, WH), (perbaikan, NN), (sistem, NN), (nya, PRP), (tidak, NEG), (selesai, VB)] | [(kak, VB), (kenapa, WH), (nya, PRP), (tidak, NEG), (selesai, VB)] |
| [(sangat, RB), (baik, JJ)] | [(sangat, RB), (baik, JJ)] |
4. 保存结果
如果需要把处理后的数据持久化:
# 保存频率统计结果 freq_df.to_csv('标签频率统计.csv', index=False) # 保存清洗后的数据 df.to_csv('清洗后的词性标注.csv', index=False)
内容的提问来源于stack exchange,提问作者Dewani
相关产品推荐
相关产品推荐

