首页/新闻资讯/正文详情

Humanizer 的 EnglishArticles 枚举与冠词感知排序:从 A/An/The 到忽略冠词的字典排序

发布时间:2026/9/25 5:23:04 来源:云帆数科 栏目:资讯中心
Humanizer 的 EnglishArticles 枚举与冠词感知排序:从 A/An/The 到忽略冠词的字典排序
开发工具【免费下载链接】HumanizerHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities项目地址https://gitcode.com/gh_mirrors/hu/Humanizer点击查看免费下载本指南聚焦 Humanizer 2.11.10 版本 API 参考中的EnglishArticles枚举讲解其三个字段A、An、The的语义与取值并深入剖析 Humanizer 围绕英语冠词提供的忽略冠词排序能力EnglishArticle.AppendArticlePrefix与PrependArticleSuffix的底层实现、边界行为与测试佐证同时说明该枚举在 Humanizer 3 中的演进去向。读完本文你将掌握如何在 .NET 应用中处理 The Great Gatsby 这类以冠词开头的标题使其按 Great Gatsby, The 的正确字典序排序。EnglishArticles 枚举文档中的定义在 Humanizer 2.11.10 的 API 参考页 Humanizer.EnglishArticles.md 中EnglishArticles被定义为一个枚举其文档说明为 Definite and Indefinite English Articles英语定冠词与不定冠词完整定义如下public enum EnglishArticles该枚举共包含三个字段字段名数值语义A0不定冠词 Aan 的变体用于辅音音素前An1不定冠词 An用于元音音素前The2定冠词 The从枚举取值可以看出三个字段的数值顺序0、1、2恰好对应冠词在排序场景中需要被忽略的优先级次序The的取值最大。这个枚举本质上是 Humanizer 处理英语标题/名词短语冠词问题的类型化抽象在按字母排序书名、专辑名或条目名称时冠词不应参与排序比较而应被移动到短语末尾如 The Theater 应排序为 Theater, The。冠词在 Humanizer 中的实际用途忽略冠词排序EnglishArticles枚举本身是类型标识而真正承载冠词处理逻辑的是 Humanizer 命名空间下的静态类EnglishArticle注意单数形式实现位于 ArticlePrefixSort.cs。其文档注释明确说明其职责Contains methods for removing, appending and prepending article prefixes for sorting strings ignoring the article提供移除、追加、前置冠词前缀的方法用于忽略冠词对字符串排序。该类对外暴露两个方法AppendArticlePrefix(string[] items)签名public static string[] AppendArticlePrefix(string[] items)参数items—— 待排序的输入字符串数组返回已排序的字符串数组行为将每个元素开头的冠词移除并追加到字符串末尾然后对整个数组执行Array.Sort例如输入[Ant, The Theater, The apple, Fox, Bear]冠词被剥离并后置后得到[Ant, apple The, Bear, Fox, Theater The]排序结果即为[Ant, The apple, Bear, Fox, The Theater]对应测试用例见 ArticlePrefixSortTests.cs 的第一个InlineData。注意排序后冠词仍保留在元素中只是被移到末尾参与字符串比较时不再影响首字母。PrependArticleSuffix(string[] appended)签名public static string[] PrependArticleSuffix(string[] appended)参数appended—— 由AppendArticlePrefix处理后的已排序数组返回恢复冠词前置形态的字符串数组行为识别字符串末尾形如 the、 an、 a的后缀含前置空格将其移回字符串开头恢复原始显示标题两个方法必须成对使用先AppendArticlePrefix排序再把结果交给PrependArticleSuffix还原即可得到冠词忽略排序后的原始标题列表。Humanizer 2.11.10 的实战场景文档 specialized-formatting-utilities.mdx 也明确指出这是刻意仅支持英语deliberately English-only的高级辅助功能且传入空数组会抛出异常。源码级原理冠词是如何被识别与移动的EnglishArticle的实现体现了 Humanizer 对性能和正确性的兼顾值得拆解三个关键点1. 前缀识别大小写全覆盖的六种形态内部方法TryGetArticlePrefixLength(ReadOnlySpanchar item, out int articleLength)依次检查六种冠词形态The长度 3与the长度 3a长度 1与A长度 1An长度 2与an长度 2识别函数IsArticle使用ReadOnlySpanchar进行零分配比较并附带三重约束条件见 ArticlePrefixSort.cs字符串长度必须大于冠词长度 1确保冠词后还有可排序的内容前缀与冠词精确相等SequenceEqual冠词后紧跟一个空格且空格后的下一个字符是单词字符IsRegexWordCharacter。第 3 条约束模拟了正则\w的语义用于防止误伤 Theory以 The 开头但无空格分隔或 An!冠词后无有效单词字符这类字符串。测试文件 ArticlePrefixSortTests.cs 中的AppendArticlePrefixPreservesRegexEquivalentEdges理论用例专门验证了这些边界The Éclair→Éclair The支持带重音的拉丁字母An Æon→Æon AnThe _underscore→_underscore The支持下划线连接符The 7th Seal→7th Seal The支持数字开头The Ⅻ Monkeys→The Ⅻ Monkeys罗马数字 Ⅻ 不是\w字符冠词不被移动The \u200Cjoiner/The \u200Djoiner→ 冠词被移动零宽连接符/零宽非连接符被视为单词字符A Theater→A Theater冠词后有两个空格不符合冠词 单空格 单词字符模式不移动IsRegexWordCharacter通过CharUnicodeInfo.GetUnicodeCategory判断字符类别覆盖大写字母、小写字母、标题字母、修饰字母、其他字母、十进制数字、连接符标点、非间距标记等 Unicode 类别ArticlePrefixSort.cs因此对非 ASCII 文本同样能保持与正则\w等价的行为。2. 变换逻辑Span 切片 零分配拼接在AppendArticlePrefix中识别出冠词长度后var removed item[articleLength..].TrimStart(); var article item[..articleLength]; transformed[i] ${removed} {article};即截取冠词之后的剩余部分并去除前导空白再与冠词拼接成剩余部分 冠词的形态The Theater → Theater The未匹配冠词的元素则仅做Trim()。整个数组随后通过Array.Sort排序。3. 后缀还原倒序匹配三种尾缀PrependArticleSuffix从字符串末尾向前匹配分别检查以空格开头的尾缀 the4 个字符、 an3 个字符、 a2 个字符冠词比较使用StringComparison.OrdinalIgnoreCase不区分大小写。还原时调用RearrangeArticle在 .NET 6 目标框架下使用string.Create配合Span一次性写出结果避免中间字符串分配否则回退到字符串插值实现ArticlePrefixSort.cs。从代码结构看这是 Humanizer 对高频排序场景做的分配优化。行为边界与使用注意事项结合源码与测试使用EnglishArticle时需要注意以下边界空数组直接抛异常AppendArticlePrefix对空数组抛出ArgumentOutOfRangeException对应测试 ArticlePrefixSortTests.cs 中的An_Empty_String_Array_Throws_ArgumentOutOfRangeException。调用前请先判空。冠词仅支持英文方法只识别The/The、A/a、An/an六种形态且必须满足冠词 单个空格 单词字符的严格模式像A Theater双空格、The\tTheaterTab 分隔这类输入不会被处理。原值在排序后被改写AppendArticlePrefix返回的是冠词后置的变换形态如果后续逻辑需要原始标题请自行保留原数组或依赖PrependArticleSuffix的还原结果。成对使用才完整单独调用AppendArticlePrefix得到的是排序后的冠词后置形态只有在展示给用户前调用PrependArticleSuffix才能恢复 The Theater 这种带前置冠词的原始标题。非通用解析器如 specialized-formatting-utilities.mdx 所述这类 API 并非通用解析器冠词排序只识别其精确的英文模式不处理其他语言的冠词变体。性能基准佐证仓库的基准工程为冠词排序提供了可复现的基准入口EnglishArticleBenchmarks.cs 使用[MemoryDiagnoser(false)]分别对两个方法进行基准测试[Benchmark] public string[] AppendArticlePrefix() EnglishArticle.AppendArticlePrefix([Ant, The Theater, The apple, Fox, Bear]); [Benchmark] public string[] PrependArticleSuffix() EnglishArticle.PrependArticleSuffix([Ant, apple The, Bear, Fox, Theater The]);基准输入与测试用例一致说明该方法的目标是处理中小规模的标题数组如需验证当前环境下的性能可在src/Benchmarks工程中运行相应的基准场景。基准配置与运行方式可参考 Benchmarks README。版本演进从 EnglishArticles 枚举到 EnglishArticle 类需要特别说明版本差异本文依据的 Humanizer.EnglishArticles.md 属于 Humanizer 2.x 文档线EnglishArticles枚举是 2.x 时代的 API而当前仓库主线的 API 参考 Humanizer.EnglishArticle.md 只保留静态类EnglishArticle不再包含该枚举。Humanizer 3 的迁移指南 version-3-migration.mdx 的Replace removed APIs表格中明确列出2.x 使用Humanizer 3 处理方式EnglishArticles替换应用内依赖该枚举的逻辑Replace the enum-dependent logic in the application也就是说EnglishArticles枚举在 Humanizer 3 中被移除不再提供若你的代码在 2.x 中使用了该枚举例如据此判断冠词类型、驱动自定义排序升级到 Humanizer 3 时需要改用EnglishArticle.AppendArticlePrefix/PrependArticleSuffix的字符串数组处理方式或自行实现等价的枚举逻辑。3.x 版本的 API 文档如 Humanizer.EnglishArticle.md同样只保留静态类版本。小结EnglishArticles枚举以A 0、An 1、The 2三个字段抽象了英语的定冠词与不定冠词是 Humanizer 冠词感知排序能力的类型化入口。围绕它EnglishArticle类提供了完整的忽略冠词排序方案AppendArticlePrefix将前置冠词移到末尾并排序PrependArticleSuffix还原冠词二者成对使用即可得到符合图书馆式字典序的标题列表。其实现基于ReadOnlySpan零分配切片与 Unicode 字符类别判断兼顾性能与正则\w等价语义测试用例 ArticlePrefixSortTests.cs 覆盖了大小写、重音字符、数字、下划线、零宽连接符等丰富边界。若你的项目从 Humanizer 2 升级到 3请注意该枚举已被移除应迁移到 ArticlePrefixSort.cs 提供的静态方法。赞分享开发工具【免费下载链接】HumanizerHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities项目地址https://gitcode.com/gh_mirrors/hu/Humanizer点击查看免费下载相关推荐Coze Studio 自动保存框架 coze-studio/autosave 源码剖析与实战指南Coze Studio 自动保存框架 coze studio/autosave 源码剖析与实战指南 coze studio/autosave 是 Coze开发工具Humanizer 冠词处理演进从 EnglishArticles 枚举到 EnglishArticle 前缀排序的完整解析Humanizer 冠词处理演进从 EnglishArticles 枚举到 EnglishArticle 前缀排序的完整解析 本文以 Humanizer 2.开发工具Humanizer 的英文冠词感知排序EnglishArticle 类 API 详解与源码剖析Humanizer 的英文冠词感知排序EnglishArticle 类 API 详解与源码剖析 在需要按自然阅读习惯对字符串数组排序时如目录、书目、电影列表开发工具上一篇react-pdf-highlighter 项目常见问题解决方案下一篇React-Text-Loop 项目常见问题解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

