[PYTHON] Logique personnalisée IQ Bot: correction des habitudes de lecture courantes sur les dates

Il existe un modèle d'habitude de lecture OCR relativement courant lors de la lecture d'une date avec OCR.

La partie "jour" de "AAAA MM mois JJ jour" est Le motif qui est "B" (abeille alphabet) et C'est un modèle qui vaut "0" (zéro).

Je n'ai pas vu beaucoup de cas où «année» et «mois» sont lus différemment. Pour une raison quelconque, seul «jour» est B ou 0 dans divers modèles de formes.

IQ Bot peut corriger ces habitudes de lecture OCR et les rendre belles, alors voici comment procéder.

Correspondance avec le modèle qui lit le jour comme B

Dans ce cas, le processus de remplacement simple introduit dans here peut être utilisé.

Correspondance avec le modèle qui lit le jour de l'élément de date comme B (dans le cas de l'élément de champ)


field_value = field_value.replace("B","journée")

Il est peu probable que "B" soit inclus dans les données de réponse correctes dans l'élément de date, il serait donc normal de simplement le remplacer.

Pour les articles de table, cliquez ici (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 Voir% A6% E7% 90% 86).

Correspondance avec le modèle qui lit le jour comme 0 (zéro)

Dans ce cas, il ne peut pas être simplement remplacé. Cela est dû au fait que 0 peut être la bonne réponse, comme "10e", "20e", "30e", etc.

Méthode d'adaptation (fiche technique: édition de terrain)

Si vous dites la réponse en premier, le code suivant peut être utilisé pour résoudre le problème de lire «jour» comme zéro.

Correspondance avec le modèle qui lit le jour de l'élément de date comme zéro (dans le cas de l'élément de champ)


if(field_value[-1:]=="0"):
    field_value = field_value[:-1]
    field_value = field_value + "journée"

Méthode d'adaptation (fiche technique: édition de table)

Pour les tableaux, le code magique ([ici](https://qiita.com/IQBotter/items/67694b1b0d1376ede7e7#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB] % 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) En attendant, vous pouvez le gérer en écrivant le code suivant.

Correspondance avec le modèle qui lit le jour de l'élément de date comme zéro (dans le cas de l'élément de table)



#Une fonction qui remplace le jour si la fin de la date est zéro
def dayreplace(ymd):
	x = str(ymd)
	if(x[-1:] == "0"):
		x = x[:-1]
		x = x + "journée"
	return x

#Remplacement de la chaîne de table
df['Le nom de la colonne pour laquelle vous souhaitez corriger la date'] = df['Le nom de la colonne pour laquelle vous souhaitez corriger la date'].apply(dayreplace)

Explication du mécanisme

Il y a trois points communs aux éditions field et table.

(1) instruction if (branche conditionnelle) (2) slice (3) + opérateur pour la concaténation de chaînes de caractères

En plus de ce qui précède, l'édition de table utilise un mécanisme appelé fonction.

Je vais relier chaque explication facile à comprendre.

-① instruction if (= branche conditionnelle) Le code ci-dessus est la condition qui détermine si la première ligne est traitée et le traitement qui est effectué lorsque les deuxième et troisième lignes remplissent les conditions. L'explication de la déclaration if était facile à comprendre dans l'article ici.

-② Tranche Les valeurs «field_value [-1:]» et «field_value [-1:]» de la première ligne du code ci-dessus utilisent un mécanisme appelé slicing. Le découpage est un processus tel que l'extraction du nombre à partir du numéro d'une chaîne de caractères. L'explication sur le tranchage était facile à comprendre dans l'article ici.

-③ + opérateur pour concaténer des chaînes de caractères Le code de la troisième ligne est-il un ajout à première vue? Vous pourriez penser, mais c'est juste une chaîne et une chaîne attachée. Il suffit de comprendre que vous pouvez le faire, mais pour référence, je vais mettre un lien ici.

--Table: Fonction En ce qui concerne la fonction, l'explication de ici était facile à comprendre.

Passer au résumé

Sur la base de ce qui précède, je vais ajouter un commentaire au code de l'édition de champ par moi-même.

Correspondance avec le modèle qui lit le jour de l'élément de date comme zéro (dans le cas de l'élément de champ)


if(field_value[-1:]=="0"):              #field_Le dernier caractère de valeur est"0"Ensuite, effectuez le traitement suivant
    field_value = field_value[:-1]      #field_Exclure le dernier caractère de la valeur Exemple: Remplacer AAAA année MM mois JJ0 par AAAA année MM mois JJ
    field_value = field_value + "journée"    #↑ champ traité_évaluer,"journée"Rester ensemble

Pour le mettre en détail, l'explication du traitement sur la deuxième ligne est un peu brisée.

Pour être précis, il peut être nécessaire de dire: "Commencez par le premier caractère de field_value, retirez la chaîne de caractères qui n'inclut pas le dernier caractère et attribuez-la à" field_value` ", mais c'est difficile à comprendre. Cependant, du coup, c'est pareil, alors j'ai adopté l'explication de celui qui l'a cassée.

Lors de la conversion de formulaires papier en données, je pense que la date sera un élément indispensable pour presque tous les formulaires. Veuillez profiter du code présenté ici!

Recommended Posts

Logique personnalisée IQ Bot: correction des habitudes de lecture courantes sur les dates
Clé de base de logique personnalisée IQ Bot
Logique personnalisée IQ Bot: attribution de valeur fixe
Résumé du traitement lié à la logique personnalisée IQ Bot
IQ Bot Custom Logic (Python): rationalisez les exclusions dans les boucles
IQ Bot Custom Logic (Python): processus de remplacement efficace en boucle
Logique personnalisée IQ Bot: supprimez les n dernières lignes du tableau
Logique personnalisée IQ Bot: application fractionnée (appliquer à la table, inclure le contrôle des erreurs)