将拼出的数字转换为数字

在Objective-C / Cocoa中有没有一种方法可以将拼写出来的单词转换成多种语言的NSNumber或同等语言?

例如:

three转换为three或将ocho转换为8 (西class牙)。

也略有不同,但是3 1/23.5

我可以写我自己的代码来做到这一点,但我希望有一个内置的方式来做到这一点。 以多种语言获取每个数字的翻译是我想避免的。

NSNumberFormatter可以从文本转换为数字:

 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; formatter.numberStyle = NSNumberFormatterSpellOutStyle; NSLog(@"%@", [formatter numberFromString:@"thirty-four"]); NSLog(@"%@", [formatter numberFromString:@"three point five"]); formatter.locale = [[NSLocale alloc]initWithLocaleIdentifier:[NSLocale localeIdentifierFromComponents:@{NSLocaleLanguageCode: @"es"}]]; NSLog(@"%@", [formatter numberFromString:@"ocho"]); 

对于它能处理什么有严重的限制(如果你偏离了预期的格式(例如“34”而不是34),分数等等,它不会自动检测语言),但是对于狭窄的领域,它似乎做的工作。

NSLinguisticTagger将用多种语言标记你的号码。

 NSArray * texts = @[@"It's 3 degrees outside", @"Ocho tacos", @"What is 3 1/2?", @"ocho"]; for (NSString * text in texts) { NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerJoinNames; NSArray * tagSchemes = [NSLinguisticTagger availableTagSchemesForLanguage:@"en"]; tagSchemes = [tagSchemes arrayByAddingObjectsFromArray:[NSLinguisticTagger availableTagSchemesForLanguage:@"es"]]; NSLinguisticTagger * tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:tagSchemes options:options]; [tagger setString:text]; [tagger enumerateTagsInRange:NSMakeRange(0, [text length]) scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass options:options usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { NSString *token = [text substringWithRange:tokenRange]; NSLog(@"%@: %@", token, tag); }]; } 

这确实给你确定如何以及何时做分数分辨率的任务。