2013-03-28 15 views
6

पर परिवर्तित करें उद्देश्य-सी/कोको में वर्तनी वाले शब्दों को NSNumber या एकाधिक भाषाओं में समकक्ष रूपांतरित करने के लिए कोई तरीका है?वर्तनी संख्या को संख्या

उदाहरण के लिए:

परिवर्तित three3 करने के लिए या परिवर्तित ocho8 को (स्पेन)।

भी थोड़ा अलग है, लेकिन 3 1/23.5

को मैं यह करने के अपने खुद के कोड लिख सकता है, लेकिन मुझे उम्मीद थी वहाँ था एक अंतर्निहित तरीका यह है। कई भाषाओं में प्रत्येक नंबर के अनुवाद प्राप्त करना कुछ ऐसा है जो मैं टालना चाहता हूं।

+3

"प्राकृतिक भाषा" और "NSNumberFormatter" –

+0

@JoshuaNozzi के लिए प्रलेखन को खोजने पर विचार करें जो मैंने पाया है, 'NSNumberFormatter' केवल इसके विपरीत ही कर सकता है। – edc1591

+0

आप एक NSDictionnary बना सकते हैं जिसमें कुंजी "एक" के लिए मान 1 होगा, 2 "दो" के लिए 2 और इसी तरह। लेकिन आपको प्रत्येक नंबर एक दूसरे के बाद लिखना है - काफी व्यावहारिक नहीं। – Moray

उत्तर

12

NSNumberFormatter पर SMS से परिवर्तित कर सकते हैं:

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"]); 

वहाँ यह क्या संभाल कर सकते हैं (यह ऑटो, भाषाओं का पता लगाने नहीं पड़ता कि आप की उम्मीद प्रारूप से विचलित करने के लिए के रूप में गंभीर सीमाएं हैं (उदाहरण के लिए "चौंतीस "" चौबीस "के बजाय), अंश, आदि), लेकिन संकीर्ण डोमेन के लिए, यह काम करता प्रतीत होता है।

+1

बहुत बढ़िया! मुझे नहीं पता था कि 'NSNumberFormatter' ऐसा कर सकता है। धन्यवाद! – edc1591

+0

यह समाधान जादू की तरह काम करता है। हालांकि, क्या आप समझा सकते हैं कि मुझे [फॉर्मटर नंबर फ्रॉमस्ट्रिंग: @ "तीन बिंदु ग्यारह"] के लिए क्यों (शून्य) मिलता है, भले ही [फॉर्मेटर संख्याप्रोमस्ट्रिंग: @ "तीन बिंदु एक"] ठीक काम करता है? – static0886

+0

बीटीडब्ल्यू मुझे [फॉर्मेटर नंबरफ्रॉस्ट्रिंग: @ "तीन बिंदु एक" के लिए 3.11 मिलता है, लेकिन मुझे [फॉर्मेटर नंबर फ्रॉमस्ट्रिंग: @ "एक एक बिंदु तीन"] – static0886

2

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); 
     }]; 
} 

यह आपको यह जानने के कार्य के साथ छोड़ देता है कि अंश संकल्प जैसी चीजें कैसे और कब करें।