史上最全中英文停用词表:NLP文本清洗与关键词提取必备资源
简介这份中英文停用词资源面向从事文本分析、自然语言处理与信息检索的开发者及学习者用于解决分词后噪声词干扰关键词提取、情感分析与文本分类的问题。包内共11个文件以9个txt停用词表和2个py脚本为主压缩包约45KB体积轻便却覆盖中文助词、介词、连词及英文冠词、介词等常见停用词并附合并、去重等处理脚本便于按语言或场景灵活取用。目前已有1220人学习下载说明其在文本预处理环节具有较高参考价值。读者可借助这些词表配合jieba、nltk等工具快速完成中英文分词后的停用词过滤也能参考脚本思路定制专属词库减少重复整理成本提升后续主题挖掘与关键词抽取的准确度适合作为文本预处理阶段的基础资料长期留存。1. 做文本清洗的都知道停用词表选错后面全白搭上周帮一个做舆情分析的朋友排查问题他抱怨关键词提取结果里全是“的、了、是、在、我们、他们”真正有价值的实体词反而被淹没。我让他把预处理脚本发过来一看好家伙用的是一份只有 30 来个词的中文停用词表英文部分干脆没处理。这不是个例很多做 NLP 入门项目、文本分类、词云生成的同学往往在分词之后随手挂一个网上复制的小表结果模型效果怎么调都上不去最后怀疑是算法不行——其实问题出在停用词过滤这一步。这份“史上最全中英文停用词”资源就是冲着这个痛点来的。它把中文和英文的停用词做了系统化整理覆盖了常见虚词、代词、介词、连词、语气助词以及英文里的冠词、助动词、高频无意义副词等。适合谁用做文本挖掘、情感分析、关键词抽取、搜索引擎预处理、RAG 检索增强的从业者以及正在写毕业论文、需要做文本清洗实验的学生。你不需要自己从零去爬、去合并、去去重这份表拿过来就能直接挂到分词流程后面。但“最全”不等于“无脑用”。停用词表不是越长越好不同任务对停用词的容忍度完全不同。比如做情感分析时“不”和“没”这类否定词如果被过滤掉情感极性直接反转做关键词提取时“我们”这种词在某些语境下反而是核心实体。所以这篇文章不会只告诉你“下载就完事了”而是把选型逻辑、加载方式、参数调优、踩坑记录都拆开讲让你拿到表之后知道怎么改、怎么验证、怎么避坑。2. 停用词表的构成与选型中英文到底该收哪些词2.1 中文停用词的核心类别与边界中文停用词没有像英文那样有公认的标准列表不同来源的表差异很大。这份资源里的中文部分我拆开看了下主要覆盖以下几类结构助词的、地、得、之、所动态助词了、着、过语气词啊、吧、呢、吗、嘛、呀代词我、你、他、她、它、我们、你们、他们、这、那、这些、那些介词在、从、对、把、被、向、往、于连词和、与、及、或、但、而、因为、所以、如果数量词一些、一个、一种、每个、各种高频副词很、非常、十分、已经、正在、将要但这里有个关键边界“不、没、无、非”这类否定词在通用停用词表里通常不收。原因很简单它们承载语义极性一旦过滤情感分析、观点挖掘直接翻车。这份资源的中文表里我特意检查了没有把否定词收进去这一点做得比较克制。另一个边界是领域词。比如做医疗文本“患者”算不算停用词做电商评论“商品”算不算通用表不会收这些因为它们在通用语料里是实词。但如果你做的是垂直领域需要自己往表里追加领域停用词。我一般会先跑一遍词频统计把 Top 200 里明显无区分度的词手动加进去。2.2 英文停用词的分层逻辑英文停用词相对成熟经典的有 Fox 的通用表、NLTK 内置表、spaCy 默认表、scikit-learn 的 ENGLISH_STOP_WORDS。这份资源里的英文部分我对比了一下基本是 NLTK 表 spaCy 表的并集再补充了一些网络文本里常见的高频无意义词比如 “ok”、“yeah”、“lol” 这类口语词。英文停用词可以按强度分三层层级典型词适用场景强停用词the, a, an, is, are, was, were几乎所有 NLP 任务中停用词will, would, can, could, should信息检索、关键词提取弱停用词not, no, nor, never情感分析、否定检测慎用这份资源把强停用词和中停用词合并成了一个主表弱停用词单独标注了“否定词表”用的时候可以按需加载。这个设计比那种一锅端的表要合理得多。2.3 选型理由为什么不用 NLTK 默认表就完事很多人会问NLTK 不是自带停用词吗为什么还要单独搞一份我实际用下来的感受是NLTK 的英文表只有 179 个词中文表更是只有几十个而且更新缓慢。做社交媒体文本、短文本分类时NLTK 表明显不够用像 “im”、“ur”、“dont” 这种非规范拼写根本不在表里。这份资源的中英文表加起来覆盖了 1200 词条并且对网络文本做了补充这是它比标准库更实用的地方。但也不是说表越大越好。我见过有人把一份 3000 词的中文停用词表直接挂上去结果把“发展”、“经济”、“社会”这些在新闻语料里高频但有实际意义的词也过滤了最后关键词提取出来全是残渣。所以选型的核心原则是先看任务再看语料最后定表。通用表拿来当基线然后根据你的语料词频分布做增删。3. 加载与集成把停用词表挂进 Python 分词流程3.1 文件格式与读取方式这份资源提供的是纯文本格式一行一个词UTF-8 编码。中文表和英文表分开存放文件名分别是stopwords_zh.txt和stopwords_en.txt。读取方式很简单def load_stopwords(filepath): 读取停用词文件返回 set 集合。 参数 filepath: 停用词文件路径UTF-8 编码一行一个词。 返回: set去重后的停用词集合查询复杂度 O(1)。 with open(filepath, r, encodingutf-8) as f: # strip() 去掉行尾换行符和首尾空格 # 跳过空行和以 # 开头的注释行 words {line.strip() for line in f if line.strip() and not line.startswith(#)} return words zh_stopwords load_stopwords(stopwords_zh.txt) en_stopwords load_stopwords(stopwords_en.txt) print(f中文停用词数量: {len(zh_stopwords)}) print(f英文停用词数量: {len(en_stopwords)})用set而不是list的原因很直接过滤时每个词都要做一次成员判断set的查询是 O(1)list是 O(n)。当你的文本量到百万级时这个差异会被放大到不可忽略。另外注意跳过注释行这份表里有些词条带了分类标注用#开头读取时要排除。3.2 与 jieba 分词集成中文场景下最常用的分词工具是 jieba集成方式如下import jieba def cut_and_filter(text, stopwords): 对中文文本分词并过滤停用词。 参数 text: 原始中文文本字符串。 参数 stopwords: 停用词 set。 返回: 过滤后的词列表。 # jieba.lcut 返回列表精确模式 words jieba.lcut(text) # 过滤条件不在停用词表中且长度大于 1过滤单字噪声 # 注意长度大于 1 这个条件要按任务调整有些任务需要保留单字 filtered [w for w in words if w not in stopwords and len(w.strip()) 1] return filtered text 我们在进行文本分析的时候需要把一些没有意义的词过滤掉这样才能提高关键词提取的准确率。 result cut_and_filter(text, zh_stopwords) print(result) # 输出示例: [进行, 文本分析, 时候, 需要, 没有意义, 过滤, 这样, 提高, 关键词, 提取, 准确率]这里有个参数需要特别注意len(w.strip()) 1这个条件。很多教程会直接过滤掉所有单字但中文里单字不一定无意义比如“爱”、“恨”、“美”在情感分析里是核心词。我一般会先不加这个条件跑一遍看单字里有没有有价值的词再决定是否过滤。另外jieba.lcut是精确模式如果你做搜索引擎分词可以换成jieba.lcut_for_search粒度更细。3.3 与 NLTK 集成处理英文英文场景下NLTK 的word_tokenize配合停用词过滤是标准做法import nltk from nltk.tokenize import word_tokenize # 首次使用需要下载 punkt 分词模型 # nltk.download(punkt) def process_english(text, stopwords): 英文文本分词、小写化、过滤停用词。 参数 text: 原始英文文本。 参数 stopwords: 英文停用词 set。 返回: 过滤后的词列表。 # 统一转小写避免 The 和 the 被当成两个词 tokens word_tokenize(text.lower()) # 过滤停用词和非字母字符标点、数字 filtered [w for w in tokens if w not in stopwords and w.isalpha()] return filtered text The quick brown fox jumps over the lazy dog, but it doesnt care about the result. result process_english(text, en_stopwords) print(result) # 输出示例: [quick, brown, fox, jumps, lazy, dog, care, result]w.isalpha()用来过滤标点和数字但如果你做的是商品评论分析数字可能代表评分或型号这时候就要去掉这个条件。lower()是必须的英文停用词表里都是小写形式不转小写会导致 “The” 漏过滤。另外注意doesnt这种缩写NLTK 会切成does和ntdoes在停用词表里nt不在所以过滤后可能残留nt需要额外处理。3.4 自定义停用词追加与动态调整通用表不可能覆盖所有场景我一般会维护一个custom_stopwords.txt在加载时做并集def load_with_custom(base_path, custom_path): 加载基础停用词表并合并自定义停用词。 参数 base_path: 基础停用词文件路径。 参数 custom_path: 自定义停用词文件路径可为 None。 返回: 合并后的停用词 set。 stopwords load_stopwords(base_path) if custom_path: custom load_stopwords(custom_path) stopwords stopwords | custom # 集合并集 return stopwords # 示例在舆情分析场景中追加领域停用词 # custom_stopwords.txt 内容示例 # 转发 # 点赞 # 回复 # 楼主自定义表的维护策略是每次跑完关键词提取人工扫一眼 Top 50 结果把明显无意义的词追加进去。迭代两三轮之后你的停用词表就会非常贴合你的语料。这个过程听起来笨但比任何自动方法都可靠。4. 避坑与排查停用词过滤翻车的五个典型场景4.1 否定词被误过滤情感极性反转现象做情感分析时模型把“我不喜欢这个产品”判成了正面情感。原因停用词表里包含了“不”和“喜欢”中的某个词或者分词后“不”被单独切出来并被过滤导致“喜欢”单独出现极性反转。解决检查停用词表里是否包含否定词。这份资源的中文表没有收否定词但如果你自己追加了要立刻移除。另外在分词阶段可以把“不”、“没”、“无”加入 jieba 的用户词典让它们和后面的词合并成“不喜欢”、“没效果”这样的整体避免被拆开过滤。4.2 英文缩写和网络用语漏过滤现象处理社交媒体文本时结果里全是 “im”、“ur”、“dont”、“cant”。原因标准停用词表只收规范拼写不覆盖非规范拼写和网络缩写。解决在自定义停用词表里追加常见网络缩写。我一般会加这么一批im, ur, dont, cant, wont, didnt, doesnt, isnt, arent, wasnt, werent, hes, shes, theyre, youre, ive, youre, lets, thats, whats。另外可以在分词前做一次规范化替换把 “cant” 统一成 “cant” 再过滤。4.3 中文分词粒度导致停用词漏网现象停用词表里有“我们”但过滤后结果里还是出现“我们”。原因jieba 把“我们”切成了“我”和“们”而停用词表里只有“我们”没有“我”和“们”导致漏过滤。解决在停用词表里同时收录“我”、“你”、“他”、“她”、“它”、“们”以及它们的组合形式。或者用 jieba 的add_word把“我们”强制合并成一个词。我一般两种方法都用双保险。4.4 大小写和全半角不一致现象英文停用词表里有 “the”但文本里的 “The” 没被过滤中文停用词表里有“的”但全角空格包围的“的”没被过滤。原因没有做大小写归一化和全半角归一化。解决英文处理前统一lower()。中文处理前用unicodedata.normalize(NFKC, text)做全半角归一化把全角字母、数字、空格转成半角。这个步骤在爬虫抓下来的网页文本里尤其重要因为 HTML 里经常混着全角字符。4.5 停用词表过大导致有效信息丢失现象关键词提取结果里全是生僻词高频实词全不见了。原因停用词表里混入了领域实词比如“发展”、“经济”、“市场”在新闻语料里被当成停用词过滤了。解决用词频统计做一次审计。把过滤前后的 Top 100 词都打印出来对比一下看看有没有明显不该过滤的词。我一般会跑一个脚本统计每个停用词在语料中的出现频次如果某个词频次很高但你觉得它有意义就把它从停用词表里移除。停用词表的维护是一个持续迭代的过程没有一劳永逸的版本。5. 进阶技巧用词频-逆文档频率验证停用词表质量停用词表到底合不合适不能靠感觉判断得有一个量化指标。我常用的方法是用 TF-IDF 跑一遍关键词提取看 Top 20 结果里还有没有明显的停用词残留以及有没有把重要实体词误杀。具体操作分三步。第一步准备一个至少 100 篇文档的语料集每篇文档做分词和停用词过滤。第二步用 scikit-learn 的TfidfVectorizer计算 TF-IDF 矩阵注意stop_words参数直接传你的停用词列表。第三步对每篇文档取 TF-IDF 值最高的 10 个词人工检查。from sklearn.feature_extraction.text import TfidfVectorizer # 假设 corpus 是已经分好词并用空格拼接的文档列表 # 例如: [文本 分析 关键词 提取, 情感 分析 模型 训练, ...] corpus [ 文本 分析 关键词 提取 准确率, 情感 分析 模型 训练 数据, 关键词 提取 停用词 过滤 效果, 模型 训练 数据 清洗 预处理, ] # 注意这里 stop_words 传英文用 english传中文需要传列表 # 如果你的停用词表是中文的先转成列表 vectorizer TfidfVectorizer( stop_wordslist(zh_stopwords), # 传入停用词列表 max_features1000, # 限制特征数量防止矩阵过大 ngram_range(1, 2), # 考虑一元和二元词组 min_df1, # 至少出现在 1 篇文档中 max_df0.95 # 忽略出现在 95% 以上文档中的词 ) tfidf_matrix vectorizer.fit_transform(corpus) feature_names vectorizer.get_feature_names_out() # 打印每篇文档的 Top 5 关键词 for i, doc in enumerate(corpus): scores tfidf_matrix[i].toarray().flatten() top_indices scores.argsort()[-5:][::-1] top_words [(feature_names[j], round(scores[j], 3)) for j in top_indices if scores[j] 0] print(f文档 {i1}: {top_words})参数说明max_df0.95这个参数很关键它会自动忽略出现在 95% 以上文档中的词相当于一个动态停用词过滤器。如果你的停用词表漏掉了某个高频词max_df可以兜底。ngram_range(1, 2)会把二元词组也纳入统计有时候“文本分析”作为一个整体比“文本”和“分析”分开更有意义。min_df1在文档量少的时候用文档量大的时候可以调到 2 或 3过滤掉只出现一次的低频噪声。跑完这个流程后重点看两个指标一是 Top 关键词里还有没有“的”、“了”、“我们”这种词如果有说明停用词表有漏网之鱼二是看有没有“发展”、“经济”这种词被误杀如果有说明停用词表收得太宽。根据结果做一轮增删再跑一遍通常两三轮就能把表调到比较贴合语料的状态。从那以后我每次拿到新的语料集都会先跑一遍 TF-IDF 审计把停用词表过一遍再进入正式任务。这个习惯帮我省下了大量调模型的时间——很多时候模型效果不好根因就在预处理这一步。希望这份停用词表和这套验证方法能帮到你。本文还有配套的精品资源点击获取

