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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:15:01