2014-04-26 6 views
5

Ich verwende NLTK, um Text zu verarbeiten, der aus PDF-Dateien extrahiert wird. Ich kann den Text größtenteils intakt wiederherstellen, aber es gibt viele Fälle, in denen Leerzeichen zwischen Wörtern nicht erfasst werden, daher bekomme ich Wörter wie ifI anstelle von if I oder thatposition anstelle von that position oder andhe's statt and he's.Tokenizing ungeteilter Wörter aus OCR mit NLTK

Meine Frage ist das: Wie kann ich NLTK verwenden, um nach Wörtern zu suchen, die es nicht erkennt/nicht gelernt hat, und um zu sehen, ob es "nahegelegene" Wortkombinationen gibt, die wahrscheinlicher sind? Gibt es einen eleganteren Weg, diese Art von Prüfung durchzuführen, als einfach durch das unerkannte Wort zu laufen, ein Zeichen nach dem anderen, es zu teilen und zu sehen, ob es zwei erkennbare Wörter gibt?

Antwort

4

Ich würde vorschlagen, dass Sie stattdessen pyenchant verwenden, da es eine robustere Lösung für diese Art von Problem ist. Sie können pyenchant here herunterladen. Hier ist ein Beispiel, wie Sie Ihre Ergebnisse erhalten würden, nachdem Sie es installiert haben:

>>> text = "IfI am inthat position, Idon't think I will." # note the lack of spaces 
>>> from enchant.checker import SpellChecker 
>>> checker = SpellChecker("en_US") 
>>> checker.set_text(text) 
>>> for error in checker: 
    for suggestion in error.suggest(): 
     if error.word.replace(' ', '') == suggestion.replace(' ', ''): # make sure the suggestion has exact same characters as error in the same order as error and without considering spaces 
      error.replace(suggestion) 
      break 
>>> checker.get_text() 
"If I am in that position, I don't think I will." # text is now fixed 
+1

Danke für den Vorschlag, hatte nicht daran gedacht, eine Rechtschreibprüfung zu verwenden. Lösung funktioniert gut, wenn/wenn Sie Pyenchant installiert bekommen. Ich hatte große Schwierigkeiten, die Abhängigkeiten von pyenchant zu installieren (es gibt kein "pip install pyenchant"). Mac-Binärdateien vor Ort erfordern Python 2.5 oder 2.6, der Python-Paket-Index bietet Binärdateien für Python 2.7, erfordert aber Homebrew Python. Der pyenchant-bidst-osx-sources-Tarball, der auf der Website zur Verfügung gestellt wird, hat ein Makefile, das sich wiederholt verschluckt. Die Installation von gettext und glib mit Homebrew, & libiconv & enchant von der Quelle beendet, dann pyenchant mit setup.py build/install. – charlesreid1

+0

@ charlesreid1 Wow. Es tut mir leid zu hören, dass die Mac-Binärdateien nicht auf dem neuesten Stand sind. Danke, dass du deinen Prozess hier notiert hast. Hoffentlich findet jemand anderes das nützlich. –