Lesen Sie das alte Gakushin DC-Antragsformular Word-Datei (.doc) von Python und versuchen Sie, es zu bedienen

Motivation

Ich habe von einem Universitätsangestellten gehört, dass es schwierig ist, das Kakenhi-Antragsformular zu überprüfen. .. Derzeit scheint er Rot eins nach dem anderen von Hand zu setzen.

Es wäre schön, ein automatisches Überprüfungswerkzeug zu haben. Ich hoffe, ich kann mit Python ein automatisches Überprüfungswerkzeug erstellen! Während ich darüber nachdenke, ist es eine schwere Aufgabe, sie sofort zu erstellen. Deshalb habe ich zuerst versucht, Word-Dateien aus Python zu lesen und zu schreiben. Als Beispiel gemäß dem Kakenhi-Antragsformular reichte der Autor im Juni 2011 Forschungsstipendiat der Science Promotion Association (Gakushin) DC2 ein Ich habe das Bewerbungsformular gelesen. Wenn Sie mit Gakushin nicht vertraut sind, erhalten Sie möglicherweise eine emotionale Reaktion, wenn Sie einen vertrauten Doktoranden fragen.

Wie lese ich eine Word-Datei aus Python?

Read from a word file in python

Es gibt hauptsächlich python-docx und docx2txt, die beide .docx sind. Es werden nur Dateien unterstützt. Wie später beschrieben wird, muss beim Lesen einer DOC-Datei diese von antiword in DOCX konvertiert werden. Da docx2txt Text aus Kopf-, Fuß- und Hyperlinks lesen kann, habe ich es diesmal hauptsächlich mit docx2txt versucht.

Umgebung

Installieren Sie python-docx

bash


pip install python-docx

Es scheint, dass python-docx nur bis zu Python 3.4 unterstützt, aber es funktioniert mit Python 3.7. Anaconda hat Python 3.4 nicht, also habe ich es bei 3.7 belassen.

Installieren Sie docx2txt

bash


pip install docx2txt

Antiword Installation

Wie ich später erläutern werde, war die Word-Datei, die ich als Beispiel lesen wollte, im DOC-Format anstelle von DOCX. Dateien im DOC-Format können mit python-docx nicht geöffnet werden. Ich habe das Gefühl, ich habe es verloren, es in Word zu öffnen und als .docx zu speichern, also habe ich versucht, es mit Antiword zu konvertieren.

Installation mit apt-get: fehlgeschlagen

Zusammenfassend konnte ich Antiword mit apt-get nicht auf einem Mac installieren. Ich dachte, dass Antiword apt-get und fink sein sollte. / yu-sa / items / 351969b281f3aea5e03d) wird eingefügt, und es wird gesagt, dass während der Installation von fink kein JDK vorhanden ist. Ich wurde zur Download-Seite übersprungen (natürlich hat die Installation von Flashplayer nicht geholfen).

bash


sudo apt-get antiword

Ausgabeergebnis


E: Invalid operation antiword

Mit Brew installieren: Erfolgreich

bash


brew install antiword

Ich habe mir hier angesehen und den Befehl Brew eingegeben, der erfolgreich installiert wurde.

bash


