Objective-C/Cocoaで、スペルアウトされた単語をNSNumber
複数の言語でまたは同等のものに変換する方法はありますか?
例えば:
convert three
to3
または convert ocho
to 8
(スペイン語)。
こちらも若干異なりますが3 1/2
、3.5
これを行う独自のコードを作成することもできましたが、これを行う組み込みの方法があることを望んでいました。すべての数字を複数の言語に翻訳することは避けたいと思います。
Objective-C/Cocoaで、スペルアウトされた単語をNSNumber
複数の言語でまたは同等のものに変換する方法はありますか?
例えば:
convert three
to3
または convert ocho
to 8
(スペイン語)。
こちらも若干異なりますが3 1/2
、3.5
これを行う独自のコードを作成することもできましたが、これを行う組み込みの方法があることを望んでいました。すべての数字を複数の言語に翻訳することは避けたいと思います。
NSNumberFormatter
テキストから数値に変換できます:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterSpellOutStyle;
NSLog(@"%@", [formatter numberFromString:@"thirty-four"]);
NSLog(@"%@", [formatter numberFromString:@"three point five"]);
formatter.locale = [[NSLocale alloc]initWithLocaleIdentifier:[NSLocale localeIdentifierFromComponents:@{NSLocaleLanguageCode: @"es"}]];
NSLog(@"%@", [formatter numberFromString:@"ocho"]);
処理できるものに関して深刻な制限があります (想定される形式 (たとえば、"thirty-four" ではなく "thirty four")、分数などから逸脱した場合、言語を自動検出しません)。狭いドメインでは、仕事をしているようです。
NSLinguisticTagger
複数の言語で番号にフラグを立てます。
NSArray * texts = @[@"It's 3 degrees outside", @"Ocho tacos", @"What is 3 1/2?", @"ocho"];
for (NSString * text in texts)
{
NSLinguisticTaggerOptions options = NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerJoinNames;
NSArray * tagSchemes = [NSLinguisticTagger availableTagSchemesForLanguage:@"en"];
tagSchemes = [tagSchemes arrayByAddingObjectsFromArray:[NSLinguisticTagger availableTagSchemesForLanguage:@"es"]];
NSLinguisticTagger * tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:tagSchemes
options:options];
[tagger setString:text];
[tagger enumerateTagsInRange:NSMakeRange(0, [text length])
scheme:NSLinguisticTagSchemeNameTypeOrLexicalClass
options:options
usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop)
{
NSString *token = [text substringWithRange:tokenRange];
NSLog(@"%@: %@", token, tag);
}];
}
これにより、分数分解などをいつ、どのように行うかを特定する作業が残ります。