Analyse der Qualität der Schulungsunterlagen oder wie es uns nicht gelungen ist

Bild

Guten tag

Heute erzähle ich Ihnen von Versuchen, die Analyse von Schulungsunterlagen, den Kampf um die Qualität dieser Dokumente und die Frustration, die wir erlebt haben, zu meistern. "Wir" sind ein Paar Studenten der MSTU. N. E. Bauman. Wenn Sie interessiert sind, begrüßen Sie zur Katze!

Herausforderung


Wir wollten die Qualität der Schulungsunterlagen (Richtlinien, Lehrbücher usw.) anhand statistischer Indikatoren bewerten. Es gab viele solcher Indikatoren, hier einige davon: die Abweichung der Anzahl der Kapitel vom „Ideal“ (gleich fünf), die durchschnittliche Anzahl der Zeichen pro Seite, die durchschnittliche Anzahl der Schemata pro Seite usw. in der Liste. Nicht so schwer, oder? Dies war jedoch nur der Anfang, da wir im Erfolgsfall auf die Konstruktion von Ontologie und semantischer Analyse warteten.

Tools und Quelldaten


Das Problem lag im Quellmaterial und es handelte sich um alle Arten von Handbüchern / Lehrbüchern in PDF. Vielmehr lag das Problem nicht einmal bei den Materialien selbst, sondern bei PDF und der Qualität der Konvertierung.
Um mit PDF zu arbeiten, wurde beschlossen, Python und eine modische Jugendbibliothek zu verwenden, für deren Rolle pdfminer.six ausgewählt wurde .

Die Geschichte


Im Allgemeinen haben wir zuerst verschiedene Bibliotheken für Python ausprobiert, aber alle waren mit dem kyrillischen Alphabet nicht sehr vertraut, und unsere Literatur ist in russischer Sprache verfasst. Darüber hinaus konnten die einfachsten Bibliotheken nur Text extrahieren, was uns nicht ausreichte. Nachdem wir uns für pdfminer.six entschieden hatten, begannen wir Prototypen zu erstellen, zu experimentieren und Spaß zu haben. Zum Glück hatten wir genug, um die Beispiele aus der Dokumentation zu starten.

Wir haben unsere PDF-Dokumente mit Texten, Bildern, Tabellen und mehr erstellt. Bei uns hat alles geklappt, wir konnten einfach jedes Element aus unserem Dokument ziehen.

So sieht die Dokumentseite aus unserer Sicht aus:

Bild

Ich werde ein kleines Beispiel für die Interaktion mit dem Dokument geben: den Text des Dokuments abrufen.

file = open(path, 'rb')
parser = PDFParser(file)
document = PDFDocument(parser)
output = StringIO()
manager = PDFResourceManager()
converter = TextConverter(manager, output, laparams=LAParams())
interpreter = PDFPageInterpreter(manager, converter)
    for page in PDFPage.get_pages(file):
        interpreter.process_page(page)
converter.close()
text = output.getvalue()
output.close()

Wie Sie sehen, ist das Abrufen von Text aus einem Dokument ziemlich einfach. Jede Interaktion wird gemäß dem folgenden Schema ausgeführt

Bild

Warum hat es nicht geklappt?


Alle Experimente waren erfolgreich und in den Test-PDFs war alles in Ordnung. Wie sich herausstellte, ist es eine triviale Aufgabe, alles zu zerbrechen, und die Idee wurde in die Realität umgesetzt.
Nach den Experimenten haben wir einige richtige Lehrbücher genommen und festgestellt, dass alles schief gehen kann.

Als erstes ist uns aufgefallen, dass die Anzahl der vom Programm gezählten Bilder nicht der Realität entspricht und Teile des Textes einfach verloren gehen.

Es stellte sich heraus, dass einige (manchmal sogar viele) Teile des Textes im Dokument nicht in Textform präsentiert wurden und es nicht bekannt ist, wie es passiert ist. Diese Tatsache hat die Analyse der Häufigkeitsverteilung von Zeichen / Wörtern / Phrasen, der Semantik und in der Tat jeder anderen Art von Textanalyse sofort zunichte gemacht.

Es ist möglich, dass bei der Konvertierung oder Erstellung dieser Dokumente etwas Unerwartetes passiert ist, und es ist möglich, dass niemand diese Dokumente "korrekt" erstellen musste. Leider gab es eine Mehrheit solcher Materialien, was zu einer Enttäuschung bei der Idee einer solchen Analyse führte.

Literatur


Der Dokumentationsabschnitt aus dem pdfminer.six-Repository wurde zum Schreiben des Artikels und als Referenz verwendet.

Jetzt auch beliebt: