将拼出的数字转换为数字
在Objective-C / Cocoa中有没有一种方法可以将拼写出来的单词转换成多种语言的NSNumber
或同等语言?
例如:
将three
转换为three
或将ocho
转换为8
(西class牙)。
也略有不同,但是3 1/2
到3.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); }]; }
这确实给你确定如何以及何时做分数分辨率的任务。