2015-04-27 65 views
0

我目前使用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:" 

我可以在我的文件中像中创建关键字“名称:”和“年龄:”没有重复,但我可以由于tesseract不是100%准确的,因此不能保证整个文本字段的长度,因此“blah blah”部分,因为可能存在一些不可区分的文本,只要我可以提取那些关键字就无关紧要了。

If没有像我建议的方法,我假设像

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

我想你的意思找到字符串为“名称:”不是“乔治:” – SnoApps

+0

是的,我已经改正了,谢谢:) –

回答

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]; 
    } 
]; 
+0

这看起来好像会起作用,我会试试看,谢谢 –

+0

我不得不做一些调整,但它的工作,非常感谢你: NSRegularExpression * regexp = [NSRegularExpression regularExpressionWithPattern:@“the(。*?)will”options:NSRegularExpressionCaseInsensitive error:nil]; [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]; } ]; –

0

如果你的字符串有这种模式

key: String, key: string, key: string, 

比你可以尝试使用-componentsSeparatedByString:

你会得到你的长字符串的数组,比你能但这在文辞ARY

+0

所以你的意思是这样的: 键:名称,密钥:年龄,关键:性别...... 然后使用componentsSeparatedByString:找到说,第一个键:或第二个键?或者用键填写数组来分隔每个部分? 听起来好像可能有帮助,但是因为我的字符串使用了Tesseract,所以有些单词不能正确填充,我无法控制确切的长度,所以如果模式被破坏,它不会起作用吗?我想我需要一些更灵活的东西来弥补阅读错误,但我会研究这个,看看有没有办法,谢谢:D –

0

感谢塔帕尼我能够构建一个解决方案,柜面其他人也有类似的需求,那就是:

NSRegularExpression 正则表达式= [NSRegularExpression regularExpressionWithPattern:@“了(。?)将“选项:NSRegularExpressionCaseInsensitive错误:零”;

//我使用“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]; 
      } 
      ]; 
相关问题