尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

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

发布时间:2026/9/25 5:22:59

资讯中心
01
ARTICLE

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

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),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。