文本数据词汇级增强

news2025/5/17 9:45:53
import nltk

from nltk.corpus import wordnet

from nltk.tokenize import word_tokenize

import random



# nltk.download('wordnet')

# nltk.download('punkt')



def get_synonyms(word):

    """获取单词的同义词列表"""

    synonyms = []

    for syn in wordnet.synsets(word):

        for lemma in syn.lemmas():

            if lemma.name() != word:

                synonyms.append(lemma.name().replace('_', ' '))

    return list(set(synonyms))



def synonym_replacement(text, n=1):

    """对文本中的n个词进行同义词替换"""

    words = word_tokenize(text)

    words = [word for word in words if word.isalpha()]  # 只处理字母单词

    if len(words) < n:

        return text

   

    # 随机选择n个词进行替换

    random_words = random.sample(words, n)

    for random_word in random_words:

        synonyms = get_synonyms(random_word)

        if synonyms:

            synonym = random.choice(synonyms)

            text = text.replace(random_word, synonym)

   

    return text



def random_insertion(text, n=1):

    """随机插入n个词到文本中"""

    words = word_tokenize(text)

    words = [word for word in words if word.isalpha()]

    augmented_text = text

   

    for _ in range(n):

        if not words:

            break

           

        # 随机选择一个词并获取其同义词

        random_word = random.choice(words)

        synonyms = get_synonyms(random_word)

        if synonyms:

            synonym = random.choice(synonyms)

            # 随机选择插入位置

            insertion_idx = random.randint(0, len(words))

            words.insert(insertion_idx, synonym)

            augmented_text = " ".join(words)

   

    return augmented_text




def random_swap(text, n=1):

    """随机交换文本中n对词的位置"""

    words = word_tokenize(text)

    words = [word for word in words if word.isalpha()]

    augmented_words = words.copy()

   

    for _ in range(n):

        if len(words) < 2:

            break

           

        # 随机选择两个位置

        idx1, idx2 = random.sample(range(len(words)), 2)

        # 交换位置

        augmented_words[idx1], augmented_words[idx2] = augmented_words[idx2], augmented_words[idx1]

   

    return " ".join(augmented_words)




def random_deletion(text, p=0.1):

    """以概率p随机删除文本中的词"""

    words = word_tokenize(text)

    if not words:

        return text

   

    # 决定每个词是否保留

    remaining_words = [word for word in words if random.uniform(0, 1) > p]

    if not remaining_words:

        # 至少保留一个词

        return random.choice(words)

   

    return " ".join(remaining_words)



def aug(text, method=[]):

    for m in method:

        if m == 're':

            text = synonym_replacement(text, n=int(len(text.split(" "))/3))

            print("re:",int(len(text.split(" "))/3))

        elif m == 'in':

            text = random_insertion(text, n=int(len(text.split(" "))/4))

            print("in:",int(len(text.split(" "))/4))

        elif m == "swap":

            text = random_swap(text, n=2)

        elif m == "delet":

            text = random_deletion(text, p=0.2)

    return text



if __name__=='__main__':

    text = "Advanced data analytics enables organizations to extract actionable insights from large datasets, leveraging machine learning algorithms and statistical models to optimize decision-making, enhance operational efficiency, and predict market trends with high accuracy, ultimately driving competitive advantage through data-driven strategies in industries such as finance, healthcare, and e-commerce."

    print(len(text.split(" ")))

    # augmented_text = synonym_replacement(text, n=20)

    # inserted_text = random_insertion(augmented_text, n=10)

    # swap_text = random_swap(inserted_text, n=2)

    # delet_text = random_deletion(swap_text, p=0.2)

    final_text = aug(text, ["re", "in", "swap"])

    print(f"原始文本: {text}")

   

    print(f"增强后文本: {final_text}")

使用nlpaug库

import nlpaug.augmenter.word as naw

# 同义词替换增强器(基于WordNet)
aug = naw.SynonymAug(aug_src='wordnet', aug_p=0.3)

