如何用Python将复数词转单数并合并Excel中的词频统计?
解决Excel词频统计中复数转单数并合并词频的问题
原始数据
1.Chip, 5
2.Chips,8
3.Car, 2
4.Cars, 6
期望输出
Chip 13
Car 8
方案一:Python脚本自动化处理(适合大量数据)
1. 安装依赖库
需要用到pandas读取Excel文件,nltk进行词形还原(复数转单数):
pip install pandas nltk
2. 完整处理代码
import pandas as pd from nltk.stem import WordNetLemmatizer from nltk.corpus import wordnet import nltk # 下载NLTK所需的词库数据 nltk.download('wordnet') nltk.download('averaged_perceptron_tagger') def get_wordnet_pos(tag): # 将NLTK词性标签映射为WordNet可识别的格式 if tag.startswith('J'): return wordnet.ADJ elif tag.startswith('V'): return wordnet.VERB elif tag.startswith('N'): return wordnet.NOUN elif tag.startswith('R'): return wordnet.ADV return wordnet.NOUN # 默认按名词处理 lemmatizer = WordNetLemmatizer() # 读取Excel文件(替换为你的文件路径) df = pd.read_excel('word_frequency.xlsx', usecols=[0, 1], names=['raw_word', 'frequency']) # 提取纯单词(去除开头的数字和点) df['clean_word'] = df['raw_word'].str.extract(r'(\w+)') # 词性标注+词形还原(复数转单数) df['pos_tag'] = df['clean_word'].apply(lambda x: nltk.pos_tag([x])[0][1]) df['singular_word'] = df.apply(lambda row: lemmatizer.lemmatize(row['clean_word'], get_wordnet_pos(row['pos_tag'])), axis=1) # 按单数单词分组求和 merged_result = df.groupby('singular_word')['frequency'].sum().reset_index() # 打印结果 for _, row in merged_result.iterrows(): print(f"{row['singular_word']} {row['frequency']}") # 保存结果到新Excel merged_result.to_excel('merged_word_frequency.xlsx', index=False)
3. 使用说明
- 替换代码中的
word_frequency.xlsx为你的Excel文件路径 - 运行脚本后,控制台会输出期望的结果,同时生成
merged_word_frequency.xlsx保存处理后的数据
方案二:Excel手动处理(适合少量数据)
如果数据量不大,可以用Excel内置函数快速处理:
- 提取纯单词:在空白列输入公式
=RIGHT(A1,LEN(A1)-FIND(".",A1)),下拉填充,去除开头的数字和点 - 统一为单数:手动将复数单词替换为单数(如
Chips→Chip,Cars→Car) - 求和合并:在空白单元格输入
=SUMIF(B:B,"Chip",C:C)(B列为处理后的单数单词,C列为词频),替换单词即可得到对应总和
内容的提问来源于stack exchange,提问作者Kadiyala Prasanth
相关产品推荐
相关产品推荐

