2011-06-12 15 views
35

की भाषा का पता लगाएं किसी ने मुझे कोको में भाषा पहचान के लिए कक्षा के बारे में बताया। क्या कोई जानता है कि यह कौन सा है?एनएसएसटींग

NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker]; 
[spellChecker setAutomaticallyIdentifiesLanguages:YES]; 
NSString *spellCheckText = @"Guten Tag Herr Mustermann. Dies ist ein deutscher Text. Bitte löschen Sie diesen nicht."; 
[spellChecker checkSpellingOfString:spellCheckText startingAt:0]; 
NSLog(@"%@", [spellChecker language]); 

परिणाम है 'en' लेकिन '' डे होना चाहिए:

यह नहीं काम कर रहे है।

धन्यवाद ...

+0

मेरे जर्मन बहुत अच्छा नहीं है, लेकिन यह "einen Deutscher पाठ" नहीं होना चाहिए? अगर मैं गलत हूं तो क्षमा करें। –

+1

+1 महान सवाल! मैं ढांचे के साथ काम करने में कितना समय बिताता हूं, मुझे आश्चर्य है कि मैंने कभी इस तरह की भाषा का पता लगाने के बारे में कभी नहीं सुना है। –

+2

@WTP: नहीं, यह "ईन" है। आप कहेंगे "आईच lese * einen * deutschen पाठ" हालांकि। ;) जर्मन एक बुरा कुत्ता है। एंट्रॉपी से भरा ;) #native – Regexident

उत्तर

13

परिणाम Thats:

- (NSString *)languageForString:(NSString *) text{ 

    if (text.length < 100) { 
     return (NSString *) CFStringTokenizerCopyBestStringLanguage((CFStringRef)text, CFRangeMake(0, text.length)); 
    } else { 
     return (NSString *)CFStringTokenizerCopyBestStringLanguage((CFStringRef)text, CFRangeMake(0, 100)); 
    } 
} 
+4

रिटर्न (एनएसएसटींग *) सीएफस्ट्रिंग टोकनाइज़र कैपीबेस्टस्ट्रिंग लैंगेज ((सीएफस्ट्रिंगरफ) टेक्स्ट, सीएफआरेंजमेक (0, मिन (टेक्स्ट। लम्बाई, 100)) को जानता है; यदि आप बाद में CFStringTokenizerCopyBestStringLanguage – Guillaume

+1

पर कॉल को संशोधित करते हैं तो "हेलो" जैसे छोटे शब्द के लिए, यह "इसे" वापस कर देगा, तो बग परिचय के लिए अधिक स्पष्ट और कम प्रवण होना चाहिए। इतालवी –

+0

ठीक है, इसका काम थोड़ा बड़ा वाक्यों में है, लेकिन "आईच बिन उमर" बाहर है लेकिन "डी" – umairhhhs

7

आप -requestCheckingOfString:… बजाय उपयोग कर सकते हैं। NSTextCheckingTypeOrthography स्ट्रिंग में उपयोग की जाने वाली भाषा की पहचान करने का प्रयास करता है, और समापन हैंडलर को NSOrthography पैरामीटर प्राप्त होता है जिसका प्रयोग स्ट्रिंग में ऑर्थोग्राफी के बारे में जानकारी प्राप्त करने के लिए किया जा सकता है, जिसमें इसकी प्रमुख भाषा भी शामिल है।

निम्न उदाहरण आउटपुट dominant language = de:

NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker]; 
[spellChecker setAutomaticallyIdentifiesLanguages:YES]; 
NSString *spellCheckText = @"Guten Herr Mustermann. Dies ist ein deutscher Text. Bitte löschen Sie diesen nicht."; 

[spellChecker requestCheckingOfString:spellCheckText 
    range:(NSRange){0, [spellCheckText length]} 
    types:NSTextCheckingTypeOrthography 
    options:nil 
    inSpellDocumentWithTag:0 
    completionHandler:^(NSInteger sequenceNumber, NSArray *results, NSOrthography *orthography, NSInteger wordCount) { 
     NSLog(@"dominant language = %@", orthography.dominantLanguage); 
}]; 
+0

यह कोड पूरी तरह से काम करता है। क्या कोई स्विफ्ट 2.1 समतुल्य – user226372

39

वहाँ एक स्ट्रिंग की भाषा की जाँच करने के लिए उपलब्ध कोको में एपीआई है, और यह हमेशा सर्वश्रेष्ठ फाउंडेशन उपयोग करने के लिए है जब भी संभव हो कोरफाउंडेशन पर।

NSArray *tagschemes = [NSArray arrayWithObjects:NSLinguisticTagSchemeLanguage, nil]; 
NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:tagschemes options:0]; 
[tagger setString:@"Das ist ein bisschen deutscher Text. Bitte löschen Sie diesen nicht."]; 
NSString *language = [tagger tagAtIndex:0 scheme:NSLinguisticTagSchemeLanguage tokenRange:NULL sentenceRange:NULL]; 

वैकल्पिक रूप से, अगर आप मिश्रित भाषा पाठ हैं तो आप आप enumerateLinguisticTagsInRange एपीआई का उपयोग पाठ में प्रत्येक शब्द के भाषा प्राप्त करने के लिए कर सकते हैं।

+1

के बजाय "nl" था यह बहुत अच्छा काम करता है! आप '[टैगर ऑर्थोग्राफीएट इंडेक्स: 0 प्रभावी श्रेणी: शून्य]' को कॉल करके 'एनएसओथोग्राफी' भी बना सकते हैं। निश्चित रूप से सबसे अच्छा जवाब। धन्यवाद। –

5

जेनिफर के जवाब के लिए एक तेज स्ट्रिंग विस्तार:

extension String { 
    func language() -> String? { 
     let tagger = NSLinguisticTagger(tagSchemes: [NSLinguisticTagSchemeLanguage], options: 0) 
     tagger.string = self 
     return tagger.tagAtIndex(0, scheme: NSLinguisticTagSchemeLanguage, tokenRange: nil, sentenceRange: nil) 
    } 
} 

उपयोग:

let language = "What language is this?".language() 
+0

भाषा = "%" दें। भाषा() // ---> यह एक दुर्घटना है! –

+0

यह नहीं पता था कि यह आईओएस में समर्थित था - भयानक – RJH

+0

# टिम फ्राइडलैण्ड मजबूती से इसे लपेटने की तुलना में नहीं। बस इसे वैकल्पिक छोड़ दें। भाषा को समझने पर यह शून्य मूल्य दिखाएगा। – MRizwan33