Objective-C:将单词转换为NSNumber

4

我希望将文字转换为数字,例如将“Ninety Nine”转换为“99”,将“Second”转换为“2nd”,将“Two”转换为“2”等等。

有人知道如何做到这一点吗?


1
@FawazTahir,这不一样。那是一个不同的问题,与Objective C无关。这里的问题是将单词转换为数字,而不是相反。 - iDev
抱歉,我看错了。 - bibo bode
问题:这是用于“压缩”书面文本,还是提供“自然语言”界面?作者的写作风格会比较正式,还是比较随意?翻译需要100%准确,98%,90%?工具是否可以在某些序列上“举手投降”(并可能请求协助),或者必须翻译所有内容? - Hot Licks
(您是否会在某些情况下处理美元和美分? 将“fifteen-ninetynine == 1599”与“fifteen-ninetynine”= $15.99区分是一个明确的挑战。) - Hot Licks
(并考虑“五百四十二”= 542,但“十点二十分”= $10.20或10:20。) - Hot Licks
显示剩余5条评论
2个回答

6

苹果没有为此类目的提供API。 即使只针对一种语言,词汇分析也很困难。 将数字表达为单词可能相对简单,但从单词转换为数字需要解决许多特殊情况。

暴力方法是拥有所有可能组合的数据库。 更聪明的方法可能是分析每个单词并推断出它可能表示的数字。


3

您正在寻找这个,NSNumberFormatterStyle。它有一个选项,名为NSNumberFormatterSpellOutStyle

根据苹果的文档,

NSNumberFormatterSpellOutStyle:指定拼写格式;例如,“23”变成“twenty-three”。

看起来您想要将文字转换为数字而不是将数字转换为文字。我误读了您的问题。

由于Apple没有可用的API,您可能需要手动执行此操作。您可以检查NSNumberFormatter并查看是否可以找到对此有所帮助的内容。

正如jlehr所提到的,NSLog(@"%@", [formatter numberFromString:@"one hundred forty-three"]);将给出数字143。但这可能不是适用于所有可能组合的完美解决方案。


4
NSNumberFormatter 至少可以帮你解决部分问题。例如,当使用设置为 NSNumberFormatterSpellOutStyle 格式的实例时,NSLog(@"%@", [formatter numberFromString:@"one hundred forty-three"]); 将正确地返回数字 143 - jlehr
@jlehr,感谢你指出来。我不确定它是否适用于所有可能的组合。 - iDev
真的是非常好的评论 jlehr - Ayaz Alavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接