Hallo, ich habe in letzter Zeit dank Corona eine Pause von der Schule gemacht und meine freien Tage endlos verbracht, also töte ich meine Zeit, indem ich jeden Tag mit verschiedenen Technologien spiele. Um ehrlich zu sein, macht es viel Spaß. Übrigens fand ich damals etwas, als ich Discord-Bots machte, 2048 implementierte, in esoterischen Sprachen spielte und mit morphologischen Analysen spielte. Ja, derzeit unter Google Drive von der Netorabo-Redaktion /25/news026.html) Dies ist ein ** öffentlicher Kommentar ** der ** hochgelobten Verordnung über Gegenmaßnahmen gegen die Spielsucht der Präfektur Kagawa **. Als ich das fand, dachte ich.
** Es sieht so aus, als würde es Spaß machen, damit zu spielen **.
Da die vom Scanner gelesene Person in PDF-Daten konvertiert wird, kann sie nicht so behandelt werden, wie sie ist. Daher ist es erforderlich, sie in Textdaten zu konvertieren. Die Konvertierung in Textdaten scheint jedoch bereits Spaß zu machen. Ich habe die Bildverarbeitungstechnologie hier noch nicht berührt, daher scheint es, dass neues Wissen erweitert werden kann. Darüber hinaus scheint es, wie ich gehört habe, einige unnatürliche Verzerrungen in den Daten zu geben. Es macht absolut Spaß, dies zu analysieren. Deshalb habe ich mich entschieden zu spielen.
Verwenden Sie zunächst pdf2image, um die PDF-Datei in ein Bild zu konvertieren. Es ist ein Paket des Codes, der in fast [diesem Artikel] geschrieben wurde (https://qiita.com/kikuyan8540/items/35751c573de014df205b). Es tut mir leid, ich habe nicht das Gefühl, dass ich besseren Code schreiben kann ...
Bildgebung.py
import pathlib
import pdf2image
pdf_files = pathlib.Path('PDF').glob('*.pdf')
for pdf_file in pdf_files:
base = pdf_file.stem
img_dir = pathlib.Path(f'Bild/{base}')
img_dir.mkdir()
images = pdf2image.convert_from_path(pdf_file, grayscale=True, dpi=200)
for index, image in enumerate(images):
image.save(img_dir/pathlib.Path(f'{index + 1}.png'), 'png')
print(base) #Zur Überprüfung des Fortschritts
Die Ausführung wird einige Zeit dauern. Warten Sie daher bitte geduldig.
Wenn Sie warten, wird es so sein. Nun, wenn ich sie so nebeneinander lege, habe ich das Gefühl, Pub-Reis in der Hand zu haben.
Verwenden Sie Tessertact_OCR. Ich verehre am Computer mit der Erwartung, dass er nicht gut erkannt wird. Es ist wichtig, sich so tief wie möglich zu verbeugen. Es wäre schön, ein Angebot zu haben. Wenn Sie das Gefühl haben, dass Ihre Anbetung verstanden wird, versuchen wir, die 14. (entsprechend beschlossene) Genehmigung am 23. Januar anzuerkennen.
C:\Users\usr\Documents\Kagawa>tesseract .\Bild\Zustimmen 0123\14.png .\Zeichenerkennung\test -l jpn
Tesseract Open Source OCR Engine v5.0.0-alpha.20200328 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 344
Detected 201 diacritics
Es sieht so aus, als gäbe es viele Probleme, aber es liegt wahrscheinlich an meinem Verstand, an meinem Verstand. Vergleichen wir nun die Ein- und Ausgabe. Klicken Sie hier für das eingegebene Bild Hier ist der Ausgabetext.
test.txt
desknefs NEO -Seite 171
Parlamentarisches Sekretariat(glkeldprefr kagawa lg jp)
-------- "
―――(Wird weggelassen, wenn Leerzeilen fortgesetzt werden)―――
Bürger: "Stellungnahme / Anfrage der Präfektur Wagawa"<hp- adm@pref. kagawa.Idg.]p>- -
Ziel: gikaiGpref.kagawa.Ig.jp
CC :- "
Gegenstand:Posting von der Seite Einfrieren / Anfrage
Weiße Zeit:23. Januar 2020(Buch) 15:16
―――(Wird weggelassen, wenn Leerzeilen fortgesetzt werden)―――
[Inhalt von Meinungen und Anfragen]
[Meinungsfeld zur Homepage der Präfekturversammlung]- 」
Die Präfekturversammlung wird Sie weiterhin auf leicht verständliche Weise über die Situation der Versammlung informieren.
Ich werde. Bitte teilen Sie uns Ihre Meinungen und Eindrücke vom Besuch der Kongress-Website mit.
Nein. Wir werden Ihre Meinungen als wertvolle Stimmen von allen bezeichnen.
Ich werde das machen.
bitte beachten Sie$--- ---.
@Wir können keine Petitionen per E-Mail oder E-Mail über einzelne Mitglieder des Landtages annehmen.
【(Wohnsitz] ---
【E-Maill . ,
[Betreff] Meinungen zu öffentlichen Kommentaren
[Meinungen / Eindrücke]
Telefonnummer der Altersachse
Ich stimme dem Artikel über Gegenmaßnahmen gegen die Spielsucht zu.
Ich mache mir Sorgen, dass überall Kinder Spiele und Smartphones spielen
[ADDR]192. 168.7. 21
[DATE]2020/01/23 15:16: 42
[USERAGENT]Mozilla/5.0 (Windows NT 10.0: Win64: x64) AppleWeb
Kit/537.36 (KHTML, like Gecko) Chrome/70.0.3538. 102 faP/53 oder 3
6 TOg9. 18362
Äh ~~~~~~~ Es gibt einige sehr instabile Orte, aber ich kann das Datum, an dem ich mit dieser Zeit spielen möchte, problemlos ermitteln, daher bin ich vorerst in Ordnung.
PyOCR ist an der Reihe.
Zeichen, die dem regulären Ausdruck von / ^ ([^ 0-9 \ n] * \ d) {12} [^ 0-9 \ n] * $ /
entsprechen (eine Zeile mit 12 "nur" Zahlen) Extrahieren Sie die Spalte. Die Zahlen scheinen ziemlich genau erkannt zu werden, so dass Sie sie nicht so sehr vermissen werden.
Das erfasste Datum wird in den vier Textdateien "Zustimmen", "Nicht zustimmen", "Unternehmer" und "Vorschlag" gespeichert.
Dieser Code, der basierend auf diesem Artikel geschrieben wurde, wurde mit mysteriöser Kraft geschrieben, um ein Wunder zu bewirken und die Spezifikationen des Computers zu vervierfachen. Glaube und tue.
OCR.py
from PIL import Image
import sys
import pyocr
import pyocr.builders
from pathlib import Path
import re
count = 0
tool = pyocr.get_available_tools()[0]
folders = list(Path("Bild").glob("*")) #Bildフォルダのパスをすべて取得
agr, opp, bsp, rec = open("Zustimmen.txt", "w"), open("Opposition.txt", "w"), open("Geschäftsperson.txt", "w"), open("Empfehlung.txt", "w") #Initialisieren Sie die Textdatei einmal
agr,opp,bsp,rec.close()
dic = {"Loben": "Loben成.txt", "Anti": "Anti対.txt", "Ding": "Ding業者.txt", "Vorschlag": "Vorschlag言.txt"} #Switch Ein Wörterbuch zum Schreiben von Textsachen
for fol in folders:
with open(dic[str(fol)[3]],"a") as fil: #Beurteilen Sie die zu öffnende Datei mit dem "4. Zeichen" des Ordnerpfads
for path in (Path(fol).glob("*")):
count += 1
text = tool.image_to_string(
Image.open(path),
lang="jpn",
builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
match = re.search(r'^([^0-9\n]*\d){12}[^0-9\n]*$', text, re.MULTILINE)
if match != None: #Bei Dokumenten, die mehrere Seiten umfassen, ist möglicherweise nirgendwo auf der Seite ein Datum angegeben.
match = match.group()
fil.write(match + "\n")
print(count) #Zur Überprüfung des Fortschritts
Mir ist übrigens kein Wunder passiert, die Ausführungszeit ist zu lang Vielleicht gibt es eine Möglichkeit, dies etwas früher zu beenden
Als Ergebnis der Ausführung dieses Programms sieht beispielsweise der Inhalt von "Agree.txt" so aus.
Zustimmen.txt
Datum (und Uhrzeit:23. Januar 2020(Holz) 11:39 ー ー
Datum (und Uhrzeit:23. Januar 2020(Holz) 11:49 ー ー
-Zeit:23. Januar 2020(Buch) 11:50 .
Datum (und Uhrzeit:23. Januar 2020(Holz) 11:55 ---
Datum (und Uhrzeit:23. Januar 2020(Holz) 13:49
Datum (und Uhrzeit:23. Januar 2020(Buch) 15:16 ---.
.Datum (und Uhrzeit:23. Januar 2020(Holz) 15:31
Datum (und Uhrzeit:23. Januar 2020(Holz) 15:51 .--- ---.
Datum (und Uhrzeit:23. Januar 2020(Holz) 15:58 .
Datum (und Uhrzeit:23. Januar 2020(Holz) 17:55 . ---- ---.
Datum (und Uhrzeit:23. Januar 2020(Holz) 20:23 .
Datum (und Uhrzeit:23. Januar 2020(Holz) 12:22
Datum (und Uhrzeit:23. Januar 2020(Holz) 20:31 -"・
Datum (und Uhrzeit:23. Januar 2020(Holz) 13:10 ---.
Datum (und Uhrzeit:23. Januar 2020(Holz) 16:27 ] 」
Datum (und Uhrzeit:23. Januar 2020(Holz) 17:03
Datum (und Uhrzeit:23. Januar 2020(Holz) 18:09 ]--- ---.
Datum (und Uhrzeit:23. Januar 2020(Holz) 21:41
22812 050 Präsentation zurücksenden IO008 "1-
Datum (und Uhrzeit:24. Januar 2020(Geld) 08:49 ー ー
.Datum (und Uhrzeit:24. Januar 2020(Geld) 12:40 .
Datum (und Uhrzeit:24. Januar 2020(Geld) 13:28
Datum (und Uhrzeit:24. Januar 2020(Geld) 13:31
Datum (und Uhrzeit:24. Januar 2020(Geld) 13:34 -
Datum (und Uhrzeit:24. Januar 2020(Geld) 13:35
.Datum (und Uhrzeit:24. Januar 2020(Geld) 14:01 ]- -
.Datum (und Uhrzeit:24. Januar 2020(Geld) 15:08 ー ー.
.. Datum (und Uhrzeit: "24. Januar 2020(Geld) 08:49 .--- ---.
Datum (und Uhrzeit:24. Januar 2020(Geld) 15:33 ー ー
Datum (und Uhrzeit:24. Januar 2020(Geld) 15:34
Datum (und Uhrzeit:24. Januar 2020(Geld) 15:37 ・
Datum (und Uhrzeit:24. Januar 2020(Geld) 15:44 ・
Datum (und Uhrzeit:24. Januar 2020(Geld) 16:03 」 - -
Datum (und Uhrzeit:24. Januar 2020(Geld) 16:13 ー ー
-Datum (und Uhrzeit:24. Januar 2020(Geld) 16:14
Datum (und Uhrzeit:24. Januar 2020(Geld) 16:16 -"-
Datum (und Uhrzeit:24. Januar 2020(Geld) 16:39 -
-.Damals:24. Januar 2020(Geld) 08:50 ー ー
Datum (und Uhrzeit:24. Januar 2020(Geld) 16:47 -
(Folgendes wird weggelassen)
Es scheint, dass einige "Dinge, die keine Daten sind" eingemischt sind, aber es scheint, dass sie im Allgemeinen funktionieren. Übrigens gab es im Ganzen nur wenige "Nicht-Daten", also habe ich sie manuell entfernt, was ein Moment war.
Wenn dies so bleibt, wird das Rauschen schrecklich sein, also normalisieren Sie die Daten. Vereinfachen Sie einfach mit "einer Kombination aller Zahlen im Datum". Die Anzahl der Zeichen sollte auf 12 festgelegt sein, damit Sie sich damit normalisieren können.
Normalisierung.py
import re
for name in ["Zustimmen","Opposition","Geschäftsperson","Empfehlung"]:
with open(name + ".txt") as fil:
contents = fil.read()
match = re.findall(r'([0-9]|\n)', contents, re.MULTILINE)
with open(name + "_Normalisierung.txt","w") as fil:
fil.write("".join(match))
Zustimmen_Normalisierung.txt
202001231139
202001231149
202001231150
202001231155
202001231349
202001231516
202001231531
202001231551
202001231558
202001231755
202001232023
202001231222
202001232031
202001231310
(Folgendes wird weggelassen)
Es ist ein gutes Gefühl.
Zeichnen Sie abschließend ein Streudiagramm. Die Rekrutierungsfrist für Pub-Reis beträgt ** 1/23 bis 2/6 ** (ist das nicht kurz?). Zeichnen wir also vorerst die ** Verteilung der Stimmen für ** in diesem Zeitraum. Die beste Antwort finden Sie in diese Frage auf teratile.
Graphgenerierung.py
import matplotlib.pyplot as plt
from matplotlib import dates as mdates
from datetime import datetime as dt
date = []
time = []
x = []
y = []
with open("Zustimmen_Normalisierung.txt", "r") as fil:
for line in fil:
date.append(line[4:10])
time.append(line[10:12])
for d in date:
y.append(dt.strptime(d, "%m%d%H"))
for d in time:
x.append(dt.strptime(d, "%M"))
ax = plt.subplot()
ax.scatter(x, y, alpha=0.1,c='red',s=40)
ax.set_xlim([dt.strptime('00', '%M'),
dt.strptime('59', '%M')])
ax.set_ylim([dt.strptime('01/23', '%m/%d'), dt.strptime('02/06', '%m/%d')])
plt.xticks(rotation=90)
plt.savefig("Graph.png ")
Hier ist das Ausgabediagramm [^ 1]. ** Offensichtlich passiert etwas. ** ** ** Wie in den Anmerkungen erwähnt, ist in diesem Diagramm "Monat und Zeit" für vertikale Linien und "Minuten" für horizontale Linien eingraviert. Schließlich sind diese beiden deutlich dunklen Linien wahrscheinlich auf das Versenden von Pub-Reis mit einer so hohen Geschwindigkeit zurückzuführen, dass er selbst in Schritten von "Minuten" kontinuierlich sichtbar ist. Nun, es ist interessant.
Es war viel Spaß. Ich kündige, weil ich heute müde bin, aber Pub-Reis ist immer noch für die Öffentlichkeit zugänglich. Ich denke, Sie sollten damit spielen, wenn Sie Zeit haben.
[^ 1]: Ich habe die Beschriftung nicht mehr festgelegt, weil ich müde bin, aber um es zu erklären, steht die x-Achse für "Minuten" (0-59) und die y-Achse für "Monate und Tage" (1) in Schritten von 1 Stunde. Es scheint / 23/00 bis 2/6/23 zu repräsentieren).
Recommended Posts