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

36 Python 时序和文本:中文文本处理入门:为什么要先做分词和停用词过滤?

中文文本处理入门为什么要先做分词和停用词过滤刚接触文本分析时很多人都会有一个疑问文本明明已经有内容了为什么不能直接拿去做分类、聚类或者情感分析这个问题其实正好指向了文本挖掘里最基础、也最关键的一步文本预处理。文本挖掘通常包括文本预处理、文本挖掘和模式评估与表示三个主要过程 。如果预处理没有做好后面的分析效果往往会受到明显影响。这篇文章主要回答两个问题为什么中文文本通常要先分词为什么分词之后还要做停用词过滤下面就从这两个问题开始。一、为什么文本不能直接分析从人的角度看一段文本的意思通常很容易理解。比如下面几条评论这个电影真的很好看我很喜欢剧情太拖沓了不推荐演员表现不错但是节奏一般画面很棒音乐也很好听人很容易看出它们在表达什么但计算机并不能直接做到这一点。因为对计算机来说原始文本最开始只是一串字符它并不知道哪些字应该组合成一个词哪些词更重要哪些词只是语气词或结构词哪些词真正能帮助区分文本内容而文本挖掘的目标是从大量文本数据中抽取未知但有用的知识。由于文本数据具有模糊性、非结构化等特点所以文本挖掘本身就是一项相对复杂的工作 。这也是为什么文本不能直接“原样进入模型”而需要先经过预处理。二、文本预处理在做什么文本预处理的作用可以简单理解为先把原始文本整理成计算机更容易处理的形式。在文本挖掘流程中文本预处理的任务是选取与任务相关的文本并将其转化成文本挖掘工具可以处理的中间形式 。对于中文文本来说这里面最基础的两步通常就是分词停用词过滤这两步看起来简单但后面的很多工作都建立在它们之上。三、为什么中文文本通常要先分词这个问题和中文本身的表达方式有关。英文文本通常有空格例如This movie is very good至少可以先按空格切开。但中文通常是连续书写的例如这个电影真的很好看我很喜欢对计算机来说它并不知道应该切成这个 / 电影 / 真的 / 很 / 好看 / 我 / 很 / 喜欢还是别的形式。在中文文本处理中一般认为词语是最小的语义单元。一句话可以由多个词语组成而词语又可以由一个或多个汉字组成。因此在进行文本分类等任务之前首先要把文本切分成计算机可以处理的语义单元 。也正因为如此和英文相比中文文本预处理更重要也更复杂。四、什么是分词分词就是把连续的中文文本切分成一个个词语。比如下面这句话这个电影真的很好看我很喜欢分词之后可能会得到这样的结果这个 / 电影 / 真的 / 很 / 好看 / 我 / 很 / 喜欢分词的意义在于把整句文本拆成更小的语义单元为后续的统计分析提供基础为特征提取和建模做准备如果不先分词后续很多文本分析工作很难展开。五、分词之后为什么还不够分词做完之后文本确实从“句子”变成了“词语集合”但这还不等于已经可以直接做分析。原因在于词出现得多并不等于它就更有价值。在你提供的课件中也提到文本中的词并不是出现频率越高代表性就越强 。例如下面这些词的了啊唉它们可能在很多文本里都频繁出现但对于表达主题帮助很小。这些词既不能很好地区分不同文本也很难帮助模型判断文本内容。所以分词之后还需要继续做一步处理停用词过滤。六、什么是停用词如果一个词在文档中出现得很频繁但并不能帮助表达主题比如“的”“啊”“唉”这类词那么这些词对区分文档是没有意义的这类词就叫做停用词Stop Word。停用词通常有几个特点出现频率高信息量低对文本分类、聚类、关键词提取等任务帮助不大因此通常需要把这些词从原始文本中去掉这个过程就叫做停用词过滤。七、为什么要做停用词过滤停用词过滤的目的核心上是为了减少噪声让文本中更有价值的信息更容易保留下来。可以从几个角度来理解。1. 停用词会干扰统计结果如果不做过滤词频统计里排在前面的往往会是“的”“了”“我”“也”这一类词。这些词虽然常见但通常不能代表文本主题。2. 停用词会降低区分度如果我们要判断一段文本是正面评价还是负面评价那么像“的”“了”这种词在两类文本里都可能大量出现它们并不能帮助分类。3. 停用词会影响后续特征提取后面做词袋模型、TF-IDF 或文本分类时如果保留了太多停用词就会引入很多低价值特征影响分析效果 。所以停用词过滤并不是“可有可无的小优化”而是文本预处理中很常见、也很必要的一步 。八、停用词一般怎么过滤常见有两种方式。方法 1按词频比例过滤统计每个词在整个文档集中的出现情况如果某个词出现得过于频繁比如超过文档总量的一定比例例如 80%就把它视为停用词 。这种方法的特点是可以结合当前语料自动判断高频词但阈值设置有一定经验性也可能误删一些高频但其实有用的词方法 2使用停用词表另一种更常见的方法是提前准备一个停用词表凡是出现在表里的词都过滤掉 。常见停用词表包括哈工大停用词表四川大学机器学习智能实验室停用词库百度停用词表对于入门练习和一般课程实验来说通常直接使用停用词表会更方便。九、代码演示中文分词与停用词过滤下面用一个简单示例把“分词 停用词过滤”的流程完整跑一遍。十、准备示例文本先准备几条电影评论文本texts[这个电影真的很好看我很喜欢演员演技也不错。,剧情太拖沓了看得我想睡觉不推荐。,画面非常漂亮但是故事比较一般。,音乐很好听节奏也不错整体体验很好。,这部电影太无聊了浪费时间。]十一、安装并导入依赖库如果本地还没有安装jieba先执行pipinstalljieba然后导入importjiebafromcollectionsimportCounter十二、第一步对文本进行分词texts[这个电影真的很好看我很喜欢演员演技也不错。,剧情太拖沓了看得我想睡觉不推荐。,画面非常漂亮但是故事比较一般。,音乐很好听节奏也不错整体体验很好。,这部电影太无聊了浪费时间。]segmented_texts[]fortextintexts:wordsjieba.lcut(text)segmented_texts.append(words)fori,wordsinenumerate(segmented_texts,1):print(f文本{i}分词结果{words})运行后不同环境下分词结果可能略有差异但大体上会得到一组词语序列。十三、第二步准备停用词表为了方便演示这里手工定义一个小型停用词表。实际项目中也可以换成外部停用词文件。stopwords{的,了,我,也,很,太,这部,这个,,。,,,是,在,不,得,看得}这里要提醒一点停用词表不是绝对固定的。比如做情感分析时“不”有时就很重要不一定适合直接删除。十四、第三步进行停用词过滤filtered_texts[]forwordsinsegmented_texts:filtered_words[wordforwordinwordsifwordnotinstopwordsandword.strip()]filtered_texts.append(filtered_words)fori,wordsinenumerate(filtered_texts,1):print(f文本{i}过滤后结果{words})过滤之后保留下来的词通常会更接近文本真正想表达的内容。十五、过滤前后做一个对比把原文本、分词结果和过滤后结果放在一起看会更直观。foriinrange(len(texts)):print(f\n 文本{i1})print(原文本,texts[i])print(分词结果,segmented_texts[i])print(过滤后,filtered_texts[i])你会看到过滤后留下来的词往往更有分析价值比如电影好看喜欢演员演技剧情拖沓睡觉推荐音乐无聊浪费时间相比之下“的、了、我、很”这类词就没有那么重要。十六、统计高频词看看过滤效果为了更直观地看到停用词过滤的作用可以分别统计过滤前和过滤后的高频词。1. 统计过滤前高频词all_words_before[]forwordsinsegmented_texts:all_words_before.extend([wforwinwordsifw.strip()])counter_beforeCounter(all_words_before)print( 过滤前高频词 )forword,countincounter_before.most_common(15):print(f{word}:{count})2. 统计过滤后高频词all_words_after[]forwordsinfiltered_texts:all_words_after.extend(words)counter_afterCounter(all_words_after)print(\n 过滤后高频词 )forword,countincounter_after.most_common(15):print(f{word}:{count})一般情况下过滤前高频词里会出现很多标点和功能词过滤之后留下来的词会更接近文本主题。这也正好说明了一个很重要的结论词频高不代表词就更有代表性。十七、完整可运行代码下面是一份可以直接复制运行的完整代码。importjiebafromcollectionsimportCounter# 1. 原始文本texts[这个电影真的很好看我很喜欢演员演技也不错。,剧情太拖沓了看得我想睡觉不推荐。,画面非常漂亮但是故事比较一般。,音乐很好听节奏也不错整体体验很好。,这部电影太无聊了浪费时间。]# 2. 停用词表演示版stopwords{的,了,我,也,很,太,这部,这个,,。,,,是,在,不,得,看得}# 3. 分词segmented_texts[]fortextintexts:wordsjieba.lcut(text)segmented_texts.append(words)# 4. 停用词过滤filtered_texts[]forwordsinsegmented_texts:filtered_words[wordforwordinwordsifwordnotinstopwordsandword.strip()]filtered_texts.append(filtered_words)# 5. 输出对比结果foriinrange(len(texts)):print(f\n 文本{i1})print(原文本,texts[i])print(分词结果,segmented_texts[i])print(过滤后,filtered_texts[i])# 6. 统计过滤前高频词all_words_before[]forwordsinsegmented_texts:all_words_before.extend([wforwinwordsifw.strip()])counter_beforeCounter(all_words_before)print(\n 过滤前高频词 )forword,countincounter_before.most_common(15):print(f{word}:{count})# 7. 统计过滤后高频词all_words_after[]forwordsinfiltered_texts:all_words_after.extend(words)counter_afterCounter(all_words_after)print(\n 过滤后高频词 )forword,countincounter_after.most_common(15):print(f{word}:{count})输出Building prefix dict from the default dictionary ... Loading model from cache C:\Users\35979\AppData\Local\Temp\jieba.cache Loading model cost 0.603 seconds. Prefix dict has been built successfully. 文本1 原文本 这个电影真的很好看我很喜欢演员演技也不错。 分词结果 [这个, 电影, 真的, 很, 好看, , 我, 很, 喜欢, , 演员, 演技, 也, 不错, 。] 过滤后 [电影, 真的, 好看, 喜欢, 演员, 演技, 不错] 文本2 原文本 剧情太拖沓了看得我想睡觉不推荐。 分词结果 [剧情, 太, 拖沓, 了, , 看得, 我, 想, 睡觉, , 不, 推荐, 。] 过滤后 [剧情, 拖沓, 想, 睡觉, 推荐] 文本3 原文本 画面非常漂亮但是故事比较一般。 分词结果 [画面, 非常, 漂亮, , 但是, 故事, 比较, 一般, 。] 过滤后 [画面, 非常, 漂亮, 但是, 故事, 比较, 一般] 文本4 原文本 音乐很好听节奏也不错整体体验很好。 分词结果 [音乐, 很, 好听, , 节奏, 也, 不错, , 整体, 体验, 很, 好, 。] 过滤后 [音乐, 好听, 节奏, 不错, 整体, 体验, 好] 文本5 原文本 这部电影太无聊了浪费时间。 分词结果 [这部, 电影, 太, 无聊, 了, , 浪费时间, 。] 过滤后 [电影, 无聊, 浪费时间] 过滤前高频词 : 8 。: 5 很: 4 电影: 2 我: 2 也: 2 不错: 2 太: 2 了: 2 这个: 1 真的: 1 好看: 1 喜欢: 1 演员: 1 演技: 1 过滤后高频词 电影: 2 不错: 2 真的: 1 好看: 1 喜欢: 1 演员: 1 演技: 1 剧情: 1 拖沓: 1 想: 1 睡觉: 1 推荐: 1 画面: 1 非常: 1 漂亮: 1十八、如果要读取外部停用词表如果你已经准备好了stopwords.txt文件也可以这样写importjieba# 读取停用词表withopen(stopwords.txt,r,encodingutf-8)asf:stopwordsset(line.strip()forlineinf)text这个电影真的很好看我很喜欢演员演技也不错。wordsjieba.lcut(text)filtered_words[wordforwordinwordsifwordnotinstopwordsandword.strip()]print(分词结果,words)print(过滤结果,filtered_words)这种方式更适合后续扩展到更大的文本集。十九、几个容易忽略的问题1. 词频高不一定就重要这是文本处理中很常见的误区。出现得多只能说明它常见不代表它真的有区分能力 。2. 停用词表不是固定不变的不同任务中停用词可能不同。某些词在一个任务里没用在另一个任务里可能很重要。3. 分词不是文本预处理的全部分词和停用词过滤只是开始。后面通常还会继续做文本表征比如词袋模型或 TF-IDF把词变成算法可以处理的数值形式 。二十、课后思考可以试着想一想下面几个问题如果我要做“好评 / 差评”分类停用词表能不能直接照搬“不”这个词在情感分析中到底该不该删如果文本换成新闻标题而不是电影评论停用词会不会发生变化如果完全不做停用词过滤后面的特征提取会受到什么影响二十一、小结这篇文章主要讲了两件事。第一为什么中文文本通常要先分词。因为中文没有天然空格而词语通常被看作最小语义单元所以分词是文本处理的基础 。第二为什么分词之后还要做停用词过滤。因为文本中的词并不是出现频率越高就越重要那些高频但对表达主题帮助不大的词需要在预处理阶段先过滤掉 。可以把这一步简单理解成分词把文本拆开停用词过滤把噪声去掉这两步处理之后文本才更适合进入后续的特征提取和建模流程。

