有人告诉我有关Cocoa语言识别的课程。 有谁知道它是哪一个?
这是不正在工作:
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'但应该是'de'。
答案 0 :(得分:43)
可可用API来检查字符串的语言,并且最好尽可能使用Foundation over CoreFoundation。
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 API来获取文本中每个单词的语言。
答案 1 :(得分:13)
结果如下:
- (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));
}
}
答案 2 :(得分:8)
您可以改用-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);
}];
答案 3 :(得分:6)
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)
}
}
用法:
let language = "What language is this?".language()
答案 4 :(得分:2)
使用Swift 4.2,您可以选择以下方法之一来检测给定字符串的语言。
NSLinguisticTagger
的{{1}}属性自iOS 11起,dominantLanguage
具有一个名为dominantLanguage
的属性。 NSLinguisticTagger
具有以下声明:
dominantLanguage
返回用于语言标记器的字符串集的主要语言。
下面的Playground示例代码展示了如何使用var dominantLanguage: String? { get }
来了解字符串的主导语言:
dominantLanguage
import Foundation
let text = "あなたはそれを行うべきではありません。"
let tagger = NSLinguisticTagger(tagSchemes: [.language], options: 0)
tagger.string = text
let language = tagger.dominantLanguage
print(language) // Optional("ja")
的{{1}}方法作为替代方案,NSLinguisticTagger
有一个方便的方法,称为dominantLanguage(for:)
,用于创建新的语言标记器,设置其string
属性和获取dominantLanguage(for:)
属性。 NSLinguisticTagger
具有以下声明:
dominantLanguage
返回指定字符串的主导语言。
用法:
dominantLanguage(for:)
class func dominantLanguage(for string: String) -> String?
的{{1}}属性自iOS 12起,import Foundation
let text = "Die Kleinen haben friedlich zusammen gespielt."
let language = NSLinguisticTagger.dominantLanguage(for: text)
print(language) // Optional("de")
具有名为dominantLanguage
的属性。 NLLanguageRecognizer
具有以下声明:
dominantLanguage
处理后的文本最可能的语言。
以下是使用NLLanguageRecognizer
来猜测自然语言文本的主要语言的方法:
dominantLanguage
答案 5 :(得分:0)
从iOS 11开始,您可以使用dominantLanguage(for:)
的{{1}} / dominantLanguageForString:
类方法。
迅速:
NSLinguisticTagger
Objective-C:
extension String {
var language: String? {
return NSLinguisticTagger.dominantLanguage(for: self)
}
}
print("Good morning".language)
print("Buenos días".language)
输出(两者):
en
es