相关新闻

一句VBA代码为Excel区域添加全部框线(非仅外框)

一句VBA代码为Excel区域添加全部框线(非仅外框)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:21:57 阅读更多 →
跨境独立站服务器怎么选?从节点到配置的完整清单(2026 实操版)

跨境独立站服务器怎么选?从节点到配置的完整清单(2026 实操版)

做跨境独立站,服务器选错比选贵更麻烦——访客打不开、店铺卡顿,直接影响转化。本文不推荐具体商家,只讲一套可落地的选型清单,照着核就行。 一、先定节点:访客在哪,服务器就在哪 跨境业务选服务器&#xf…

2026/10/15 1:21:57 阅读更多 →
Apollo-11车规级实时中间件:TSN+AUTOSAR Adaptive混合架构解析

Apollo-11车规级实时中间件:TSN+AUTOSAR Adaptive混合架构解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:21:57 阅读更多 →

最新新闻

从零开始做SRC白帽:挖漏洞拿赏金,这些法律红线千万不要踩

从零开始做SRC白帽:挖漏洞拿赏金,这些法律红线千万不要踩

从零开始做SRC白帽:挖漏洞拿赏金,这些法律红线千万不要踩 很多新手入坑网络安全,初衷都很简单:想学一门硬核技术、靠挖漏洞赚赏金、做合法合规的白帽黑客。 我从纯零基础入门白帽,从零了解SRC规则、练习漏洞挖掘、提交…