相关文章:

36 Python 时序和文本:中文文本处理入门:为什么要先做分词和停用词过滤?

中文文本处理入门:为什么要先做分词和停用词过滤? 刚接触文本分析时,很多人都会有一个疑问: 文本明明已经有内容了,为什么不能直接拿去做分类、聚类或者情感分析? 这个问题其实正好指向了文本挖掘里最基础、…...

云效流水线实战:从零部署Java应用到阿里云ECS(含完整脚本)

云效流水线实战:从零部署Java应用到阿里云ECS(含完整脚本) 在当今快节奏的软件开发环境中,自动化部署已成为提升团队效率的关键环节。阿里云云效平台提供的流水线功能,为开发者提供了一套完整的CI/CD解决方案&#xff…...

跨境云手机适用于哪些场景

跨境云手机适用于多种场景,能为不同用户群体带来便利与价值,对于跨境电商从业者而言,可用于多账号管理与运营,通过在云端虚拟出不同地区、不同配置的手机环境,实现多个店铺账号的同时登录和独立操作,有效规…...

果园灌溉施肥控制系统改造之西门子 S7 - 1200 PLC 实战

果园灌溉施肥控制系统改3 西门子s7-1200plc程序博途v16,带 选型表 io表接线图CAD和运行效果视频最近搞了个果园灌溉施肥控制系统的改造项目,用的是西门子 S7 - 1200 PLC,编程软件是博途 V16,这过程还挺有意思,跟大家…...

知识引导上下文优化(KgCoOp):一种解决灾难性遗忘的 Prompt Tuning 机制

来源:DeepHub IMBA 本文约3000字,建议阅读5分钟本文提出了一种简单有效的约束机制。视觉-语言模型(VLMs)如 CLIP 彻底改变了零样本图像识别的处理方式。这类模型在包含 4 亿个图像-文本对的大规模数据集上进行训练,捕获…...

C++/Qt 使用 Tushare 获取股票信息

探索数据之源:使用tushare为Qt/C学习项目获取股票数据在进行金融量化分析或学习金融市场行为时,获取高质量、结构化的股票数据是至关重要的第一步。作为一个计划将Qt/C用于金融数据可视化或策略模拟的学习者,我近期深入体验了使用Python库tus…...

VR视频转换终极指南:让3D内容在普通设备上轻松播放

VR视频转换终极指南:让3D内容在普通设备上轻松播放 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.com/gh_mirro…...

如何用ChatALL实现AI智能协同:一次提问,多模型对比的解决方案

如何用ChatALL实现AI智能协同:一次提问,多模型对比的解决方案 【免费下载链接】ChatALL Concurrently chat with ChatGPT, Bing Chat, Bard, Alpaca, Vicuna, Claude, ChatGLM, MOSS, 讯飞星火, 文心一言 and more, discover the best answers 项目地…...

