2015-04-27 107 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]; 
      } 
      ]; 
相關問題