NSDataDetectorを使用して奇妙な結果が得られ、それがどのように機能するかについての洞察を探しています。
内部データベースと照合していますか、それとも文字列内の個別のフィールドを検出するために分離アルゴリズムを使用していますか?
現在、私は次のコードを使用して住所のフィールドを検出しています。
NSDataDetector *address = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeAddress error:nil];
NSArray* matcheslinkaa = [address matchesInString:inputString options:0 range:NSMakeRange(0, [inputString length])];
if ([matcheslinkaa count]>0)
{
for (NSTextCheckingResult *match in matcheslinkaa)
{
if ([match resultType] == NSTextCheckingTypeAddress)
{
NSDictionary *phoneNumber = [match addressComponents];
NSLog(@"addressComponents %@",phoneNumber);
}
}
}
以下は、上記のコードを使用した、入力文字列とそれぞれの出力のサンプルセットです。
inputString = @"100 Main Street\n"
"Anytown, NY 12345\n"
"USA";
// prints:
// addressComponents {
// City = Anytown;
// Country = USA;
// State = NY;
// Street = "100 Main Street";
// ZIP = 12345;
// }
inputString = @"A-205 Natasha Golf View\n"
"2 Inner Ring Road\n"
"Bangalore\n"
"560071\n"
"Karnataka";
// prints:
// addressComponents {
// City = Bangalore;
// Street = "2 Inner Ring Road";
// ZIP = 560071;
// }
inputString = @"A-205 Natasha Golf View\n"
"2 Inner Ring Road\n"
"Domlur\n"
"Bangalore\n"
"560071\n"
"India";
// prints:
// addressComponents {
// City = Bangalore;
// Street = "2 Inner Ring Road";
// ZIP = 560071;
// }
inputString = @"Dak Bhavan\n"
"Parliament Street\n"
"NEW DELHI 110001\n"
"INDIA";
// => `addressComponents` is empty!
ご覧のとおり、NSDataDetectorはUSアドレスを抽出するのに問題はありません。インドの住所では国名すら見つからないほど悪化しているのはなぜですか?