当前位置: 首页 > news >正文

Python语料数据清洗方法之一

语料库研究已经成为科学研究公认的相比较权威的研究范式。在开始使用语料库研究前需要对文本进行清洁处理,除了清除空段、删除字符前后的空格、制表位外,我还要需要对文本进行分词、筛选、去重等操作。普通的语料库工具可能需要来回切换,同时文本的处理速度也会不尽如人意,如果使用Python就可以利用NLTK等自然语料处理工具、以及Python中常用的文本处理模块进行文本处理。

一、清除字符串前后的无效字符

我们可以采用strip()这个方法,它可以清除字符串前后的空格、制表位、换行符等。如下例:

text = "  Corpus Analysis in Academic Research  \r\n"
print(text.strip())

操作示例

还可以使用strip()把字符串前后的无效字符删除,如下面的这个例子。

text = " aaa 语料库分析在科学研究中的应用 ppp"
print(text.strip("a|p| "))

采用以上方法,可以把多余的字母a或p或空格删除掉。注意使用正则表达式时,需要用引号括起来。

删除多余的字符

二、清除数字但不清除带有数字的单词

在Python中我们可以使用isdigit()清除所有数字,用isalpha()清除所有字母。但是需要注意的是,如果想保留带有数字的单词,如5-year-old这个词,就需要使用not word.isdigit(), 因为isdigit()可以用于判断字符是否由数字构成。

所以要清除句子中的数字,可以先使用nltk.word_tokenize()分词,然后用集合推导式,清除数字,同时去重。

import nltk
text = 'This handbook contains 3 volumes. The 5-year-survival rate was elevated. The rate is amazing.'
tokenized_text = nltk.word_tokenize(text)
print({word.lower() for word in tokenized_text if not word.isdigit()})

去数字+去重

三、清除数据中的标点并把单词改为小写字母

我们可以从string中导入puctuation这个模块,然后在集合推导式用用它去标点。可以用word.lower()的方法把单词的大写都改为小写。

import nltk
from string import punctuation
text = 'This handbook contains 3 volumes. The 5-year-survival rate was elevated. The rate is amazing.'
tokenized_text = nltk.word_tokenize(text)
print({word.lower() for word in tokenized_text if not word.isdigit() and word not in punctuation})

四、如何提升清理速度

以上代码使用的是nltk中的分词工具,在数据比较多时会相对慢一些,如果在要求不是特别严格的情况下,可以使用re正则模块进行分词,这样可以大大提升分词的速度。

使用re的好处是直接定义词的构成,不需要再导入额外的模块清除标点了。re.findall()可以利用正则表达式,找到符合要求的词并提取出来。

import re
text = 'This handbook contains 3 volumes. The 5-year-survival rate was elevated. The rate is amazing.'
words = re.findall(r'[A-z-0-9]+', text) #定义一个词由数字、字母和-组成。
print({word.lower() for word in words if not word.isdigit()})

而且最后生成的效果和之前的一样。

对比nltk和re的分词结果

五、用SpaCy来实现快速清洗

除了使用NLTK、Re来实现文本清洗外,还可以使用SpaCy这个自然语言文本处理库,它自带预训练的管道,目前支持 60 多种语言的标记化和训练。由于它具有最先进的速度和神经网络模型,因此可用于标记、解析、命名实体识别、文本分类等。它的模型从sm(small),至md(medium),再到lg(large),准确性逐步提升,但是其个头也在不断增大。

使用SpaCy,我们不需要导入nltk, string等库,可以直接利用它的管道,一步到位。使用前需要先

通过:pip install spacy进行安装,下载相关模型,如en_core_web_sm,如果下载比较慢,可以直接去github上下载。需要注意的是,这里SpaCy直接把单词进行了还原,这是之前的方法所无法实现的,而且代码非常简洁,短短,几行代码就实现了变分词、变小写、词形还原、去标点、去停用词等功能,唯一的缺点时配置时有一点儿小麻烦,下面是一个样例代码供参考:

import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is looking at buying U.K. startup.")
print({x.lemma_.lower() for x in doc if not x.is_stop and not x.is_punct})

使用SpaCy进行文本清洗

六、学后总结

1. Python在处理文本数据时,不仅精确而且速度还更快,减少了在多个软件的切换,可以满足个性化文本清理的要求。需要注意的是要添加多个工具之前的相互验证,减少因为疏忽而产生的问题。

2. 至于使用re还是word_tokenize需要根据你的数据结果要求,科学研究建议还是使用word_tokenize,因为这样更加严谨一些。

http://www.dtcms.com/a/111524.html

相关文章:

  • 从代码学习深度学习 - LSTM PyTorch版
  • 【硬件模块】数码管模块
  • 理解OSPF Stub区域和各类LSA特点
  • QEMU学习之路(5)— 从0到1构建Linux系统镜像
  • 【学习篇】fastapi接口定义学习
  • 19.TCP相关实验
  • 哈密尔顿路径(Hamiltonian Path)及相关算法题目
  • 前端快速入门学习3——CSS介绍与选择器
  • 第三季:挪威
  • 阿里Qwen 创建智能体,并实现ubantu系统中调用
  • 对用户登录设计测试用例
  • Transformer由入门到精通(一):基础知识
  • CSS快速上手
  • BUUCTF-web刷题篇(10)
  • 封装自己的api签名sdk
  • 数据结构 -- 图的存储
  • SpringBoot定时任务深度优化指南
  • ubuntu部署ollama+deepseek+open-webui
  • OpenCV 实现对形似宝马标的黄黑四象限标定位
  • 字符串移位包含问题
  • CExercise_1_4continue关键字在while循环和for循环中,实现的功能有什么区别?
  • Neo4j操作数据库(Cypher语法)
  • NO.61十六届蓝桥杯备战|基础算法-双指针|唯一的雪花|逛画展|字符串|丢手绢(C++)
  • 管理系统 UI 设计:提升企业办公效率的关键
  • (多看) CExercise_05_1函数_1.2计算base的exponent次幂
  • 花卉识别分类系统,Python/resnet18/pytorch
  • MySQL简介
  • 大钲资本押注儒拉玛特全球业务,累计交付超2500条自动化生产线儒拉玛特有望重整雄风,我以为它破产倒闭了,担心很多非标兄弟们失业
  • SpringBoot配置文件多环境开发
  • 空中无人机等动态目标识别2025.4.4