机器学习·数据处理

前言

对于大规模数据,我们经常会使用python内置函数或者编写脚本进行批量化处理,从而提高后续使用算法的效率。


1. 正则表达式

  • 定义:用于检索、替换符合某个模式的文本,是文本预处理常用技术。
  • 基本语法
符号描述
.匹配除换行符 \n 以外的任意单个字符
\w匹配单个字母数字字符
\W匹配单个非字母数字字符
\d匹配单个数字
\D匹配单个非数字
\s匹配单个空格字符(空格、换行符、返回符、制表符等)
\S匹配任何非空格字符
\t匹配单个 tab 符
\n匹配单个换行符
\r匹配单个回车符
^匹配字符串的开头
$匹配字符串的结尾
[..]匹配方括号中指定的字符
[^..]匹配方括号中指定以外的任何字符
{m,n}匹配前一个字符的出现次数在 m 至 n 次之间
a|b匹配a或b
?匹配前一个字符出现 0 或 1 次
+匹配前一个字符出现 1 次或多次
*匹配前一个字符出现 0 次或多次
\转义字符,用于将被占用为正则表达的符号还原为原来的意思
()被括起来的表达式部分将作为分组,并返回相匹配的文本
  • Python 的 re 模块
    • re.match():从字符串首字符开始匹配模式串。
    import re
    result = re.match(r'Hello', 'Hello, World!')
    if result:print("匹配成功,匹配到的内容是:", result.group())
    else:print("匹配失败")
    
    • re.search():从字符串任意位置匹配模式串,找到第一个匹配即返回。
    result = re.search(r'World', 'Hello, World!')
    if result:print("匹配成功,匹配到的内容是:", result.group())
    else:print("匹配失败")
    
    • re.findall():从字符串任意位置匹配模式串,返回所有匹配结果。
    text = "Apple and banana are fruits. I like apple juice."
    result = re.findall(r'apple', text, re.IGNORECASE)
    print("匹配到的所有结果:", result)
    
    • re.sub():将字符串中匹配模式串的部分替换为指定内容。
    text = "I have 3 apples and 2 bananas."
    new_text = re.sub(r'\d', 'X', text)
    print("替换后的文本:", new_text)
    


2. 分词

  • 定义:将长文本分解为以词为基本单位的数据结构,方便后续处理分析。
  • 中文分词难点
    • 没有统一标准,存在分词歧义性。
    • 歧义词难以切分,需结合上下文判断。
    • 未登录词难以识别,需实时更新词表。
  • 分词方法
    • 基于词典的匹配分词方式:速度快、成本低,但适应性不强。
    • 基于统计的分词方法:适应性较强,但成本高、速度慢。
    • 基于深度学习:准确率高、适应性强,但成本高、速度慢。
  • 常见分词工具:Hanlp、Stanford 分词、ansj 分词器、哈工大 LTP、KCWS 分词器、jieba、清华大学 THULAC、ICTCLAS。
  • jieba 分词示例
    • 全模式:jieba.cut("文本", cut_all=True)
    import jieba
    seg_list = jieba.cut("我喜欢自然语言处理", cut_all=True)
    print("全模式分词结果: ", "/ ".join(seg_list))
    
    • 精确模式:jieba.cut("文本", cut_all=False)
    seg_list = jieba.cut("我喜欢自然语言处理", cut_all=False)
    print("精确模式分词结果: ", "/ ".join(seg_list))
    
    • 搜索引擎模式:jieba.cut_for_search("文本")
    seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所")
    print("搜索引擎模式分词结果: ", ", ".join(seg_list))
    
    • 添加新词:jieba.load_userdict(file_path);动态添加:jieba.add_word(word, freq=None, tag=None);动态删除:jieba.del_word(word)
    jieba.add_word("自然语言处理")
    seg_list = jieba.cut("我喜欢自然语言处理", cut_all=False)
    print("添加新词后精确模式分词结果: ", "/ ".join(seg_list))
    jieba.del_word("自然语言处理")
    seg_list = jieba.cut("我喜欢自然语言处理", cut_all=False)
    print("删除新词后精确模式分词结果: ", "/ ".join(seg_list))
    


