Beim Lesen eines Datums mit OCR gibt es ein relativ häufiges Muster der OCR-Lesegewohnheiten.
Der "Tag" Teil von "JJJJ MM Monat TT Tag" ist Das Muster "B" (Alphabet Biene) und Es ist ein Muster, das "0" (Null) ist.
Ich habe nicht viele Fälle gesehen, in denen "Jahr" und "Monat" unterschiedlich gelesen werden. Aus irgendeinem Grund ist nur "Tag" B oder 0 in verschiedenen Formenmustern.
IQ Bot kann solche OCR-Lesegewohnheiten korrigieren und sie schön machen. Hier erfahren Sie, wie es geht.
In diesem Fall kann der in [hier] eingeführte einfache Ersetzungsprozess (https://qiita.com/IQBotter/items/b1e7a75439fede2171e6) verwendet werden.
Entsprechung zu dem Muster, das den Tag des Datumselements als B liest (im Fall des Feldelements)
field_value = field_value.replace("B","Tag")
Es ist unwahrscheinlich, dass "B" in den richtigen Antwortdaten im Datum enthalten ist, daher wäre es in Ordnung, es einfach zu ersetzen.
Für Tabellenelemente klicken Sie hier (https://qiita.com/IQBotter/items/b1e7a75439fede2171e6#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E9 % A0% 85% E7% 9B% AE% E3% 81% AB% E5% AF% BE% E3% 81% 99% E3% 82% 8B% E7% BD% AE% E6% 8F% 9B% E5% 87 Siehe% A6% E7% 90% 86).
In diesem Fall kann es nicht einfach ersetzt werden. Dies liegt daran, dass 0 möglicherweise die richtige Antwort ist, z. B. "10.", "20.", "30." usw.
Wenn Sie zuerst die Antwort sagen, kann der folgende Code verwendet werden, um das Problem des Lesens von "Tag" als Null zu lösen.
Entsprechung zu dem Muster, das den Tag des Datumselements als Null liest (im Fall eines Feldelements)
if(field_value[-1:]=="0"):
field_value = field_value[:-1]
field_value = field_value + "Tag"
Für Tabellen den magischen Code (hier % E9% A0% 85% E7% 9B% AE% E3% 81% AE% E3% 82% AB% E3% 82% B9% E3% 82% BF% E3% 83% A0% E3% 83% AD% E3 % 82% B8% E3% 83% 83% E3% 82% AF% E3% 81% AF% E3% 81% A9% E3% 81% 86% E6% 9B% B8% E3% 81% 8F) In der Zwischenzeit können Sie damit umgehen, indem Sie den folgenden Code schreiben.
Entsprechung zu dem Muster, das den Tag des Datumselements als Null liest (im Fall eines Tabellenelements)
#Eine Funktion, die den Tag ersetzt, wenn das Datumsende Null ist
def dayreplace(ymd):
x = str(ymd)
if(x[-1:] == "0"):
x = x[:-1]
x = x + "Tag"
return x
#Ersetzen der Tabellenzeichenfolge
df['Der Spaltenname, für den Sie das Datum korrigieren möchten'] = df['Der Spaltenname, für den Sie das Datum korrigieren möchten'].apply(dayreplace)
Die Feld- und Tabelleneditionen haben drei Gemeinsamkeiten.
(1) if-Anweisung (bedingte Verzweigung) (2) Slice (3) + Operator zum Verketten von Zeichenfolgen
Darüber hinaus verwendet die Tabellenausgabe einen Mechanismus, der als Funktion bezeichnet wird.
Ich werde jede leicht verständliche Erklärung verknüpfen.
-① if-Anweisung (= bedingte Verzweigung) Der obige Code ist die Bedingung, die bestimmt, ob die erste Zeile verarbeitet wird, und die Verarbeitung, die ausgeführt wird, wenn die zweite und dritte Zeile die Bedingungen erfüllen. Zur Erläuterung der if-Anweisung war der Artikel hier leicht zu verstehen.
-② Scheibe Der Feldwert [-1:] und der Feldwert [-1:] in der ersten Zeile des obigen Codes verwenden einen Mechanismus namens Slicing. Das Schneiden ist ein Vorgang wie das Extrahieren der Nummer aus der Nummer einer Zeichenfolge. Die Erklärung zum Schneiden war im Artikel hier leicht zu verstehen.
-③ + Operator zum Verketten von Zeichenfolgen Ist der Code in der dritten Zeile auf den ersten Blick eine Ergänzung? Sie könnten denken, aber es ist nur eine Zeichenfolge und eine Zeichenfolge angehängt. Es reicht zu verstehen, dass Sie das können, aber als Referenz werde ich einen Link [hier] einfügen (https://www.javadrive.jp/python/string/index6.html).
--Tabelle: Funktion In Bezug auf die Funktion war die Erklärung von hier leicht zu verstehen.
Auf der Grundlage des oben Gesagten werde ich selbst einen Kommentar zum Code der Feldausgabe hinzufügen.
Entsprechung zu dem Muster, das den Tag des Datumselements als Null liest (im Fall eines Feldelements)
if(field_value[-1:]=="0"): #field_Das letzte Wertzeichen ist"0"Führen Sie dann die folgende Verarbeitung aus
field_value = field_value[:-1] #field_Schließen Sie das letzte Zeichen vom Wert aus. Beispiel: Ändern Sie JJJJ Jahr MM Monat TT0 in JJJJ Jahr MM Monat TT
field_value = field_value + "Tag" #↑ verarbeitetes Feld_schätzen,"Tag"Zusammenkleben
Um es sehr detailliert auszudrücken, die Erklärung der Verarbeitung in der zweiten Zeile ist etwas gebrochen.
Um genau zu sein, kann es notwendig sein zu sagen: "Beginnen Sie mit dem ersten Zeichen von" field_value ", nehmen Sie die Zeichenfolge heraus, die das letzte Zeichen nicht enthält, und weisen Sie sie" field_value "zu", aber es ist schwer zu verstehen. Infolgedessen ist es jedoch dasselbe, also habe ich die Erklärung desjenigen übernommen, der es gebrochen hat.
Bei der Konvertierung von Papierformularen in Daten denke ich, dass das Datum für fast alle Formulare ein unverzichtbarer Bestandteil sein wird. Bitte nutzen Sie den hier eingeführten Code!
Recommended Posts