在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"]);
有嚴重的侷限性,以什麼它可以處理(它不會自動檢測語言,如果與預期偏離格式(如「34 「而不是」三十四「),分數等),但是對於狹窄的領域來說,它似乎是做這項工作的。
太棒了!我不知道「NSNumberFormatter」可以做到這一點。謝謝! – edc1591
這個解決方案像魔術一樣工作。然而,你可以解釋爲什麼我得到(空格)[formatter numberFromString:@「three point 11」],即使[formatter numberFromString:@「three point one」]工作正常嗎? – static0886
順便說一句,我得到3.11 [formatter numberFromString:@「three point one one」]但我得到101.3 [formatter numberFromString:@「one one point three」] – static0886
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);
}];
}
這不會離開你確定如何和何時做的事情一樣分數分辨率的任務。
考慮搜索「自然語言」和「NSNumberFormatter」文檔 –
@JoshuaNozzi從我發現,'NSNumberFormatter'只能做到與此相反。 – edc1591
您可以創建一個NSDictionnary,其值爲1的「one」鍵,2的「two」等等。但是你必須一個接一個地寫下每個數字 - 不太實際。 – Moray