3. 词性标注

  • 定义:判定文本中每个词的语法范畴,确定其词性并加以标注。
  • 中文词性标注难点:中文缺乏词形态变化,兼类词现象严重,词类歧义排除任务量大。
  • 词性标注方法
    • 基于规则的词性标注方法。
    • 基于统计模型的词性标注方法,如 HMM、CRF 等。
    • 基于统计方法与规则方法相结合的词性标注方法。
    • 基于深度学习的词性标注方法,如 LSTM+CRF、BiLSTM+CRF 等。
  • 常见词性标注工具:jieba、SnowNLP、THULAC、StanfordCoreNLP、HanLP、NLTK、SpaCy(不支持中文)。
  • jieba 词性标注示例jieba.posseg.cut("文本")
    import jieba.posseg
    sentence_taged = jieba.posseg.cut("我喜欢自然语言处理")
    for word, flag in sentence_taged:print(f"词语: {word}, 词性: {flag}")
    


4. 词干提取与词形还原

  • 词干提取(Stemming):去除单词的前后缀得到词根,用于扩展检索。
from nltk.stem import PorterStemmer
stemmer = PorterStemmer()
words = ["running", "jumps", "played"]
for word in words:print(f"原词: {word}, 词干: {stemmer.stem(word)}")
  • 词形还原(Lemmatisation):基于词典,将单词的复杂形态转变成最基础的形态,用于文本预处理。
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
words = ["are", "better", "running"]
for word in words:print(f"原词: {word}, 词形还原后: {lemmatizer.lemmatize(word)}")
  • 两者异同
    • 相同点:目标类似,结果部分交叉,主流实现方法类似。
    • 不同点:变换原理、算法复杂性、结果和应用领域各有侧重。
  • 注意事项:只针对具有形态变化的语言,中文不存在这两种预处理操作。


5. 命名实体识别(NER)

  • 定义:识别文本中具有特定意义的实体,如人名、地点名、组织机构名、时间等,用于语义挖掘及信息提取。
  • NER 方法
    • 基于规则的方法、基于字典的方法。
    • 传统机器学习,如 HMM、CRF 等。
    • 深度学习,如 LSTM+CRF、BiLSTM+CRF 等。
  • 常见 NER 工具:Stanford NER、MALLET、Hanlp、nltk、SpaCy(不支持中文)、Crfsuite。
  • nltk 的 NER 示例
import nltk
from nltk.tokenize import word_tokenize
from nltk import pos_tag, ne_chunk
nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')
nltk.download('maxent_ne_chunker')
nltk.download('words')text = "Bill Gates founded Microsoft in 1975."
tokens = word_tokenize(text)
tagged = pos_tag(tokens)
entities = ne_chunk(tagged)
print(entities)


6. 文本的数据增强

  • 应用:解决文本数据类别不平衡问题,使模型能学习到样本少的类别的特性。
  • 字符层面数据增广方法
    • 同义词替换:根据同义词典或词向量相似度替换词汇。
    • 文本回译:将文本翻译成某一语言再反译回来。
    • 词汇顺序变化:对某些文本在语块层面重新排列语序。
  • nlpcda 工具示例
    • Randomword():随机实体替换。
!pip install nlpcda
from nlpcda import Randomword
sentence = "今天是2024年10月1日:我去了超市"
smw = Randomword(create_num=3, change_rate=0.3)
result = smw.replace(sentence)
print('随机实体替换结果:')
for r in result:print(r)
  • Similarword():随机同义词替换。
from nlpcda import Similarword
sentence = "今天天气很好,适合出去游玩"
smw = Similarword(create_num=3, change_rate=0.8)
result = smw.replace(sentence)
print('随机同义词替换结果:')
for r in result:print(r)
  • baidu_translate():百度中英翻译互转实现增强。(需要申请 appid 和 secretKey)
from nlpcda import baidu_translatezh = '天气晴朗,适合散步'
# 申请你的 appid、secretKey 分别填入 "xxx" 后代码才能运行
en_s = baidu_translate(content=zh, appid='xxx',secretKey='xxx', t_from='zh', t_to='en')  # 中文转英文
zh_s = baidu_translate(content=en_s, appid='xxx',secretKey='xxx', t_from='en', t_to='zh')  # 英文转回中文
print("回译后的文本:", zh_s)

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

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

相关文章

大厂出品!三个新的 DeepSeek 平替网站

前几天给大家分享了几个 DeepSeek 免费平替网站,今天又来更新啦。 新增了以下三个平台:火山引擎、知乎直达、百度搜索。 经过实际测试,这几个平台的服务响应速度快,稳定性表现优异,基本不会出现宕机或服务器繁忙的情…

[创业之路-321]:创新开拓思维和经营管理思维的比较

目录 一、概述 1.1、定义与内涵 1、创新开拓思维: 2、经营管理思维: 1.2、特点与优势 1、创新开拓思维的特点与优势: 2、经营管理思维的特点与优势: 3、应用场景与限制 4、总结 二、创新开拓思维与经营管理思维&#xf…

《深度学习实战》第1集:深度学习基础回顾与框架选择

本专栏系列博文旨在帮助读者从深度学习的基础知识逐步进阶到前沿技术,涵盖理论、实战和行业应用。每集聚焦一个核心知识点,并结合实际项目进行实践,避免空谈理论,简洁明快,快速切入代码,所有代码都经过验证…

经典复古嘻哈说唱朋克风格专辑海报标题设计psai英文字体安装包 Punk Of Sad — Ransom Font

Punk Of Sad 将确保您忘记所有简洁的线条和企业润色。这种经典的赎金风格字体是一封写给 DIY 文化的情书,诞生于杂志、演出海报和地下场景的原始能量的剪切和粘贴混乱。每个字母都是不可预测的,都带有叛逆的边缘。 这种字体有三种不同的样式 – Regular…

hot100-滑动窗口

3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。 思路:双指针指向不含重复字符的连续字串的头和尾,用集合存储子串中的元素,有重复时,左指针持续右移,无重复后…

MariaDB 历史版本下载地址 —— 筑梦之路

MariaDB 官方yum源里面只有目前在维护的版本,而有时候对于老项目来说还是需要老版本的rpm包,国内很多镜像站都是同步的官方仓库,因此下载老版本也不好找,这里主要记录下从哪里可以下载到历史版本的MariaDB rpm包。 1. 官方归档网…

Linux-Ansible模块进阶

文章目录 Copy和FetchFile模块 Copy和Fetch copy和fetch模块实践 copy模块需要注意的点:在收集日志之前需要对文件先进行改名或者备份fetch模块需要注意的点:复制的源文件的路径必须是文件不能是目录建议全部使用绝对路径,别使用相对路径确保…

网络空间安全(1)web应用程序的发展历程

前言 Web应用程序的发展历程是一部技术创新与社会变革交织的长卷,从简单的文档共享系统到如今复杂、交互式、数据驱动的平台,经历了多个重要阶段。 一、起源与初期发展(1989-1995年) Web的诞生: 1989年,欧洲…

国产开源PDF解析工具MinerU

前言 PDF的数据解析是一件较困难的事情,几乎所有商家都把PDF转WORD功能做成付费产品。 PDF是基于PostScript子集渲染的,PostScript是一门图灵完备的语言。而WORD需要的渲染,本质上是PDF能力的子集。大模型领域,我们的目标文件格…

Powershell Install deepseek

前言 deepseekAI助手。它具有聊天机器人功能,可以与用户进行自然语言交互,回答问题、提供建议和帮助解决问题。DeepSeek 的特点包括: 强大的语言理解能力:能够理解和生成自然语言,与用户进行流畅的对话。多领域知识&…

6. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--概念与简单入门

