我目前正在使用Tesseract使用iPhone 6相机扫描文档,然后处理识别的文本并将其放入textView。
我终于完成了工作,现在我想“检查”我发现的内容,然后使用该数据预先填充其他文本字段或标签
例如;
myTextField.text = @"name: George, age: 17, gender: male, blah blah whatever else"
现在我要搜索此文本字段并说出类似的内容:
If "substring "George:" is in string myTextField
nameLabel.text = text AFTER "George: " and BEFORE text ", age:"
我可以在我的文件中创建关键字,如“name:”和“age:”,但没有重复,但我无法保证整个文本域的长度,因为tesseract不是100%准确,因此“blah blah”部分,因为可能存在一些难以区分的文本,只要我能提取这些关键字就无关紧要
如果没有像我建议的方法,我会假设
find substring "name" and return stringPosition of
,
然后我可以重复“,年龄”,然后使用数字值来获得6点和13点之间的子串,仍然给我乔治。要么是好的,因为我不需要最终结果才能有效,只要它有效。
例如:
NSString * subs = @“the”; NSString * wholeText = tesseractText.text;
NSRange r = [wholeText rangeOfString:subs];
if (r.location == NSNotFound)
{
tesseractText.text = @"No";
}
else
{
// The string to be searched for is in the text view, r.location contains where exactly it is.
tesseractText.text = @"Yes";
}
即使文本的阅读/翻译出错,但如果方法“太严格”,那么它可能会崩溃,因为随机单词无法正确输入
答案 0 :(得分:0)
如果你的字符串有这种模式
key: String, key: string, key: string,
比您可以尝试使用-componentsSeparatedByString:
您将获得长字符串的数组,但这可以在字典中找到
答案 1 :(得分:0)
NSRegularExpression *regexp = [NSRegularExpression
regularExpressionWithPattern: @"name: (.*?), age"];
[regexp.enumerateMatchesInString:myTextField.text
options:0
range:NSMakeRange(0, myTextField.text.length)
usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop)
{
NSRange group1 = [match rangeAtIndex:1];
nameLabel.text = [myTextField.text substringWithRange:group1];
}
];
答案 2 :(得分:0)
感谢Tapani,我能够构建一个解决方案,其他任何人都有类似的需求,这里是:
NSRegularExpression regexp = [NSRegularExpression regularExpressionWithPattern:@“(。?)将”选项:NSRegularExpressionCaseInsensitive error:nil];
//我使用“the”和“will”因为这是我必须提交的文件,我知道100%会阅读,我可以在以后输入正确的字段
[regexp enumerateMatchesInString:tesseractText.text
options:0
range:NSMakeRange(0, tesseractText.text.length)
usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop)
{
NSRange group1 = [match rangeAtIndex:1];
myLabel.text = [tesseractText.text substringWithRange:group1];
}
];