text = "Advanced data analytics enables organizations to extract actionable insights from large datasets, leveraging machine learning algorithms and statistical models to optimize decision-making, enhance operational efficiency, and predict market trends with high accuracy, ultimately driving competitive advantage through data-driven strategies in industries such as finance, healthcare, and e-commerce."
augmented_text = aug.augment(text)
if text == augmented_text:
    print(1)
print(f"原始文本: {text}")
print(f"增强后文本: {augmented_text}")

# 使用词向量进行同义词替换
# aug = naw.WordEmbsAug(
#     model_type='word2vec', model_path='path/to/word2vec.bin',
#     action="substitute")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2377545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于EFISH-SCB-RK3576/SAIL-RK3576的消防机器人控制器技术方案‌

&#xff08;国产化替代J1900的应急救援智能化解决方案&#xff09; 一、硬件架构设计‌ ‌极端环境防护系统‌ ‌防爆耐高温设计‌&#xff1a; 采用陶瓷纤维复合装甲&#xff08;耐温1200℃持续1小时&#xff09;&#xff0c;通过GB 26784-2023消防设备防爆认证IP68防护等级…

微信小程序:封装request请求、解决请求路径问题

一、创建文件 1、创建请求文件 创建工具类文件request.js,目的是用于发送请求 二、js接口封装 1、写入接口路径 创建一个变量BASE_URL专门存储api请求地址 2、获取全局的token变量 从缓存中取出token的数据 3、执行请求 (1)方法中接收传递的参数 function request(url,…

【技术原理】ELK技术栈的历史沿革与技术演进

一、起源与早期发展&#xff08;2010-2015&#xff09; ELK技术栈的诞生源于互联网时代对海量日志处理的迫切需求。2010年&#xff0c;Elasticsearch作为基于Apache Lucene的分布式搜索引擎问世&#xff0c;其核心能力包括实时全文检索、倒排索引和分片存储机制&#xff0c;填补…

记录算法笔记(2025.5.15)将有序数组转换为二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视为正确…

Kubernetes 运维操作手册:从 etcd 快照进行精确恢复

1 5 步实现 etcd 精确恢复 将快照恢复到本地 etcd 数据目录。使用恢复的数据启动本地 etcd 实例。使用 etcdctl 查询特定键&#xff08;例如&#xff0c;ConfigMap&#xff09;。使用 auger 解码以提取干净的 YAML。使用 kubectl 申请恢复到您的实时集群。 本指南将指导您从 et…

云轴科技ZStack官网上线Support AI,智能助手助力高效技术支持

5月16日&#xff0c;云轴科技ZStack在官网&#xff08;www.zstack.io&#xff09;正式上线ZStack Support AI智能助手。该系统是ZStack应用人工智能于技术支持服务领域的重要创新&#xff0c;基于自研ZStack AIOS平台智塔及LLMOPS技术打造。 ZStack Support AI定位为智能客服&…

UE5中制作动态数字Decal

在进行城市道路编辑时&#xff0c;经常需要绘制人行道、交通标志、停车线等路面元素。如果能够使用具有动态修改功能的 Decal&#xff08;贴花&#xff09;&#xff0c;将大大提升编辑效率和灵活性。接下来讲解如何制作。 1.首先准备一张包含所需元素的Texture&#xff0c;这里…

【踩坑】修复Cloudflare的Origin Rules端口重定向不生效

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 网上没人说&#xff0c;目前我是通过以下两种方式成功将二级域名映射到指定端口的。关于如何映射&#xff0c;网上教程很多&#xff0c;这里只说不生效…

2025 年十大网络安全预测

随着我们逐步迈向 2026 年&#xff0c;网络安全领域正处于一个关键的转折点&#xff0c;技术创新与数字威胁以前所未有的复杂态势交织在一起。 地缘政治环境进一步加剧了这些网络安全挑战&#xff0c;国际犯罪组织利用先进的技术能力来追求战略目标。 人工智能在这一不断演变…

紫外相机工作原理及可应用范围

紫外相机是一种利用紫外线&#xff08;UV&#xff09;波段进行成像的设备&#xff0c;紫外线可用于机器视觉应用中&#xff0c;以检测使用可见光无法检测到的特征&#xff0c;工业上使用最常见的紫外波长是365nm和395nm。紫外相机通常用于高分辨率视频显微镜、电晕检测、半导体…

【虚幻引擎】UE5独立游戏开发全流程(商业级架构)

本套课程我将会讲解一下知识 1.虚幻引擎的常用功能节点、模块包含但不限于动画模块、UI模块、AI模块、碰撞模块、伤害模块、背包模块、准心模块、武器模块、可拾取物品模块、死亡等模块。 2.整个游戏的设计思路&#xff08;游戏架构&#xff09;&#xff0c;本套教程讲解了如…

嵌入式单片机中STM32F1演示寄存器控制方法

该文以STM32F103C8T6为示例,演示如何使用操作寄存器的方法点亮(关闭LED灯),并讲解了如何调试,以及使用宏定义。 第一:操作寄存器点亮LED灯。 (1)首先我们的目的是操作板子上的LED2灯,对其实现点亮和关闭操作。打开STM32F103C8T6的原理图,找到LED2的位置。 可以看到…

spark-cache模式

一、RDD持久化 1.什么时候该使用持久化&#xff08;缓存&#xff09; 2. RDD cache & persist 缓存 3. RDD CheckPoint 检查点 4. cache & persist & checkpoint 的特点和区别 特点 区别 二、cache & persist 的持久化级别及策略选择 Spark的几种持久化…

架构思维:通用架构模式_系统监控的设计

文章目录 引言什么是监控三大常见监控类型1. 次数监控2. 性能监控3. 可用率监控 落地监控1. 服务入口2. 服务内部3. 服务依赖 监控时间间隔的取舍小结 引言 架构思维&#xff1a;通用架构模式_从设计到代码构建稳如磐石的系统 架构思维&#xff1a;通用架构模式_稳如老狗的SDK…

InfluxDB 2.7 连续查询实战指南:Task 替代方案详解

InfluxDB 2.7 引入了 Task 功能&#xff0c;作为连续查询&#xff08;CQ&#xff09;的现代替代方案。本文详细介绍了如何使用 Task 实现传统 CQ 的功能&#xff0c;包括语法解析、示例代码、参数对比以及典型应用场景。通过实际案例和最佳实践&#xff0c;帮助开发者高效迁移并…

【SpringBoot】从零开始全面解析SpringMVC (二)

本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍SpringMVC相关知识. &#x1f40e;文章专栏: JavaEE进阶 &#x1f680;若有问题 评论区见 &#x1f449;gitee链接: 薯条不要番茄酱 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条…

蒟蒻编程日志

ORZ &#xff08;用于记录你这个“人”是不是真的&#xff0c;也就是说CSDN的流量是否属合适&#xff09; 2025/4/14 21:25 开坑 前言 2024/10/26&#xff1a;CSP-J 260pts&#xff0c;CSP-S 45pts。 2025/3/1&#xff1a;%你赛 180pts rk34 寄&#xff01;这就是不认真的…

git克隆github项目到本地的三种方式

本文旨在使用git工具将别人发布在github上的项目保存到本地 1.安装git&#xff0c;创建github账户&#xff0c;并使用ssh关联自己的github账号和git&#xff0c;具体教程可以参照下面两篇文章&#xff1a; Github入门教程&#xff0c;适合新手学习&#xff08;非常详细&#…

EtherCAT转EtherNet/IP解决方案-泗博网关CEI-382

一、应用场景 在智能制造快速发展的背景下&#xff0c;工业自动化领域对设备间通信提出了更高要求&#xff0c;需要同时满足实时性、可靠性和灵活性的需求。EtherCAT 与 EtherNet/IP 作为工业通信领域的两大核心协议&#xff0c;各自在不同应用场景中发挥着关键作用。EtherCAT …

子查询对多层join优化记录

需求背景 查询某个用户是否具有某个角色 表 CREATE TABLE mdm_platform_role_user (ID bigint NOT NULL AUTO_INCREMENT,ROLE_ID varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,USER_ID varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci …