您可以使用机器学习套件识别文本字符串使用的语言。您可以获取字符串最可能使用的语言,也可以获取字符串可能使用的所有语言的置信度分数。
机器学习套件可在输入的文稿中识别出 103 种不同语言的文本。此外,还可以识别用拉丁字母拼写的阿拉伯文、保加利亚文、中文、希腊文、印地文、日文和俄文。
准备工作
- 如果您尚未将 Firebase 添加到自己的应用中,请按照入门指南中的步骤执行此操作。
- 在 Podfile 中添加机器学习套件库:
pod 'Firebase/MLNaturalLanguage', '6.25.0' pod 'Firebase/MLNLLanguageID', '6.25.0'
在安装或更新项目的 Pod 之后,请务必使用 Xcode 项目的.xcworkspace
打开该项目。 - 在您的应用中导入 Firebase:
Swift
import Firebase
Objective-C
@import Firebase;
识别字符串使用的语言
要识别字符串使用的语言,请获取 LanguageIdentification
的一个实例,然后将字符串传递给 identifyLanguage(for:)
方法。
例如:
Swift
let languageId = NaturalLanguage.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
FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentification *languageId = [naturalLanguage languageIdentification];
[languageId identifyLanguageForText:text
completion:^(NSString * _Nullable languageCode,
NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Failed with error: %@", error.localizedDescription);
return;
}
if (languageCode != nil
&& ![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.naturalLanguage().languageIdentification(options: options)
Objective-C
FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
[[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
[naturalLanguage languageIdentificationWithOptions:options];
获取字符串可能使用的语言
要获取字符串最可能使用的语言的置信度值,请获取 LanguageIdentification
的一个实例,然后将字符串传递给 identifyPossibleLanguages(for:)
方法。
例如:
Swift
let languageId = NaturalLanguage.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
FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentification *languageId = [naturalLanguage languageIdentification];
[languageId identifyPossibleLanguagesForText:text
completion:^(NSArray<FIRIdentifiedLanguage *> * _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 (FIRIdentifiedLanguage *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.naturalLanguage().languageIdentification(options: options)
Objective-C
FIRNaturalLanguage *naturalLanguage = [FIRNaturalLanguage naturalLanguage];
FIRLanguageIdentificationOptions *options =
[[FIRLanguageIdentificationOptions alloc] initWithConfidenceThreshold:0.4];
FIRLanguageIdentification *languageId =
[naturalLanguage languageIdentificationWithOptions:options];
如果没有语言满足此阈值,则此列表将只包含一个值为 und
的项。