2016-07-23 3 views
0

Text Mining Ausgabe: aus dem Abschnitt Titel, Bildunterschriften und anderswo in vielen PDF-Dateien erhalte ich Sätze wie:perl regex zu entfernen, um Speicherplatz von Text OCR importiert von pdftotext

"T h e n as data we give the t r a j e c t o r i e s o f the particles between ..." 

ich denke, dies eine OCR ist Problem mit pdftotext.

I kann Leerzeichen in gappy Text entfernen nur mit einer verketteten regexp Sequenz, die ersten Leer erhöht, aber dies beruht auf Wortgrenzen im ursprünglichen OCR Text wobei zumindest zweizeilig. Hier ist ein einfacher Test:

$ perl -e '$t="The \ \ \ \ t h i n g w r o n g h e r e is we have a gap s."; print "$t\n"; 
$t=~s/(\s{2,})/$1 /g; print "$t\n"; 
$t=~s/(\w)\s?/$1/g;  print "$t\n"; 
$t=~s/\s+/ /g;   print "$t\n";' 

The  t h i n g w r o n g  h e r e is we have a gap s. 
The   t h i n g  w r o n g  h e r e  is we have  a gap s. 
The   t h i n g  w r o n g  h e r e  is we have  a gap  s. 
The   thing wrong here is we have  a gap  s. 
The thing wrong here is we have a gap s. 

der Endsatz Zeitraum "Lücke s." ist absichtlich, sollte es nicht schließen.

Frage 1. Gibt es eine elegantere Reihe von Regex's, um dies zu tun?

Frage 2. Was kann man mit dem OCR Text Dump machen, der nur einen Zeilenabstand hat? Ich nehme an, dass man das nur allgemein lösen kann, um den Text des Formulars zu bereinigen: "Als Daten geben wir die Trajektorien der Partikel zwischen ..." , wenn die Wortgrenzen nicht klar sind, mit einem Hochleistungsmodul, das nach Wörterbuch sucht Wörter in einer Folge von einzelnen Buchstaben. Gibt es ein solches Modul? (Ich habe gesucht, aber bis jetzt noch keinen gefunden.)

+0

Sie versuchen, natürliche Sprache mit Regexes zu manipulieren. Im besten Fall schwierig und in dem Raum, in dem Sie arbeiten, wahrscheinlich unmöglich. Mit Vorsicht vorgehen, hier gibt es Drachen ... –

+0

http://StackOverflow.com/Questions/1136990/How-Can-I-Extract-text-from-a-pdf-file-in-perl – xxfelixxx

+0

http: // search.cpan.org/~cdolan/CAM-PDF-1.60/bin/getpdftext.pl – xxfelixxx

Antwort

0

Für das erste Problem (das von zu vielen Räumen), können Sie es leicht mit s/\s+/ /g lösen. Was das zweite Problem anbelangt, bin ich unsicher, ob es eine solche Bibliothek gibt.

0

Antwort 1:

  • Alle für Einzelplatzproblem Regex-basierte Lösung werden Sie nicht gute Lösung geben.

Antwort 2:

  • Für Thema wie, - "T Henne als Daten, die wir die trajectoriesof die Partikel zwischen geben"

  • Zuerst können Sie alle Räume von Satz entfernen und Dann benutze - Word Segmentation Solution von Norvig Arbeit.

Beispiel:

from __future__ import division 
from collections import Counter 
import re, nltk 

WORDS = nltk.corpus.abc.words() 
COUNTS = Counter(WORDS) 

def pdist(counter): 
    "Make a probability distribution, given evidence from a Counter." 
    N = sum(counter.values()) 
    return lambda x: counter[x]/N 

P = pdist(COUNTS) 

def Pwords(words): 
    "Probability of words, assuming each word is independent of others." 
    return product(P(w) for w in words) 

def product(nums): 
    "Multiply the numbers together. (Like `sum`, but with multiplication.)" 
    result = 1 
    for x in nums: 
     result *= x 
    return result 

def memo(f): 
    "Memoize function f, whose args must all be hashable." 
    cache = {} 
    def fmemo(*args): 
     if args not in cache: 
      cache[args] = f(*args) 
     return cache[args] 
    fmemo.cache = cache 
    return fmemo 

def splits(text, start=0, L=20): 
    "Return a list of all (first, rest) pairs; start <= len(first) <= L." 
    return [(text[:i], text[i:]) 
      for i in range(start, min(len(text), L)+1)] 

@memo 
def segment(text): 
    "Return a list of words that is the most probable segmentation of text." 
    if not text: 
     return [] 
    else: 
     candidates = ([first] + segment(rest) 
         for (first, rest) in splits(text, 1)) 
     return max(candidates, key=Pwords) 

text = "T h e n as data we give the t r a j e c t o r i e s o f the particles between" 
text = text.replace(" ", "") 
print segment(text) 
# ['Then', 'as', 'data', 'we', 'give', 'the', 'trajectories', 'of', 'the', 'particles', 'between'] 

=> Best Lösung zu finden, warum Sie Räume in pdftotext Modul bekommen. Wenn in pdftotext ein Problem auftritt, das Sie nicht lösen können, versuchen Sie, andere OCR-Bibliotheken zu untersuchen.

Verwandte Themen