Wykrywanie języka NSString
Ktoś mi powiedział o zajęciach z rozpoznawania języka w kakao. Czy ktoś wie,który to?
To jest nie działa:
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]);
Wynikiem jest 'en', ale powinno być 'de'.
5 answers
W cocoa dostępne jest API do sprawdzania języka łańcucha znaków i zawsze najlepiej jest używać Foundation zamiast CoreFoundation, gdy tylko jest to możliwe.
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];
Alternatywnie, jeśli masz tekst w języku mieszanym, możesz użyć interfejsu API enumerateLinguisticTagsInRange, aby uzyskać język każdego słowa w tekście.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-09 01:35:59
Wynik:
- (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));
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-06 11:56:52
Możesz zamiast tego użyć -requestCheckingOfString:…
. NSTextCheckingTypeOrthography
próbuje zidentyfikować język używany w łańcuchu, a obsługa dopełnienia otrzymuje parametr NSOrthography
, który może być użyty do uzyskania informacji o ortografii w łańcuchu, w tym jego języku dominującym.
Następujący przykład wyjścia 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);
}];
Szybkie rozszerzenie ciągu Dla odpowiedzi Jennifer:
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)
}
}
Użycie:
let language = "What language is this?".language()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-26 19:38:25
Od iOS 11 możesz użyć dominantLanguage(for:)
/dominantLanguageForString:
metoda klasy NSLinguisticTagger
.
Swift:
extension String {
var language: String? {
return NSLinguisticTagger.dominantLanguage(for: self)
}
}
print("Good morning".language)
print("Buenos días".language)
Objective-C:
@interface NSString (Tagger)
@property (nonatomic, readonly, nullable) NSString *language;
@end
@implementation NSString (Tagger)
- (NSString *)language {
return [NSLinguisticTagger dominantLanguageForString:self];
}
@end
NSLog(@"%@", @"Good morning".language);
NSLog(@"%@", @"Buenos días".language);
Wyjście (dla obu):
En
es
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-31 01:06:48