2016-07-15 22 views
0

Meine Anwendung umfasst Scannen durch die Telefon-Kamera und Erkennung von Text. Die einzigen Wörter, die meine Anwendung betrifft, sind gültige englische Wörter. Ich habe eine Liste von ~ 354.000 gültigen englischen Wörtern, mit denen ich mein gescanntes Wort vergleichen kann.Android, Java - Korrigieren Sie ein OCR-ed-Wort zu einem gültigen englischen Wörterbuch-Wort in Echtzeit

Da meine Anwendung kontinuierlich Text erkennt, muss diese Funktionalität sehr schnell sein. Ich habe Levenshtein Distance Technik angewendet. Für jedes Wort, I:

  1. Shop der Inhalt der Textdatei in eine Arraylist<String>Scanner
  2. berechnen Levenshtein Entfernung des Wortes mit jedem der 354 T Worte
  3. Return das Wort auf den minimalen Abstand unter Verwendung von entsprechenden Wert

Das Problem ist, dass es sehr, sehr langsam ist. Ohne diese Anwendung schafft meine App mehr als 20 Wörter in etwa 70 bis 100 Millisekunden. Wenn ich diese Fixierungsroutine einschließe, benötigt meine App mehr als eine volle Minute (60000 ms) für ein einzelnes Wort.

Ich habe mich gefragt, ob diese Technik auch für meinen Fall geeignet ist. Wenn nicht, auf welche andere Weise sollte ich gehen? Jede Hilfe würde sehr geschätzt werden. Ich weiß, dass dies möglich ist, wenn man sich ansieht, wie Android-Tastaturen unsere falsch eingegebenen Wörter sofort korrigieren können.

Andere Fehlgeschlagen Bemühungen:

  • Jaro Entfernung. (ähnlich)
  • Android interne SpellCheckerSession Service. (Paßt nicht meinen Fall Quittung Ergebnis über einen Rückruf das Problem.)
+0

@Andy der Liste nach unten schneiden leider keine Option ist. Kann es irgendwelche Hashing- oder Mapping-Techniken geben, die ich hier einbauen könnte? –

+1

Ich meine nicht unbedingt "die Liste herunterfahren", wie in komplett verwerflichen Worten; Ich meine, dass Sie eine Möglichkeit brauchen, die Liste so zu partitionieren, dass Sie keine Wörter suchen, die nicht gefunden werden können. Zum Beispiel nehme ich an, dass Sie eine Vorstellung davon haben, wie lange das Wort sein wird - können Sie nur Wörter dieser Länge +/- 1, sagen? –

+0

@Andy Say auch wenn ich irgendwie die Wörterliste auf ein Zehntel eingrenzen, das bedeutet immer noch 6 Sekunden pro Wort. Während Smartphone-Tastaturen es sofort tun können. Ich würde wirklich gerne über diese Technik wissen. –

Antwort

0

Meine Lösung, die funktioniert: ich eine MYSQL-Tabelle erstellt und hochgeladen die Liste der gültigen Englisch Worte in ihm. Es löst alle in der Frage angesprochenen Probleme.

Hier ist meine Applikation für Android Referenz: Optical Dictionary & Vocabulary Teacher