gpt4 book ai didi

c# - 如何改进这种将名称转换为正确大小写的方法?

转载 作者:可可西里 更新时间:2023-11-01 03:00:53 25 4
gpt4 key购买 nike

我正在编写一个基本函数,用于在一次性批处理过程中将数百万个名称从当前的大写形式转换为适当的混合大小写形式。我想出了以下功能:

public string ConvertToProperNameCase(string input)
{
char[] chars = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input.ToLower()).ToCharArray();

for (int i = 0; i + 1 < chars.Length; i++)
{
if ((chars[i].Equals('\'')) ||
(chars[i].Equals('-')))
{
chars[i + 1] = Char.ToUpper(chars[i + 1]);
}
}
return new string(chars);
}

它适用于大多数情况,例如:

  1. 约翰·史密斯 → 约翰·史密斯
  2. 史密斯、约翰 T → 史密斯、约翰 T
  3. 约翰·奥布莱恩 → 约翰·奥布莱恩
  4. 约翰·多·史密斯 → 约翰·多·史密斯

有一些边缘情况不起作用:

  1. JASON MCDONALD → Jason Mcdonald(正确:Jason McDonald)
  2. OSCAR DE LA HOYA → Oscar De La Hoya(正确:Oscar de la Hoya)
  3. MARIE DIFRANCO → Marie Difranco(正确:Marie DiFranco)

这些都没有被捕获,我不确定我是否可以处理所有这些奇怪的边缘情况。我如何更改或添加以捕获更多边缘情况?我敢肯定还有很多我什至没有想到的边缘案例。所有大小写也应遵循北美惯例,这意味着如果某些国家/地区需要不同的大写格式,则北美格式优先。

最佳答案

我想你会在这里再次碰壁,因为通常你无法正确判断转换是否合理。

考虑你的边缘情况

JASON MCDONALD -> Jason Mcdonald (Correct: Jason McDonald)

您可以简单地检查名字开头的 Mc,然后应用您的更正,对吗?但是,如果您的人名为 Mcizck(当然是我编的)并且不应将其更正为 McIzck,而应保留原样怎么办?

这个问题没有100%完美的解决方案。你这里有一个自然语言问题,它们真的很难解决,尤其是对于计算机而言。文化差异太大,无法正确建模。即使您说北美公约优先,您也会有很高比例的“误报”。我们的社会由多种文化组成,仅仅说“北美优先”是不够的。

在不处理边缘情况的情况下,我猜您当前的解决方案在 99% 的时间内都能正常工作。如果确实需要 100% 正确的名称,则应手动更正所有其他边缘情况。

关于c# - 如何改进这种将名称转换为正确大小写的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2746009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com