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

文本预处理

一、文本的基本单位

1、Token

定义:文本的最小单位,例如单词、标点符号。

示例:

原句: "I love NLP."

分词结果: ['I', 'love', 'NLP', '.']

2、语法与语义

语法:词的结构和句子的组合规则。

语义:词的含义和上下文理解。

示例:

句子 "Time flies like an arrow." 有多重解释:

时间像箭一样飞逝。

像箭一样的飞虫在时间中飞翔。

二、基本的文本预处理

1、分词(Tokenization)

  • 英文分词:基于空格或标点分隔。
  • 中文分词:基于统计和规则的方法,如 Jieba。

2、去停用词

停用词:意义较小或频率过高的词,例如 "the", "is", "and"。

3、词干化

将词语削减为根形式,例如 running → run。

4、词形还原

考虑语法规则还原为词的基本形式,例如 mice → mouse。

三、用nltk库做文本预处理

NLTK(Natural Language Toolkit) 是一个功能强大、 灵活性高的开源 Python 库, 专为自然

语言处理(NLP) 领域的研究和开发而设计。 NLTK 提供了一套丰富的工具和资源, 适合处

理、分析和理解人类语言文本。

1、文本预处理包

  • 分词: nltk.tokenize.word_tokenize
  • 停用词库: nltk.corpus.stopwords
  • 词干化: nltk.stem.PorterStemmer
  • 词形还原: nltk.stem.WordNetLemmatizer

2、案例

使用 Python 对自己的文本数据进行分词、去停用词操作,并计算剩余单词的数量

文本如下:

"Dr. Smith's favorite movie in 2024 is 'Inception'; he rates it 9/10 stars! Isn't that amazing? Let's analyze this #text with NLP techniques: @homework1.py, line 42."

代码如下:

from nltk import pos_tag
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer,WordNetLemmatizerfrom src.common import utildef text_prepare(text):#分词print(f"原始文本:{text}")tokens = word_tokenize(text)print(f"分词后:{tokens}")#去除停用词en_stopwords  = stopwords.words('english') #获取英文停用词表print(f"去除停用词前文本长度:{len(tokens)}")filter_stop_words = []for token in tokens:token = token.lower()if token not in en_stopwords:filter_stop_words.append(token)print(f"去除停用词后文本:{filter_stop_words}")print(f"去除停用词后文本长度:{len(filter_stop_words)}")#词干化prepare_stem = []porter_stemmer = PorterStemmer()for token in filter_stop_words:token = porter_stemmer.stem(token)prepare_stem.append(token)print(f"词干化后:{prepare_stem}")#词性标注tagged_pos = pos_tag(filter_stop_words)print(f"词性标注后:{tagged_pos}")#词形还原prepare_lemma = []wordnetLemma = WordNetLemmatizer()for word, pos in tagged_pos:prepare_lemma.append(wordnetLemma.lemmatize(word,util.get_wordnet_pos(pos)))print(f"词形还原后:{prepare_lemma}")def main():file_path = "example"with(open(file_path, "r", encoding="utf-8")) as file:text = file.read()text_prepare(text)if __name__ == '__main__':main()

运行结果:

原始文本:"Dr. Smith's favorite movie in 2024 is 'Inception'; he rates it 9/10 stars! Isn't that amazing? Let's analyze this #text with NLP techniques: @homework1.py, line 42."分词后:['``', 'Dr.', 'Smith', "'s", 'favorite', 'movie', 'in', '2024', 'is', "'Inception", "'", ';', 'he', 'rates', 'it', '9/10', 'stars', '!', 'Is', "n't", 'that', 'amazing', '?', 'Let', "'s", 'analyze', 'this', '#', 'text', 'with', 'NLP', 'techniques', ':', '@', 'homework1.py', ',', 'line', '42', '.', "''"]去除停用词前文本长度:40去除停用词后文本:['``', 'dr.', 'smith', "'s", 'favorite', 'movie', '2024', "'inception", "'", ';', 'rates', '9/10', 'stars', '!', "n't", 'amazing', '?', 'let', "'s", 'analyze', '#', 'text', 'nlp', 'techniques', ':', '@', 'homework1.py', ',', 'line', '42', '.', "''"]
去除停用词后文本长度:32词干化后:['``', 'dr.', 'smith', "'s", 'favorit', 'movi', '2024', "'incept", "'", ';', 'rate', '9/10', 'star', '!', "n't", 'amaz', '?', 'let', "'s", 'analyz', '#', 'text', 'nlp', 'techniqu', ':', '@', 'homework1.pi', ',', 'line', '42', '.', "''"]词性标注后:[('``', '``'), ('dr.', 'NN'), ('smith', 'NN'), ("'s", 'POS'), ('favorite', 'JJ'), ('movie', 'NN'), ('2024', 'CD'), ("'inception", 'NN'), ("'", "''"), (';', ':'), ('rates', 'NNS'), ('9/10', 'CD'), ('stars', 'NNS'), ('!', '.'), ("n't", 'RB'), ('amazing', 'VBG'), ('?', '.'), ('let', 'NN'), ("'s", 'POS'), ('analyze', 'JJ'), ('#', '#'), ('text', 'JJ'), ('nlp', 'NN'), ('techniques', 'NNS'), (':', ':'), ('@', 'NN'), ('homework1.py', 'NN'), (',', ','), ('line', 'NN'), ('42', 'CD'), ('.', '.'), ("''", "''")]词形还原后:['``', 'dr.', 'smith', "'s", 'favorite', 'movie', '2024', "'inception", "'", ';', 'rate', '9/10', 'star', '!', "n't", 'amaze', '?', 'let', "'s", 'analyze', '#', 'text', 'nlp', 'technique', ':', '@', 'homework1.py', ',', 'line', '42', '.', "''"]

http://www.lryc.cn/news/530962.html

相关文章:

  • SQLAlchemy 2.0的简单使用教程
  • 基于RAG的知识库问答系统
  • SQL/Panda映射关系
  • 自定义数据集 使用paddlepaddle框架实现逻辑回归
  • Docker入门篇(Docker基础概念与Linux安装教程)
  • c/c++高级编程
  • 2024-我的学习成长之路
  • vscode软件操作界面UI布局@各个功能区域划分及其名称称呼
  • xmind使用教程
  • Day33【AI思考】-分层递进式结构 对数学数系的 终极系统分类
  • k8s二进制集群之ETCD集群证书生成
  • MySQL5.5升级到MySQL5.7
  • Golang Gin系列-9:Gin 集成Swagger生成文档
  • 利用Python高效处理大规模词汇数据
  • 【PyQt】超级超级笨的pyqt计算器案例
  • Git 的起源与发展
  • 预防和应对DDoS的方法
  • 51单片机开发:独立按键实验
  • 02.04 数据类型
  • FPGA学习篇——开篇之作
  • 【Cadence仿真技巧学习笔记】求解65nm库晶体管参数un, e0, Cox
  • 【RocketMQ】RocketMq之IndexFile深入研究
  • 小白零基础--CPP多线程
  • 利用deepseek参与软件测试 基本架构如何 又该在什么环节接入deepseek
  • 大模型微调技术总结及使用GPU对VisualGLM-6B进行高效微调
  • WPF进阶 | WPF 样式与模板:打造个性化用户界面的利器
  • Java 大视界 -- Java 大数据在自动驾驶中的数据处理与决策支持(68)
  • 自动化构建-make/Makefile 【Linux基础开发工具】
  • python学opencv|读取图像(五十二)使用cv.matchTemplate()函数实现最佳图像匹配
  • 通信方式、点对点通信、集合通信