我使用 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 提取美国地址没有问题。为什么印度地址的情况如此糟糕,甚至找不到国家名称?