(base) akpro:~ kageazusa$ antiword
	Name: antiword
	Purpose: Display MS-Word files
	Author: (C) 1998-2005 Adri van Os
	Version: 0.37  (21 Oct 2005)
	Status: GNU General Public License
	Usage: antiword [switches] wordfile1 [wordfile2 ...]
	Switches: [-f|-t|-a papersize|-p papersize|-x dtd][-m mapping][-w #][-i #][-Ls]
		-f formatted text output
		-t text output (default)
		-a <paper size name> Adobe PDF output
		-p <paper size name> PostScript output
		   paper size like: a4, letter or legal
		-x <dtd> XML output
		   like: db (DocBook)
		-m <mapping> character mapping file
		-w <width> in characters of text output
		-i <level> image level (PostScript only)
		-L use landscape mode (PostScript only)
		-r Show removed text
		-s Show hidden (by Word) text

Es ist ein 2005er Tool!

Lese- / Schreibtest mit Python-Docx

Nachdem ich den Code in der zweiten Hälfte von hier kopiert hatte, funktionierte er und ich konnte eine Word-Datei erstellen und lesen. Es scheint kein Problem mit Python 3.7 zu geben. Als ich den Code im Kommentarbereich von hier kopierte und verschob, konnte "dox_simple_service" nicht gelesen werden. Ich vermute, es liegt wahrscheinlich an der Python-Version.

error


ModuleNotFoundError: No module named 'docx_simple_service'

Konvertieren Sie die DOC-Datei in eine DOCX-Datei mit Antiword und lesen Sie sie mit doc2txt

Ich werde endlich das Beispiel lesen.

Stichprobe

Verwenden Sie eine solche Anwendung. Es war eine Ära, in der Grenzen, die kürzlich verschwunden sind aktiv waren. Da es sich um eine DOC-Datei handelt, kann sie von Python nicht so gelesen werden, wie sie ist. Ich konnte die endgültige Version der Word-Datei nicht finden, daher werde ich eine Version verwenden, die etwas früher als die endgültige Version ist, bei der ich eine E-Mail gesendet und das Büro überprüft habe. スクリーンショット 2020-10-26 23.22.11.png

DOC-Datei lesen

Ich konnte es sofort mit der Funktion in der Antwort von [hier] lesen (https://stackoverflow.com/questions/51727237/reading-doc-file-in-python-using-antiword-in-windows-also-docx). Nur der angegebene Teil des Pfades wurde geringfügig geändert. Ich habe die DOC-Datei in eine DOCX-Datei mit Antiword konvertiert und gelesen und die gelesene DOCX-Datei sofort gelöscht.

python


import os, docx2txt

def get_doc_text(filepath, file):
    
    if file.endswith('.docx'):
       text = docx2txt.process(file)
       return text
    
    elif file.endswith('.doc'):
       # converting .doc to .docx
       doc_file = os.path.join(filepath, file)
       docx_name = file + 'x'
       docx_file = os.path.join(filepath, docx_name)
        
       if not os.path.exists(docx_file):
          os.system('antiword ' + doc_file + ' > ' + docx_file)
            
          with open(docx_file) as f:
             text = f.read()
          os.remove(docx_file) #docx_file was just to read, so deleting
        
       else:
          # already a file with same name as doc exists having docx extension, 
          # which means it is a different file, so we cant read it
          print('Info : file with same name of doc exists having docx extension, so we cant read it')
          text = ''
        
       return text

Ich konnte es lesen! スクリーンショット 2020-10-27 22.45.58.png

Versuchen Sie, den Inhalt jeder Unterüberschrift zu extrahieren

Ich möchte den Inhalt jeder Unterüberschrift mit dem von mir gelesenen Text extrahieren. In diesem Beispiel sind die Unterüberschriften in [] eingeschlossen. [Problem]

Textformatierung

Zeilenumbrüche usw. löschen

python


gakushin = get_doc_text('./sample', '110624GakushinDraftKAGE2.1.doc')
gakushin = gakushin.replace('\n', '').replace('|', '').replace('\u3000', '')

スクリーンショット 2020-10-28 19.57.37.png Es ist noch ein fortlaufender Speicherplatz vorhanden. Löschen Sie ihn daher, während Sie [hier] anzeigen (https://qiita.com/izso/items/7eafbdfb59ee3783e544).

python


import re

#Löschen Sie den durchgehenden Raum, um einen Raum mit halber Breite zu erstellen
gakushin = re.sub('[  ]+', ' ', gakushin)

Es gibt Orte, an denen ich Platz lassen möchte, z. B. zwischen et al. Und dem Jahr, also habe ich vorerst einen Raum mit halber Breite gelassen. Genau genommen ist es besser, alle Leerzeichen zu löschen und dann nur um et al. Oder & zu ersetzen. スクリーンショット 2020-10-28 20.06.55.png

Extraktion von Unterpositionen

Versuchen Sie, nach dem in [] enthaltenen Teil zu suchen. Ich bin eine schwache Person mit regulären Ausdrücken, also habe ich [hier] gesucht und darauf verwiesen (https://hodade.com/seiki/page.php?s_kakko) und es hat funktioniert.

python


re.findall('\【.+?\】', gakushin)

Ausgabeergebnis


['【Hintergrund】',
 '【Problem】',
 '[Lösungen, Forschungsziele, Forschungsmethoden, Merkmale und ursprüngliche Punkte]',
 '[Forschungsfortschritt 1]',
 '[Forschungsfortschritt 2]',
 '[Hintergrund zukünftiger Forschungspläne]',
 '[Zu lösende Probleme / Punkte]',
 '[Wie bist du auf die Idee gekommen]',
 '【2-1】',
 '【2-2】',
 '[Referenziert]',
 '[Keine mündliche Präsentation / Inspektion]',
 '[Posterpräsentation / keine Inspektion]',
 'Motivation zum Streben nach einer Forschungsstelle',
 '[Forscherbild anstreben]',
 '[Selbstvorteile usw.]',
 '[Besonders hervorragende akademische Leistungen und Auszeichnungen]',
 '[Charakteristische Aktivitäten außerhalb des Campus]']

Die Unterüberschriften wurden extrahiert!

Extraktion von Sätzen unter Unterüberschriften

Lassen Sie uns die Unterüberschriften in einer Variablen speichern und die Unterüberschriften selbst verwenden, um den Text "gakushin" aufzuteilen.

python


subhead = re.findall('\【.+?\】', gakushin)
text = gakushin
split_result = []

for i in range(len(subhead)):
    new_text = text.split(subhead[i])
    split_result.append(new_text[0])
    text = new_text[1]
    
#Nur der letzte[1]Einstellen
split_result.append(new_text[1])

スクリーンショット 2020-10-28 22.15.43.png Ich konnte den Text in Unterüberschriften unterteilen und auflisten. Lassen Sie uns die Anzahl der Elemente überprüfen.

python


print('Anzahl der Unterüberschriftenelemente', len(subhead))
print('Anzahl der Elemente im geteilten Satz', len(split_result))

Ausgabeergebnis


Anzahl der Unterpositionen 18
Anzahl der Elemente im geteilten Satz 19

Anzahl der Elemente in Unterüberschrift + 1 = Anzahl der Elemente in Sätzen geteilt durch Unterüberschrift, und die Berechnung scheint korrekt zu sein. Versuchen Sie, es im Pandas DataFrame so zu speichern, dass die Unterüberschrift und der Text darunter übereinstimmen. Das erste Element der Liste "split_result" wird verworfen.

python


import pandas as pd

df = pd.DataFrame([subhead, split_result[1:19]]).T
df.columns = ['subhead', 'text']

スクリーンショット 2020-10-28 22.22.46.png

Die Unterüberschriften und der Text darunter wurden zugeordnet. Zählen wir die Anzahl der Zeichen und fügen sie in den Datenrahmen ein.

python


df['length'] = df.text.apply(len)

スクリーンショット 2020-10-28 22.38.25.png Der Punkt [2-2] scheint besonders lang zu sein. Selbst wenn Sie dies alleine betrachten, ist nicht klar, was [2-2] darstellt. Es sieht aus wie ein Forschungsplan, aber der Grund, warum es keinen [1] gibt, ist unbekannt.

Zusammenfassung

Ich konnte die DOC-Datei aus Python lesen und den Text bearbeiten. Ich möchte in Zukunft verschiedene Dinge ausprobieren.

Referenz

Recommended Posts

Lesen Sie das alte Gakushin DC-Antragsformular Word-Datei (.doc) von Python und versuchen Sie, es zu bedienen
Python - Lesen Sie Daten aus einer numerischen Datendatei, um die verteilte, gemeinsam verteilte Matrix, Eigenwerte und Eigenvektoren zu finden
Lesen Sie die CSV-Datei mit Python und konvertieren Sie sie unverändert in DataFrame
[Python] Senden Sie das von der Webkamera aufgenommene Bild an den Server und speichern Sie es
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Python - Lesen Sie Daten aus einer numerischen Datendatei und suchen Sie die multiple Regressionslinie.
Fourier-Konvertierung der von Python gelesenen WAV-Datei, umgekehrte Konvertierung und erneutes Schreiben
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
Vorlage des Python-Skripts zum Lesen des Inhalts der Datei
[Python] Versuchen Sie, die coole Antwort auf das FizzBuzz-Problem zu lesen
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
Lesen Sie die CSV-Datei und zeigen Sie sie im Browser an
Lesen Sie die XML-Datei anhand des Python-Tutorials
Lesen Sie die json-Datei mit Python, formatieren Sie sie und geben Sie json aus
Versuchen Sie es mit GUI, PyQt in Python
So wechseln Sie die Konfigurationsdatei, die von Python gelesen werden soll
Versuchen Sie, eine Excel-Datei mit Python (Pandas / XlsxWriter) zu betreiben
[Python] Lesen Sie die CSV-Datei und zeigen Sie die Abbildung mit matplotlib an
Versuchen Sie, eine Excel-Datei mit Python (Pandas / XlsxWriter) zu betreiben
[Python] Ich habe das Spiel von pip installiert und versucht zu spielen
Versuchen Sie, die verstümmelten Zeichen im angehängten Dateinamen mit Python zu entschlüsseln
Verarbeiten Sie die mit Redshift entladene gzip-Datei mit Python of Lambda, gzipen Sie sie erneut und laden Sie sie in S3 hoch
Lesen Sie die Big-Endian-Binärdatei in Python und konvertieren Sie sie in ndarray
Lesen Sie die Datei in Python mit einem relativen Pfad aus dem Programm
Konvertieren Sie das Ergebnis von Python Optparse, um es zu diktieren und zu verwenden
Der Versuch, Segmentbäume Schritt für Schritt zu implementieren und zu verstehen (Python)
Betreiben Sie Firefox mit Selen aus Python und speichern Sie die Bildschirmaufnahme
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Python - Holen Sie sich in regelmäßigen Abständen die Bitcoin-Rate BTC / JPY von Bitflyer und speichern Sie sie in einer Datei
Versuchen Sie, Facebook mit Python zu betreiben
Übergeben Sie die ausgewählten Elemente in Tablacus Explorer von JScript an Python und benennen Sie sie alle gleichzeitig um
Lesen und verwenden Sie Python-Dateien aus Python
Lesen Sie die Daten des NFC-Lesegeräts, das mit Python an Raspberry Pi 3 angeschlossen ist, und senden Sie sie mit OSC an openFrameworks
Entfernen oder Abrufen von Arrays aus Fasta gemäß der ID-Listendatei
[Python Kivy] So erhalten Sie den Dateipfad durch Ziehen und Ablegen
Setzen Sie Cabocha 0.68 in Windows ein und versuchen Sie, die Abhängigkeit mit Python zu analysieren
Versuchen Sie es mit Pythons Webframework Django (1) - Von der Installation bis zum Serverstart
Der Dateiname war in Python schlecht und ich war süchtig nach Import
Lesen Sie die Datei mit Python und löschen Sie die Zeilenumbrüche [Hinweise zum Lesen der Datei]
Verwenden Sie Ruby und Python, um die Wahrscheinlichkeit zu ermitteln, dass eine Karte mit einer natürlichen Zahl von 1 bis 100 ein Vielfaches von 3 und kein Vielfaches von 5 ist.
Von Python bis zur Verwendung von MeCab (und CaboCha)
Lesen wir die RINEX-Datei mit Python ①
Lesen Sie die Datei Zeile für Zeile mit Python
Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
Versuchen Sie, Excel mit Python (Xlwings) zu betreiben.
So bedienen Sie Linux von der Konsole aus
Lesen Sie Python csv und exportieren Sie es nach txt
Python Amateur versucht die Liste zusammenzufassen ①
[Python] Lesen Sie die HTML-Datei und üben Sie das Scraping
[Python] Lesen Sie die angegebene Zeile in der Datei
Verschiedene Möglichkeiten, die letzte Zeile einer CSV-Datei in Python zu lesen
Versuchen Sie, das Programm "FORTRAN77 Numerical Computing Programming" auf C und Python zu portieren (Teil 1).
[Einführung in Pandas] Lesen Sie eine CSV-Datei ohne Spaltennamen und geben Sie ihr einen Spaltennamen
Organisieren Sie den Ablauf von der Erteilung von Berechtigungen an Python-Benutzer für Migrationen und Migrationen
[Python] Kombinieren von Listen mit Zahlen zu Zeichenfolgen und Schreiben in eine Ausgabedatei
Versuchen Sie, das Programm "FORTRAN77 Numerical Computing Programming" auf C und Python zu portieren (Teil 3).
Versuchen Sie, das Programm "FORTRAN77 Numerical Computing Programming" auf C und Python zu portieren (Teil 2).
So lesen Sie Seriennummerndateien in einer Schleife, verarbeiten sie und zeichnen sie grafisch auf