哈工大停用词表全解析:中文NLP预处理的第一步

发布时间:2026/10/24 16:12:06
哈工大停用词表全解析:中文NLP预处理的第一步 简介面向中文自然语言处理、信息检索与文本挖掘任务的分词辅助资源适用于需要开展文本预处理的学生、算法工程师与研究人员。停用词表集中收录了“的、了、是”等高频虚词以及标点符号、数字符号等无实义项可在分词阶段自动过滤对语义贡献有限的词汇降低噪声干扰从而提升文本分类、情感分析、关键词抽取等后续任务的精度也有助于减轻机器学习模型训练时的冗余输入。资源包共1个文件为doc格式文档整体大小仅39KB便于直接打开、复制或导入分词框架使用内容为哈工大停用词表全文可与LTP等中文NLP工具衔接简化分词流程并提高处理效率。目前已有3261人浏览/学习属于小而实用的基础资源适合在搭建NLP实验或落地中文文本分析项目时作为预处理字典直接调用。1. 哈工大停用词表到底是个啥先别被那一大串乱码吓住第一次用 Word 打开《哈工大停用词表.doc》的人八成会以为自己下载了一个损坏的文件满屏的——、①、--、∈、㈧像一台失控的机器在乱打键盘。其实这份看似乱码的清单是自然语言处理NLP领域流传极广的一份经典资源——停用词表。通俗地说它就像淘米之前那把筛子先把米里的沙粒、谷壳挑出去后面煮出来的饭才干净。中文文本处理也一样先通过停用词表把的、了、是、和这些高频但几乎不带信息量的词过滤掉后续的分词统计、文本分类、关键词提取才能聚焦在真正有意义的词上。搞懂这张表你也就搞懂了中文文本预处理的第一个环节。2. 为什么中文分词要先过一道筛子停用词表存在的真正理由在动手把哈工大停用词表接进自己的项目之前得先回答一个更基本的问题为什么偏偏是停用词而且偏偏要在分词这个环节处理它们答案藏在中文和英文的天然差异里。2.1 中文没有空格分词本身就是一道硬门槛英文句子 I love this movie 里单词之间用空格隔开程序只需要按空格掰开就能拿到一个个词。中文完全不同我爱这部电影连成一串中间没有空格计算机需要自己去猜词的边界到底在哪里。于是就有了分词这个任务把连续的中文字符串切分成一个个有意义的词汇单元。很多人第一次接触中文 NLP 时会以为分词就是把句子随便切一切。实际上分词质量直接决定了后续所有环节的天花板。词性标注、命名实体识别、依存句法分析、语义角色标注全部建立在切出来的词是对的这个前提上。LTP 这类成熟的中文处理平台核心能力之一正是中文分词。很多初学者卡住的地方不在接口不会调而在不理解一件事——分词结束之后还有一道扔词的决策要做。因为分词结果里既有爱电影这种承载实际含义的词也有我这部的这种语法作用远大于语义作用的词。如果直接拿全部分词结果去做词频统计排在最前面的几乎永远是的、了、在、是、我、你、他。它们在一句话里反复出现却说不出来任何具体信息。停用词表要解决的就是这个高频但没营养的问题。2.2 高频不一定有信息量一个词到底值不值得留信息论里有一个很朴素的判断标准一个词的价值取决于它帮你区分文本的能力。的字在几乎每句话里都会出现但你没法靠它判断一篇文章讲的是体育还是财经、是好评还是差评。相反涨停夺冠确诊这类词出现频率不一定高但只要出现一次文本的主题倾向就非常明确。前者就是停用词后者才是我们真正关心的关键词。用一个生活的比喻收音机里的背景杂音永远在最响的位置但那不是你调台时要听的东西。停用词表做的工作就是帮你在信号和噪音之间划一条线让真正有信息量的词从统计数据里浮出来。这也是为什么几乎所有中文 NLP 项目在把文本转成向量之前都要先过一次这样的筛子。过滤掉噪音之后词频统计的结果更真实文本分类模型的特征更干净训练出来的模型也更容易泛化到新数据上。2.3 一个例子过滤前后到底差多少用最常见的场景——文本词频统计来演示。下面用一个简单流程说明分词→过滤两步的顺序和效果# 伪代码演示分词与停用词过滤的先后顺序 text 今天天气很好我和朋友一起去公园散步了。 # 第一步先分词注意是先分词不是先删词 tokens segment(text) print(tokens) # 输出: [今天, 天气, 很好, 我, 和, 朋友, 一起, 去, 公园, 散步, 了] # 第二步加载停用词表这里用哈工大停用词表的一部分做示意 stopwords set([今天, 我, 和, 一起, 了]) filtered [w for w in tokens if w not in stopwords] print(filtered) # 输出: [天气, 很好, 朋友, 去, 公园, 散步]这段代码最关键的地方在于顺序先分词再过滤。分词器输出完整的词序列后停用词表按词逐个筛查。被过滤掉的有代词我、连词和、助词了以及今天一起这类在多数任务下不携带关键信息的词。剩下的天气、很好、朋友、去、公园、散步清爽多了再去做词频统计、情感特征提取结果会聚焦得多。注意今天在这个表里被过滤只是一个例子。如果换成新闻舆情任务今天可能必须保留因为它是判断时效性的关键信号。这恰好说明一个道理停用词表从来不是铁板一块后面的章节会专门讲这个坑。2.4 停用词表在整条流水线里站在哪个位置一个标准的中文 NLP 流程通常是这样原始文本 → 分词 → 词性标注可选→ 停用词过滤 → 文本向量化 → 模型训练或预测。在这条流水线里分词器和停用词表是两件独立的事分词器负责把句子切对停用词表负责把没用的词扔出去。LTP 提供的是从分词、词性标注到依存句法分析、语义角色标注的一整套能力相当于一条完整的加工流水线而哈工大停用词表只是这条流水线里一个很小的辅助部件。它不绑定任何平台你完全可以自己写几行代码把它接进自己的项目里。提示分词和停用词过滤的顺序不能颠倒。先删掉的和再去分词会让分词器失去判断词边界的重要线索比如我爱的人会被删成我爱人意思完全变了。2.5 停用词的来源语言规律和数据噪音停用词不是语言学家拍脑袋一条条编出来的。一个成熟的停用词表通常包含两个来源一类是语言学意义上的虚词包括连词、介词、助词、语气词、代词它们在语法书里就被定义为不独立承担语义另一类是统计机器跑出来的高频噪音比如某些词在特定语料里出现频率极高但对区分文档毫无帮助典型的就是网页文本里的排版符、全角标点和计量单位碎片。哈工大停用词表里既有也、且、既然、倘若这类虚词也有--元吨这类统计痕迹正说明它走的是语言规则 数据统计的双通道路线。理解这个来源你就能理解为什么这份表看起来既规范又脏——它的任务本来就不是当字典而是当滤网。3. 停用词表里装的都是什么从的、了到一堆奇怪符号现在放下抽象的信息量理论直接把这份资源拆开看看《哈工大停用词表.doc》里面到底躺着哪些东西。归纳起来其实就三类。3.1 主力部队虚词和弱化实词翻到文件的前半部分最先注意到的是长长一串常见虚词也、且、既、既然、倘若、假如、虽然、但是、因此、于是、为了、按照、除了、关于。这些词在句子里的作用是连接、转折、限定、补充而不是表达具体的概念。在文本分类、主题建模这类任务里它们出现的频率和文本主题没有直接关系删掉之后几乎不影响对内容的理解。还有一类是被弱化的实词。比如一、一个、一些、许多、种、有的这类泛指数量词在统计意义上同样没有区分度。这一层几乎是所有语言共通的英文停用词表同样会收 a、an、the、of、and、with。做一个简单的句子实验就能感受到因为下雨所以我没去公园散步了。去掉虚词后变成下雨没去公园散步核心信息依然完整。但如果任务换成语义角色标注想知道谁没去、为什么没去那因为所以这层因果框架就是必需的。所以停用词表的取舍从来不是这个词对不对而是这个词在我的任务里有没有用。3.2 中文特有的符号噪音全角标点与圈号数字英文停用词表基本只收字母词中文停用词表却躲不开一大堆符号。在哈工大表里你能看到——--【】『』〔〕①②③这一大批符号条目。它们怎么会混进一张词表里因为中文网页、OCR 文档和爬虫抓下来的原始文本除了文字本身还夹着大量排版符、全角标点、装饰性符号。微信文章里常见的①②③用来分点【】用来标注栏目它们在视觉上帮助读者梳理结构但计算机做词频统计时只会把它们当成一个个独立的符号。如果不过滤掉分完词的文本里就全是这些高颜值噪音特征向量的维度被没有含义的符号位占满真正重要的词反而被挤到了后面。这是中文语料预处理里非常本土化的一个特色。处理过英文文本的人往往想不到还要为标点符号单独建一张表但做过中文爬虫文本的人几乎都会心一笑——这类脏数据太常见了。3.3 那些像乱码的条目到底是怎么来的最让初学者困惑的是文件中那些完全读不懂的条目比如[①⑥]、②、⑤、∈、㈧、、。乍一看像是编码错误造成的乱码其实它们是停用词表建设过程中最常见的副产物。停用词表不是语言学家坐在书桌前一条条编出来的而是统计 人工两步走出来的先用程序把某批语料里出现频率最高的片段捞出来再靠人眼判断哪些该扔进停用词表。那些本来应该被清洗掉的格式残留、乱码片段、特殊符号就被原样收进了表里。所以这份表看起来像黑匣子里倒出来的滤网——每一张实战用的停用词表都忠实地记录着它当年处理过的那批语料有多脏。理解了这一点你再看[①⑥]这类条目就不会觉得诡异了它是当年某批文本里高频出现的符号碎片不一定有语言意义但在那个数据环境里就是噪音。下载这份资源的人等于直接继承了别人当年踩坑筛出来的噪音清单。3.4 内容特点通用虚词 语料残留把整张表合起来看它的成分可以概括成三层。第一层是语言通用层也就是所有中文项目都该过滤的那批虚词第二层是符号格式层全角标点、圈号数字、排版符第三层是领域残留层比如元吨这类计量单位碎片。第三层特别有意思它说明当年构建这份表的语料里包含大量新闻、贸易、金融类文本。做这类文本分析时这些计量碎片就是高频噪音可一旦换到医学领域表里就该出现患者、入院、剂量这类词的噪音版本。所以准确地说哈工大停用词表是一份实打实从项目里长出来的资源而不是一本字典它既有通用价值又带着明显的使用痕迹。用好它的关键是分清哪些部分可以放心用哪些部分要根据自己的语料增删。3.5 用之前先做一个小清洗哈工大停用词表以 .doc 格式发布本质上是一串按行排列的条目。把它读进程序之前建议先做三件事把全角空格统一替换成半角把每行首尾的空白字符去掉再把仅含符号的空条目过滤掉。这三步不会改变表的含义但可以避免后续程序读到看起来是空白、实际是全角空格的诡异报错。不少初学者在这个地方踩过坑——明明加载了停用词表过滤结果却一动不动排查半天发现是编码和空白字符的问题。把文档转成 UTF-8 的纯文本格式再读入通常是最省事的做法。4. 哈工大表和别的停用词表有什么不同没有标准答案只有合不合适很多新手以为停用词表是全行业统一的拿到一份官方版本就能一劳永逸。实际上停用词表没有任何国家标准不同团队、不同业务背景下长出来的表长相完全不同。这一章专门讲清楚哈工大表跟其他常见停用词表的区别到底在哪。4.1 常见的停用词表对比目前中文圈子里流传较广的停用词表按来源和风格大致可以分成四类资源类型主要来源内容侧重最典型的使用场景哈工大停用词表依托多年 NLP 平台研发沉淀虚词 全角符号 数字噪声 计量残留配合 LTP 或一般中文文本预处理某搜索引擎停用词表搜索业务积累偏网页级过滤词包含大量半角符号信息检索、网页抓取文本清洗某高校实验室停用词表学术语料构建偏书面语虚词词量比较精简学术论文、新闻语料分析社区通用中文停用词库多来源合并维护词条多、覆盖广还带着不少网络新词快速起步、通用文本预处理这四类没有绝对的高下之分只有适不适合你手里的语料。搜索引擎业务沉淀出来的表对 URL、HTML 标签残留过滤得更狠学术语料构建的表对本文、研究、方法、实验这类论文高频词更敏感社区的通用表覆盖面广但在特定领域里往往不够精细。哈工大表的特点是虚词部分规范、符号部分齐全同时还带着一点金融贸易语料的残留做新闻、财经类文本会很顺手。4.2 它和 LTP 的关系一张滤网和一台机器这里要澄清一个高频误解哈工大停用词表不等于哈工大分词器。很多人下载了这张表以为就拿到了完整的分词能力其实完全不是一回事。LTP 才是那台完整的语言处理机器。它提供中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等一系列服务背后是持续的研发投入还拿过 CoNLL 2009 七国语言句法语义分析评测总成绩第一名和中文信息学会钱伟长一等奖被大量国内外研究机构和企业使用。哈工大停用词表只是这套体系里流出来的一个辅助资源属于预处理阶段的一张过滤清单。打个比方LTP 是一条加工流水线停用词表只是流水线上的一张滤网。滤网再出名也没办法代替整条流水线。你在自己的项目里用这张表时照样需要另外搭配分词工具先分词再套表过滤。把它理解成一个可插拔的公共资源会比哈工大出品的一整套方案准确得多。4.3 为什么这张表流传得特别广既然它只是一个辅助资源为什么偏偏哈工大表流传最广原因有三层。第一层是学术背书。它背靠 LTP 多年研发积累的声誉人们天然信任这套体系里产出的资源。第二层是实战性强。大多数停用词表只收干净的虚词哈工大表里却有一大堆全角符号和乱码残留这恰好是处理真实中文网页文本时最常见的脏数据大家用过一次就会发现真能用。第三层是社区惯性。很多开源项目在配置停用词表时默认就把它作为选择之一久而久之它成了事实上的社区默认表。但正因为流传太广它也被赋予了一个不该有的光环——以为它是万能的。实际上它只是特定研发视角和特定语料环境下的产物。别人默认用它不代表你的项目必须原样照搬。4.4 判断一张表适不适合你问三个问题再决定与其到处找最好用的停用词表不如先回答三个问题。第一我的语料是哪一类新闻、评论、论文还是社交媒体决定了高频噪音长什么样。第二我的任务需要保留哪些词情感分析必须保住否定词句法分析必须保住虚词。第三我希望最终进入模型的特征里出现什么想清楚这三个问题再回头审视哈工大表你就能判断出哪些词条可以直接用哪些词条需要删掉或补充。5. 停用词的常见误区不是把的、了删掉就万事大吉讲了原理、翻了内容你很可能觉得不就是删词嘛有什么难的。但真正把停用词表接进项目时它反而是最容易翻车的地方之一。下面五个误区是初学者最高发、也最伤指标的。5.1 误区一停用词表越全越好最容易搞混的想法是把能找到的所有停用词都塞进一张表文本就会变得无比干净。有人甚至把几千行的大全表直接套进情感分析模型结果不没这类否定词也被当成停用词删掉了。为什么会混因为停用听起来就是没用否定词在高频词里确实经常出现很容易被顺手扔进去。但情感分析里不好看和好看是完全相反的情感信号。把不删掉这部电影不好看就变成了这部电影好看模型输出的情感倾向直接颠倒指标断崖式下跌。怎么区分停用词表追求的不是大而全而是过滤噪音、保留信号之间的平衡。凡是词义会随语境反转的词比如否定词、程度词都要谨慎对待。建立自己的表时每加入一个词都要问一句删掉它会不会丢掉任务的关键信息5.2 误区二停用词和功能词是同一个概念初学者很容易把功能词和停用词划等号觉得的、了、着、过这些功能词就该一律删掉。这个误解的根源在于两者的集合确实高度重叠——功能词因为高频经常被收进停用词表。但功能词承载的是时态、语气、结构这类语法信息。比如了表示完成体着表示进行体被字句、把字句的句法结构全指望介词来标记。在句法分析、语义角色标注、机器翻译这些任务里功能词是句子的骨架抽走骨架整句话的语法关系就塌了。怎么区分记住一个判断停用词不是词的固有属性而是任务视角下的临时判定。同一个了字在词袋模型里是噪音在句法分析里就是关键信息。判断一个词该不该进停用词表永远先问任务再问词性。5.3 误区三先删停用词再分词这个误区的典型操作是为了省事先把文本里的的、了、和、是全部替换掉再把剩下的文本交给分词器。有人觉得这样分词器的工作量更小速度更快。但中文没有空格词与词的边界本来就靠上下文线索来判定。你把的删掉我爱的人立刻变成我爱人一个三层结构的名词短语变成了一个词把和删掉我和朋友变成我朋友意思从两个人变成了一个人。分词器拿到被破坏的句子切出来的词自然是错的后面的流程全线带崩。怎么区分正确流程必须严格走先分词 → 再过滤停用词。分词器需要完整句子作为输入停用词表是在分词结果上做减法。这道顺序不只是一种约定而是由中文自身特点决定的硬约束。5.4 误区四去掉停用词一定能提升准确率有些人做完实验发现加了停用词表之后效果变好就归功于去停用词这一步下次任务不加表效果变差也归咎于停用词表。其实去停用词和准确率之间没有必然的正向关系。这是因为某些任务恰恰依赖停用词传递信息。比如短文本相似度判断A 和 B 的关系与A 对 B 的关系完全不同介词和对就是关键信号。再比如短文本分类一条微博本来就二三十个字删掉一半停用词后整句话只剩三五个词模型几乎没有特征可用还可能出现过滤后文本为空的尴尬情况。怎么区分不要靠感觉去做消融实验同一份数据集、同一个模型分别跑完整停用词表精简停用词表不用停用词表三组用准确率、F1 这些指标做对比。实验结果会告诉你这份任务到底吃不吃停用词表这一套。5.5 误区五一张表直接套所有项目最后一个高频误区是把哈工大停用词表当万能钥匙原封不动用到所有项目里。前面已经说过这张表自带当年语料的残留痕迹比如元吨这类计量碎片。换到医疗领域该过滤的高频噪音变成患者、入院、剂量换到游戏领域又变成副本、装备、氪金。原表无法覆盖这些领域噪音。怎么区分推荐基表 扩展表的两层结构基础层放通用虚词和全角符号直接沿用哈工大表业务层放当前领域特有的噪音词按需增长。任何对表的删减和增补都要先做一份备份留下后悔药。表是可以随时改的但前提是你清楚每个词条当初为什么在里面。6. 什么时候该用、什么时候别用停用词表的适用边界了解了原理和误区之后最后落到实操判断什么样的项目该上停用词表什么样的项目最好别碰它。6.1 放心用的场景凡是用词的统计分布来代表文本的任务基本都应该过一遍停用词表。典型如文本分类、情感分析、关键词提取、主题建模、文本聚类以及搜索引擎建立倒排索引。这些场景的共同点是模型依赖词频和词共现来捕捉主题信号停用词只会稀释特征。过滤之后特征向量更紧凑训练速度更快模型也更容易泛化。6.2 最好别用的场景反过来凡是需要保留完整句法结构的任务停用词表就要慎用。机器翻译、句法分析、语义角色标注都需要虚词来搭建句法骨架文本摘要生成也依赖完整的句子结构。垂直领域同样要警惕法律文本里的不适用无异议医疗文本里的无异常否定词都是关键信息不能一刀切删掉。短文本场景比如微博、短信分析本来信息量就不足删完可能只剩一两个词建议先统计一下过滤后文本的平均长度再决定。6.3 一个翻车案例我见过一位做情感分析的开发者为了提升训练速度手动把不没无加进了停用词表。结果模型在验证集上的指标从 0.83 掉到了 0.61查了两天才发现训练数据里大量不好看不满意无趣全被过滤成了正面词。问题根本不是模型而是停用词表把情感信号的根给挖了。从那以后我每次搭 NLP 项目都会强制走一遍停用词表专项检查先定任务类型再选基表最后写领域扩展表任何删减都要在备份文件里留下注释说明为什么删、什么条件下可以恢复。停用词表是一把很好用的筛子但它筛掉的是噪音不是信号——这个边界想清楚你用它的时候就会少很多玄学翻车。希望帮到你。本文还有配套的精品资源点击获取