网关是一种位于客户端和后端服务之间的服务,充当所有客户端请求的单一入口。它的主要职责是接收所有的API调用,汇总各类请求,将其路由到适当的后端服务,并将响应返回给客户端。网关不仅仅是一个简单的反向代理,它还能够…

网页制作06-html,css,javascript初认识のhtml如何建立超链接

超链接有外部链接、电子邮件链接、锚点链接、空链接、脚本链接 一、内部链接 与自身网站页面有关的链接被称为内部链接 1、创建内部链接 1&#xff09;语法&#xff1a; <a href"链接地址"> …… </a> 2&#xff09;举例应用&#xff1a; 3&#xf…

MySQL后端返回给前端的时间变了(时区问题)

问题&#xff1a;MySQL里的时间例如为2025-01-10 21:19:30&#xff0c;但是返回到前端就变成了2025-01-10 13:19:30&#xff0c;会出现小时不一样或日期变成隔日的问题 一般来说设计字段时会使用datetime字段类型&#xff0c;这是一种用于时间的字段类型&#xff0c;而这个类型…

【算法与数据结构】单调队列

目录 单调队列 使用单调队列维护滑动窗口 具体过程&#xff1a; 代码实现&#xff1a; 复杂度分析&#xff1a; 使用单调队列优化动态规划 例题 单调队列 单调队列(deque)是一种特殊的队列&#xff0c;队列中的元素始终按严格递增或者递减排列。这样就可以保证队头元素…

AutoGen 技术博客系列 九:从 v0.2 到 v0.4 的迁移指南

本系列博文在掘金同步发布, 更多优质文章&#xff0c;请关注本人掘金账号&#xff1a; 人肉推土机的掘金账号 AutoGen系列一&#xff1a;基础介绍与入门教程 AutoGen系列二&#xff1a;深入自定义智能体 AutoGen系列三&#xff1a;内置智能体的应用与实战 AutoGen系列四&am…

深度学习每周学习总结Y1(Yolov5 调用官方权重进行检测 )

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客Y1中的内容 &#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 ** 注意该训练营出现故意不退押金&#xff0c;恶意揣测偷懒用假的结果冒充真实打卡记录&#xff0c;在提出能够拿到视频录像…

为AI聊天工具添加一个知识系统 之117 详细设计之58 思维导图及观察者效应 之2 概念全景图

&#xff08;说明&#xff1a;本文和上一篇问题基本相同&#xff0c;但换了一个模型 deepseek-r1&#xff09; Q1227、在提出项目“为使用AI聊天工具的聊天者加挂一个专属的知识系统”后&#xff0c;我们已经进行了了大量的讨论-持续了近三个月了。这些讨论整体淋漓尽致体现了…

2012年IMO几何预选题第6题

设有非等腰的 △ A B C \triangle ABC △ABC, O O O 和 I I I 分别为外心和内心. 在边 A C AC AC, A B AB AB 上分别存在两点 E E E 和 F F F, 使得 C D C E A B CDCEAB CDCEAB, B F B D A C BFBDAC BFBDAC. 设 ( B D F ) (BDF) (BDF) 和 ( C D E ) (CDE) (CDE)…

为Eclipse IDE安装插件IBM编程助手watsonx Code Assistant

从Eclipse IDE 安装 从Eclipse IDE 安装插件&#xff1a; _1、在Eclipse IDE 中&#xff0c;单击帮助菜单&#xff0c;然后选择EclipseMarketplace。 _2、根据您计划进行的工作类型选择安装方式&#xff1a; 有关代码建议、代码解释、代码文档和单元测试的集成生成式人工智能&a…

Linux基本指令(三)+ 权限

文章目录 基本指令grep打包和压缩zip/unzipLinux和windows压缩包互传tar&#xff08;重要&#xff09;Linux和Linux压缩包互传 bcuname -r常用的热键关机外壳程序 知识点打包和压缩 Linux中的权限用户权限 基本指令 grep 1. grep可以过滤文本行 2. 把包含9的文本行过滤出来了 …