在 Objective-C/Cocoa 中,有没有办法将拼写出来的单词转换为NSNumber
多种语言的一个或等价词?
例如:
转换three
为3
或转换ocho
为8
(西班牙语)。
也略有不同,但3 1/2
要3.5
我可以编写自己的代码来做到这一点,但我希望有一种内置的方法来做到这一点。我想避免将每个数字翻译成多种语言。
在 Objective-C/Cocoa 中,有没有办法将拼写出来的单词转换为NSNumber
多种语言的一个或等价词?
例如:
转换three
为3
或转换ocho
为8
(西班牙语)。
也略有不同,但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"]);
它可以处理的内容有严重的限制(它不会自动检测语言,如果您偏离预期的格式(例如“三十四”而不是“三十四”)、分数等),但对于狭窄的领域,它似乎可以胜任。
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);
}];
}
这确实让您的任务是确定如何以及何时执行分数解析等操作。