好用还专业!高效论文写作全流程AI论文网站推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节,以下工具按环节精准匹配,兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求,覆盖免费/付费、通用/垂直场景。2026年AI论…...

缺失的第一个正数(力扣100)

最朴素的想法就是从1开始查找,看看谁不在,时间复杂度为On但是需要把原数组变成集合,空间复杂度为On不符合题目的常数级空间开销我们要找的是“第一个缺失的正数”。如果数组长度是 $N$,那么这个答案一定落在 [1, N1] 这个区间里。…...

终极简单教程:如何使用bilibili-parse免费获取B站视频资源

终极简单教程:如何使用bilibili-parse免费获取B站视频资源 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 想要快速获取B站视频资源却不知道从何入手?bilibili-parse作为一款简…...

3D元器件库技术解析与工程应用指南

## 1. 3D元器件库技术解析与应用指南### 1.1 3D封装库的技术价值 在现代电子设计自动化(EDA)流程中,高质量的3D元器件库可显著提升设计效率。本套封装库包含1088个标准封装模型,涵盖电阻器、电容器、接线端子、IC芯片、晶振等常见电子元件,所…...

SAP FICO财务账期管理实战:关键配置与月结操作指南

1. SAP FICO财务账期管理基础概念 财务账期管理是SAP FICO模块中最基础也最重要的功能之一。简单来说,它就像财务部门的"门禁系统",控制着哪些会计凭证能在特定时间段被录入系统。想象一下,如果超市收银台没有营业时间限制&#xf…...