2026/10/15 2:14:17 阅读更多 →
5 步配好流放之路 Build:Path of Building 天赋树、伤害计算与装备词缀避坑指南

5 步配好流放之路 Build:Path of Building 天赋树、伤害计算与装备词缀避坑指南

5 步配好流放之路 Build:Path of Building 天赋树、伤害计算与装备词缀避坑指南 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 站在天赋树前点下一颗节点&am…

2026/10/15 2:14:17 阅读更多 →
Aviator自定义ADD函数实战:空值处理与线程安全

Aviator自定义ADD函数实战:空值处理与线程安全

1. 从内置函数不够用说起:为什么需要自定义ADDAviator 这个轻量级表达式引擎在规则计算、动态配置、指标加工这些场景里出镜率很高,尤其是需要把业务逻辑从代码里抽出来交给运营或配置人员维护的时候,它比引入一整套脚本引擎要轻得多。但真正…

2026/10/15 2:14:17 阅读更多 →
Superpowers开源游戏工坊:从安装到多人协作的完整指南

Superpowers开源游戏工坊:从安装到多人协作的完整指南

朋友看我电脑屏幕上开着好几个浏览器标签页,以为我又在摸鱼刷网页,其实我正在一个叫 Superpowers 的开源游戏开发环境里搭场景。Superpowers 这个名字起得很直白:给你“超能力”——不需要装 Unity 那样动辄几十 GB 的引擎,只要有…

2026/10/15 2:14:17 阅读更多 →
国内先进封装品牌推荐的倒装芯片封装在移动设备中的应用

国内先进封装品牌推荐的倒装芯片封装在移动设备中的应用

移动设备对芯片封装的要求,集中在更薄、更小、散热更好、信号更快四个方面。倒装芯片封装在移动设备中的应用,正是围绕这四个诉求展开的主流路径。从行业调研来看,智能手机、平板电脑、可穿戴设备中,采用倒装芯片封装的比例持续上…

2026/10/15 2:14:17 阅读更多 →
双 11 会场性能全链路压测与故障注入复盘:弱网丢包下 100% 消除白屏实录

双 11 会场性能全链路压测与故障注入复盘:弱网丢包下 100% 消除白屏实录

双 11 的战场不仅是后端数据库与并发网关的狂欢,更是前端工程抗压韧性的终极大考。每年大促零点,数千万消费者涌入主会场,他们可能正处于晚高峰拥挤的地铁车厢、偏远的农村基站,或是家庭 Wi-Fi 信号衰减严重的卫生间角落。一旦前端…

2026/10/15 2:13:17 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →