2017-02-28 5 views
1

Ich arbeite an einer Spring-MVC-Anwendung, in die wir derzeit OCR-Funktionalität integrieren. OCR haben die Angewohnheit, Wild-Zeichen für falsche Erkennungen und wenn ein Bild im Hintergrund ist, zu werfen. Nach der Verarbeitung des Bildes haben wir sehr gute Daten zur Verfügung, aber es gibt immer noch einige Fehler. Wir möchten den Ausgang wie folgt verarbeitenJava: So entfernen Sie alle Zeichen in String außer a-z, Ziffern und deutschen Zeichen

  1. Entfernen Sie alle einzelnen Zeichen aus der Ausgabe String.
  2. Entfernen Sie alle Zeichen außer A-Z, a-z, deutsche Zeichen, d. H. Äöü, ÄÖÜ, ß.
  3. Leerzeichen und Ziffern sollten nicht geändert werden.

Code:

File imageFile = new File(fileLocation); 

      BufferedImage img = ImageIO.read(imageFile); 
      BufferedImage blackNWhite = new BufferedImage(img.getWidth(),img.getHeight(),BufferedImage.TYPE_BYTE_BINARY); 
      Graphics2D graphics = blackNWhite.createGraphics(); 
      graphics.drawImage(img, 0, 0, null); 
      String blackAndWhiteImage = zipLocation + String.valueOf(new BigInteger(130, random).toString(32))+".png"; 
      File outputfile = new File(blackAndWhiteImage); 
      ImageIO.write(blackNWhite, "png", outputfile); 

      ITesseract instance = new Tesseract(); 
      // Point to one folder above tessdata directory, must contain training data 
      instance.setDatapath("/usr/share/tesseract-ocr/"); 
      // ISO 693-3 standard 
      instance.setLanguage("deu"); 
      String result = instance.doOCR(outputfile); 
      //System.out.println(result); 
      result = result.replaceAll("\\P{ASCII}",""); 
      System.out.println("Result is "+result); 
      return result; 

Danke.

aktualisieren

Wild von der Regex links Zeichen:

| 
| '(°Ul") 
_} ° 
=# ' 
() 
...................................__+_......_._._.__._._._+._._. 
+0

Regex wäre '' '}' ' – osanger

Antwort

2

Ad. 1.
result.replaceAll("\\s[a-zA-ZöÖäÄüÜß]\\s", "");
Ad. schließlich verwendet, um dieses Problem zu lösen 2.
result.replaceAll("[^a-zA-ZöÖäÄüÜß]", "");

+0

Ich denke, Schritt 1 sollte auch Ziffern entfernen und eines der Leerzeichen beibehalten. Etwas wie "\\ s [a-zA-Z \ döÖäÄüÜß] \ b" würde auch am Ende eines Satzes funktionieren, wo hinter dem letzten Zeichen kein Leerzeichen mehr ist. –

+0

Danke, ich möchte keine Ziffern entfernen. Soll ich 2. oder 1. dafür benutzen? Danke. –

+0

@WeareBorg Sie müssen beide verwenden. Es ist ein zweistufiger Prozess. –

0

Dies ist die regex I:

result = result.replaceAll("[^a-zA-Z0-9öÖäÄüÜß@\\s]", ""); 

Danke.

Verwandte Themen