手把手教你用NOAA气象数据做可视化分析(含常见字段解析与避坑指南)

手把手教你用NOAA气象数据做可视化分析(含常见字段解析与避坑指南) 气象数据可视化是理解气候模式、分析极端天气事件的重要工具。美国国家海洋和大气管理局(NOAA)提供的全球历史气候网络日数据(GHCN-Daily&#xff0…...

5个必知技巧:让你的PT下载效率提升300%的浏览器插件指南

5个必知技巧:让你的PT下载效率提升300%的浏览器插件指南 【免费下载链接】PT-Plugin-Plus PT 助手 Plus,为 Microsoft Edge、Google Chrome、Firefox 浏览器插件(Web Extensions),主要用于辅助下载 PT 站的种子。 项…...

深度剖析:synchronized 底层实现原理(JVM 视角)

一、Java对象内存布局的深度拆解原文提到了对象头,这里补充64位JVM的完整对象布局和对齐填充的底层原因。1.1 64位JVM的完整对象结构text┌─────────────────────────────────────────────┐ │ 对象头…...

类型注解写错=线上Bug潜伏!:3个导致Pydantic崩溃、FastAPI 500、mypy静默失效的致命细节

第一章:类型注解写错线上Bug潜伏!:3个导致Pydantic崩溃、FastAPI 500、mypy静默失效的致命细节泛型未参数化:List 而非 List[str] 的隐式陷阱 Pydantic v2 强制要求泛型类型必须显式参数化。若仅写 List(而非 List[str…...

利用快马平台快速构建免费节点测试工具原型,十分钟完成开发

今天想和大家分享一个快速验证免费节点可用性的小工具开发过程。作为一个经常需要测试代理节点的开发者,手动一个个验证实在太费时间,于是我用InsCode(快马)平台快速搭建了一个原型工具,整个过程比想象中简单很多。 需求分析 免费节点测试工具…...

Windows Defender移除工具终极指南:如何彻底禁用Windows Defender提升系统性能

Windows Defender移除工具终极指南:如何彻底禁用Windows Defender提升系统性能 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://git…...

ComfyUI与Stable Diffusion WebUI模型共享终极指南:如何通过extra_model_paths.yaml一键配置

ComfyUI与Stable Diffusion WebUI模型共享终极指南:如何通过extra_model_paths.yaml一键配置 在AI绘图领域,ComfyUI和Stable Diffusion WebUI(简称WebUI)各有优势。ComfyUI以其高度可定制的工作流著称,而WebUI则提供了…...

免费内容解锁工具:提升信息获取效率的技术解决方案

免费内容解锁工具:提升信息获取效率的技术解决方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,专业内容与普通用户之间往往隔着一道…...

nanomsg性能基准测试终极指南:不同消息大小下的吞吐量对比分析

nanomsg性能基准测试终极指南:不同消息大小下的吞吐量对比分析 【免费下载链接】nanomsg nanomsg library 项目地址: https://gitcode.com/gh_mirrors/na/nanomsg nanomsg是一个轻量级、高性能的消息传递库,专为解决常见的通信模式而设计。作为na…...

HertzBeat与Prometheus兼容性详解:平滑迁移和生态整合终极指南

HertzBeat与Prometheus兼容性详解:平滑迁移和生态整合终极指南 Apache HertzBeat是一款功能强大的开源实时监控系统,与Prometheus生态系统完美兼容,提供无代理、高性能集群和自定义监控功能。🚀 作为新一代监控工具,H…...

Apache Sedona 使用教程

Apache Sedona 使用教程 项目介绍 Apache Sedona 是一个用于大规模空间数据处理的分布式计算系统。它基于 Apache Spark,提供了高效的空间数据处理能力,支持多种空间数据类型和操作。Sedona 旨在为大数据环境下的地理空间分析提供强大的支持,…...

深入理解incubator-pagespeed-ngx配置:50个实用参数详解与最佳实践

深入理解incubator-pagespeed-ngx配置:50个实用参数详解与最佳实践 Apache incubator-pagespeed-ngx是一个强大的Nginx性能优化模块,能够自动优化网站资源,显著提升页面加载速度。无论你是网站管理员还是开发人员,掌握其配置参数…...

League-Toolkit:提升英雄联盟竞技效率的智能辅助工具集

League-Toolkit:提升英雄联盟竞技效率的智能辅助工具集 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolki…...

Python制作简易PDF查看工具——PDFViewerV1.0

PDFViewer PDF浏览工具,是使用Python语言(使用PyQt5开发界面,PDF解析使用PyMuPDF开源模块)开发的PDF查看工具,已经实现基本翻页浏览、OCR文字识别(基于开源主流文字识别模型实现)、内容查找高亮…...

Medusa小程序:微信、支付宝等小程序平台对接的完整指南

Medusa小程序:微信、支付宝等小程序平台对接的完整指南 【免费下载链接】medusa 项目提供了构建数字商务所需的组件和服务,旨在简化和加速电子商务平台的开发工作流程。 项目地址: https://gitcode.com/GitHub_Trending/me/medusa Medusa是一个强…...

这份榜单够用!盘点2026年用户挚爱的一键生成论文工具

一天写完毕业论文在2026年已不再是天方夜谭。以下是2026年最炸裂、实测能大幅提速的一键生成论文工具,覆盖选题构思、文献综述、数据整理、格式排版等核心场景,高效搞定论文不再只是梦想。 一、全流程王者:一站式搞定论文全链路(一…...

导师严选!盘点2026年抢手爆款的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、降重润色四大核心场景,帮你高效搞定论文,轻松应对学术挑战。 一、全流程王者:一站式搞定论文全链路…...