永久在线CRM实战:从选型到落地,让客户数据真正成为企业资产
永久在线CRM实战:从选型到落地,让客户数据真正成为企业资产

1. 先聊清楚:为什么你需要一款“永久在线”的CRM做了这么多年客户管理相关的事,我最常被问到的一句话不是“哪个CRM功能最强”,而是“到底什么样的CRM才能真正用起来、用得住”。很多团队一开始兴致勃勃地采购了一套客户管理系统,… · 2026/9/25 5:23:04

VoltAgent Experiments 实战指南:用 @voltagent/evals 定义、运行与判定 Agent 评测实验
VoltAgent Experiments 实战指南:用 @voltagent/evals 定义、运行与判定 Agent 评测实验

人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆 【免费下载链接】voltagent AI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework 项目地址: https://gitcode.com/gh_mirrors/vo/voltagent 点击查看 免费下载 Ex… · 2026/9/25 5:23:04

用microPython玩转源师兄L1:LED、OLED与RGB灯5个入门项目代码全解
用microPython玩转源师兄L1:LED、OLED与RGB灯5个入门项目代码全解

用microPython玩转源师兄L1:LED、OLED与RGB灯5个入门项目代码全解 【免费下载链接】源师兄L1 基于海思ws63芯片平台的源师兄开源项目硬件资料,包括硬件原理图和PCB layout文档。 项目地址: https://gitcode.com/yuanshixiong/ysx-v1 源师兄L1是基… · 2026/9/25 5:22:58

41个搜索引擎免费登录入口清单:新站收录提速实操指南
41个搜索引擎免费登录入口清单:新站收录提速实操指南

做站这些年,我见过太多人把“搜索引擎登录入口”当成上古时代的产物,觉得网站只要上线,搜索引擎就会自动来抓。其实直到今天,一个全新上线的网站,如果完全不做主动提交,光靠自然抓取,快的一两天… · 2026/9/25 5:55:51

Atlas 300V 24G推理加速卡部署YOLO全流程实操指南
Atlas 300V 24G推理加速卡部署YOLO全流程实操指南

Atlas这个名字最近在AI推理圈里出现的频率越来越高,后台也一直有人问:Atlas 300V 24G到底是不是运算加速卡?能不能拿来部署YOLO?实测效果怎么样?这篇文章我就结合自己实际折腾过的经验,把Atlas 300V 24G这张… · 2026/9/25 5:55:51

廖昌永与岳父母:穷小子逆袭后仍懂感恩,婚姻经营的现实参照
廖昌永与岳父母:穷小子逆袭后仍懂感恩,婚姻经营的现实参照

"丈母娘看女婿,越看越欢喜"这句话放在今天,多少有点理想主义。网上随便一刷,全是为彩礼闹掰的、为婚房署名斗智斗勇的、因为男方原生家庭条件直接被判出局的。所以当"廖昌永:岳父母当年不嫌我穷小子,如… · 2026/9/25 5:55:45

Atlas 300V部署YOLO全攻略:从模型转换到推理加速实战
Atlas 300V部署YOLO全攻略:从模型转换到推理加速实战

提到“atlas”,圈内人第一个想到的往往不是希腊神话里的擎天神,也不是地图册,而是华为昇腾(Ascend)平台上的那套AI计算产品线。如果你正在做边缘视频分析、目标检测或者办公楼宇的智慧化改造,大概率已经听说… · 2026/9/25 5:55:45

RT-Thread RA-Eco-RA4E2-64PIN 开发板 BSP 实战:从硬件资源到 MDK5 编译烧录与源码剖析
RT-Thread RA-Eco-RA4E2-64PIN 开发板 BSP 实战:从硬件资源到 MDK5 编译烧录与源码剖析

操作系统嵌入式物联网嵌入式OSRTOS 【免费下载链接】rt-thread RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/ 项目地址: https://gitcode.com/gh_mirrors/rt/rt-thread 点击查看 免费下载 本文基于… · 2026/9/25 5:55:39

OpenChamber 1.8.3 深度解析:重构上下文面板与嵌入会话聊天、用户消息渲染控制与模型选择器体验升级
OpenChamber 1.8.3 深度解析:重构上下文面板与嵌入会话聊天、用户消息渲染控制与模型选择器体验升级

AI Agent人工智能代码智能体交互助手 【免费下载链接】openchamber Agentic Development Environment based on OpenCode AI agent 项目地址: https://gitcode.com/gh_mirrors/op/openchamber 点击查看 免费下载 OpenChamber 1.8.3(发布日期 2026-03-02… · 2026/9/25 5:55:39

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

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

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

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

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码