【问题标题】:Delphi - create Title/Proper/Mixed Case for StringsDelphi - 为字符串创建标题/正确/混合大小写
【发布时间】:2020-03-29 14:01:57
【问题描述】:

我有一个需要处理的大约 100,000 个名称的列表。有些是企业名称,有些是人名。不幸的是,有些较低,有些较高,有些混合。我正在寻找将它们转换为适当大小写的例程。 (有时称为混合或标题案例)。我意识到我可以遍历字符串并将每个开始新单词的字符大写。那将是一种非常简单的方法。对于企业来说,短词应该是小写的(of、with、for、...)。对于姓氏,如果以 Mc 开头,则第 3 个字母应大写(McDermot、McDonald 等)。罗马数字应始终大写(John Smith II)等。

我无法找到任何 Delphi 内置或其他例程。这肯定是存在的。我在哪里可以找到这个?

谢谢

【问题讨论】:

  • 如果没有大量的库,我无法想象一个有意义的解决方案,所以这会变得过于宽泛或搜索离线资源。
  • Stackoverflow 不是工具推荐网站。显而易见的解决方案是自己实现这个功能。它不应该那么困难。到目前为止,您尝试过什么?
  • @Andy_D - “Delphi 有功能吗”是一个有效的问题。对于所有边缘情况,这不是一个小问题,否则我已经自己写了。
  • 这个练习可能比最初看起来要复杂得多,因为没有关于专有名称的硬性规定。通常,针对一组规则(您需要自己设计)进行自动处理会留下 10% 以上的残留物,这些残留物要么是错误的,要么需要手动按摩。许多因素需要“政策”决策:例如SomeCo Inc 与 SomeCo Incorporated 是同一实体,这可能取决于您的目的。而且,对于像“E.I. du Pont de Nemours and Company”这样的名称适用什么规则?我们在数据中发现了 20 多个有效变体。
  • 顺便说一句,免费软件 Systools 库 (sourceforge.net/projects/tpsystools/?source=directory) 包含几个函数,ExtractWord 和 WordCount,它们对于使用任意分隔符截取名称字符串并将它们重新组合成标准化格式非常方便。

标签: delphi text case-sensitive


【解决方案1】:

正如其他人已经说过的那样,由于有如此多的特殊变化,为此制定一个完全自动化的例程几乎是不可能的。因此,完全忽略人机交互几乎是不可能的。

现在您可以做的是让人类更容易解决这个问题。如何?用小写字母制作所有名称变体的字典并呈现给他。
在显示名称之前,您可以确保任何名称中的第一个字母已经大写。

一旦在字典中进行了所有名称更正,您就可以自动替换原始数据库中的所有名称。

【讨论】:

  • 另一个变体是假设如果单词/短语已经混合大小写,那么它可能是正确的。也许做一些边际检查......
  • 我猜你可以这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2010-09-18
相关资源
最近更新 更多