如何用Python实现同义词替换,完成csv新闻数据集的文本处理需求?
同义词替换功能实现方案
前置说明
默认syno.txt每行格式为原词 同义词,用空格分隔,一个原词对应一个替换用同义词;如果你的同义词表为多同义词格式,可参考下方扩展方案调整逻辑。
注意:不要在
replacesynonyms函数内重复读取同义词文件,否则处理大量文本时会产生严重的IO性能损耗,我们提前把同义词加载到内存字典里复用。
完整实现代码
首先安装依赖库:pip install pandas jieba
完整代码如下:
import pandas as pd import jieba import random # 预加载同义词词典,全局仅加载1次 syno_dict = {} with open('syno.txt', 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line: continue parts = line.split() if len(parts) >= 2: # 单同义词替换版本用下面这行 # syno_dict[parts[0]] = parts[1] # 多同义词随机替换版本用下面这行,把同原词的所有同义词存为列表 syno_dict[parts[0]] = parts[1:] def similarity(): tweets = pd.read_csv(r'news_collection.csv') df = pd.DataFrame(tweets, columns=['created_at', 'text']) df['created_at'] = pd.to_datetime(df['created_at']) df['text'] = df['text'].apply(lambda x: str(x)) df["text"] = df["text"].apply(lambda x: replacesynonyms(x)) return df def replacesynonyms(text): # 中文分词,避免整串替换出现的误匹配问题 words = jieba.lcut(text) res = [] for word in words: if word in syno_dict: # 单同义词替换版本用下面这行 # res.append(syno_dict[word]) # 多同义词随机替换版本用下面这行 res.append(random.choice(syno_dict[word])) else: # 未命中同义词表则保留原词 res.append(word) return ''.join(res)
适配说明
如果你的同义词表为其他格式(比如原词=同义词、制表符分隔),只需要修改词典加载部分的分隔逻辑即可;如果不需要分词直接做全串匹配(仅适合短词场景),可以去掉jieba分词逻辑,直接遍历词典做字符串替换,缺点是容易出现误替换(比如原词是“天”,会把“天气”里的“天”也替换掉)。
内容的提问来源于stack exchange,提问作者Nick_Code
相关产品推荐
相关产品推荐

