[PYTHON] IQ Bot Custom Logic: Korrektur gängiger Lesegewohnheiten an Daten

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.

Entsprechung zu dem Muster, das den Tag als B liest

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).

Entsprechung zu dem Muster, das den Tag als 0 (Null) liest

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.

Bewältigungsmethode (Cheet Sheet: Field Edition)

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"

Bewältigungsmethode (Cheet Sheet: Tischausgabe)

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)

Erklärung des Mechanismus

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.

Wechseln Sie zur Zusammenfassung

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

IQ Bot Custom Logic: Korrektur gängiger Lesegewohnheiten an Daten
IQ Bot Custom Logic Basic Key
IQ Bot Custom Logic: Festwertzuweisung
Zusammenfassung der benutzerdefinierten logikbezogenen Verarbeitung von IQ Bot
IQ Bot Custom Logic (Python): Optimieren Sie Ausschlüsse in Schleifen
IQ Bot Custom Logic (Python): Effizienter Ersetzungsprozess in einer Schleife
Benutzerdefinierte IQ Bot-Logik: Löschen Sie die letzten n Zeilen der Tabelle
Benutzerdefinierte IQ Bot-Logik: Geteilte Anwendung (Auf Tabelle anwenden, Fehlerkontrolle einschließen)