您可以使用机器学习套件识别文本字符串使用的语言。您可以获取字符串最可能使用的语言,以及字符串的所有可能语言的置信度分数。
机器学习套件可以在其原生脚本中识别 100 多种不同的语言的文本。 此外,还可以识别阿拉伯语、保加利亚语、中文、希腊语、印地语、日语和俄语的拼音文字。请参阅受支持语言和脚本的完整列表。
试试看
- 试用示例应用,查看此 API 的示例用法。
准备工作
- 在 Podfile 中添加以下机器学习套件 pod:
pod 'GoogleMLKit/LanguageID', '3.2.0'
- 安装或更新项目的 Pod 之后,请使用 Xcode 项目的
.xcworkspace
打开该项目。Xcode 12.4 版或更高版本支持机器学习套件。
识别字符串使用的语言
如需识别字符串使用的语言,请获取 LanguageIdentification
的实例,然后将字符串传递给 identifyLanguage(for:)
方法。
例如:
Swift
let languageId = NaturalLanguage.languageIdentification() languageId.identifyLanguage(for: text) { (languageCode, error) in if let error = error { print("Failed with error: \(error)") return } if let languageCode = languageCode, languageCode != "und" { print("Identified Language: \(languageCode)") } else { print("No language was identified") } }
Objective-C
MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentification]; [languageId identifyLanguageForText:text completion:^(NSString * _Nullable languageCode, NSError * _Nullable error) { if (error != nil) { NSLog(@"Failed with error: %@", error.localizedDescription); return; } if (![languageCode isEqualToString:@"und"] ) { NSLog(@"Identified Language: %@", languageCode); } else { NSLog(@"No language was identified"); } }];
如果调用成功,则系统会向完成处理程序传递一个 BCP-47 语言代码,表示文本的语言。如果无法确保检测到语言,则传递代码 und
(未确定)。
默认情况下,机器学习套件仅在识别置信度值至少为 0.5 的语言时才会返回非 und
值。您可以通过将 LanguageIdentificationOptions
对象传递给 languageIdentification(options:)
来更改此阈值:
Swift
let options = LanguageIdentificationOptions(confidenceThreshold: 0.4) let languageId = NaturalLanguage.languageIdentification(options: options)
Objective-C
MLKLanguageIdentificationOptions *options = [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4]; MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentificationWithOptions:options];
获取字符串可能使用的语言
如需获取字符串最可能使用的语言的置信度值,请获取 LanguageIdentification
的实例,然后将字符串传递给 identifyPossibleLanguages(for:)
方法。
例如:
Swift
let languageId = NaturalLanguage.languageIdentification() languageId.identifyPossibleLanguages(for: text) { (identifiedLanguages, error) in if let error = error { print("Failed with error: \(error)") return } guard let identifiedLanguages = identifiedLanguages, !identifiedLanguages.isEmpty, identifiedLanguages[0].languageCode != "und" else { print("No language was identified") return } print("Identified Languages:\n" + identifiedLanguages.map { String(format: "(%@, %.2f)", $0.languageCode, $0.confidence) }.joined(separator: "\n")) }
Objective-C
MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentification]; [languageId identifyPossibleLanguagesForText:text completion:^(NSArray* _Nonnull identifiedLanguages, NSError * _Nullable error) { if (error != nil) { NSLog(@"Failed with error: %@", error.localizedDescription); return; } if (identifiedLanguages.count == 1 && [identifiedLanguages[0].languageCode isEqualToString:@"und"] ) { NSLog(@"No language was identified"); return; } NSMutableString *outputText = [NSMutableString stringWithFormat:@"Identified Languages:"]; for (MLKIdentifiedLanguage *language in identifiedLanguages) { [outputText appendFormat:@"\n(%@, %.2f)", language.languageCode, language.confidence]; } NSLog(outputText); }];
如果调用成功,IdentifiedLanguage
对象的列表会被传递给接续处理程序。您可以从每个对象获取语言的 BCP-47 代码以及字符串使用该语言的置信度。请注意,这些值表示整个字符串使用给定语言的置信度;机器学习套件无法识别单个字符串中的多种语言。
默认情况下,机器学习套件仅返回置信度值至少为 0.01 的语言。您可以通过将 LanguageIdentificationOptions
对象传递给 languageIdentification(options:)
来更改此阈值:
Swift
let options = LanguageIdentificationOptions(confidenceThreshold: 0.4) let languageId = NaturalLanguage.languageIdentification(options: options)
Objective-C
MLKLanguageIdentificationOptions *options = [[MLKLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4]; MLKLanguageIdentification *languageId = [MLKLanguageIdentification languageIdentificationWithOptions:options];
如果没有语言满足此阈值,则此列表将包含一个值为 und
的项。