LoginSignup
1

More than 1 year has passed since last update.

posted at

updated at

IQ Botのカスタムロジック:パターンの決まった文字化けの補正、空欄埋め、形式変換、ノイズの除外(置換処理)

IQ Botのカスタムロジックの概要について、先日以下の記事でご紹介しました。

カスタムロジックはPythonというプログラミング言語そのものではあるんですが、
プログラミングの知識がないと使いこなせないかというと、そんなことはありません。

この記事では、コード自体は簡単ですが実際に業務で使う8~9割を占める
「置換」の処理について、コードと使用例をご紹介していきます。

上記の記事でもご紹介したとおり、
フィールド項目とテーブル項目で若干考え方が違うので、それぞれ紹介します。

フィールド項目に対する置換処理

まずはより基本編となるフィールド項目から。

置換のロジックはめちゃ簡単ですが、実際に業務で使うカスタムロジックの8~9割はこれです。

基本のコード

フィールド項目に対する置換の処理
field_value = field_value.replace("置換前の文字列","置換後の文字列")

以下のように改行して、同じ項目に対して複数の置換処理を定義することが可能です。

改行すれば複数の定義OK
field_value = field_value.replace("置換前の文字列1","置換後の文字列1")
field_value = field_value.replace("置換前の文字列2","置換後の文字列2")

たったこれだけのコードですが、以下のようにいろいろ応用できます。

置換処理の使い道いろいろ

  • 空欄を埋める

field_value.replace(" ","")で、空欄を埋められます。

余談ですが、IQ Botは改行ありの値を読み込んだ場合に、仕様として改行部分が空欄に変換されます。

  • オーと読まれた文字をゼロに変換(パターンの決まった文字化けの補正)

field_value.replace("O","0")で、オーをゼロに変換できます。

同じ要領で、

l(エル)やI(アイ)や|(パイプライン)を1(いち)に置き換えたり、
棘を東京に置き換えたり、
▲で表記されたマイナスをマイナス符号に置き換えたりなど、

いろいろできます。

  • 形式の変換

「2020年4月6日」を「2020/4/6」のような形式に直したい場合も、置換で対応できます。

日付の形式変換の例
field_value = field_value.replace("年","/") 
field_value = field_value.replace("月","/") 
field_value = field_value.replace("日","") 
  • ノイズの除外

OCRで帳票を処理すると、紙の汚れや人がボールペンでチェックしたマークなどが、
ピリオド、カンマ、コロン、セミコロン、スラッシュ、クオーテーション、ダブルクオーテーション 等々の
ノイズとして読み込まれてしまうケースが多々あります。

そうした記号が不要な項目であれば、field_value.replace("除外したいノイズ","")でノイズの除外ができます。

なお、置換前の文字列や置換後の文字列は、
ダブルクオーテーション(")かシングルクオーテーション(')のどちらかで囲まれていれば大丈夫です。

除外したいノイズ自体にダブルクオーテーションやシングルクオーテーションが入っている場合は、
以下のように定義すれば大丈夫です。

除外したいノイズじゃない方のクオーテーションで囲む

#シングルクオーテーションを除外する場合は、ダブルクオーテーションで囲む
field_value = field_value.replace("'","") 

#ダブルクオーテーションを除外する場合は、シングルクオーテーションで囲む
field_value = field_value.replace('"',"") 

テーブル項目に対する置換処理

テーブル項目の場合は、ちょっと書き方が変わりますが、それでも簡単です。

こちらで説明した「おまじないコード」の間に・・・

このように↓書きます。

テーブル項目に対する置換の処理
df['列名'] = df['列名'].str.replace('置換前の文字列', '置換後の文字列')

列名はIQ Botで帳票設定するときに定義したこちら↓の列名をそのまま使います。

Qiita用.jpg

日本語の列名でも普通に動きますが、
列名にスペースが含まれている場合は、スペースはアンスコ(_)に置き換えます。

例えば上記の「金額」と「金額 税込」の列から、「円」という単位を除外したい場合は以下のように処理します。

フィールド項目に対する置換の処理
df['金額'] = df['金額'].str.replace('円', '')
df['金額_税込'] = df['金額_税込'].str.replace('円', '')

まとめ

  • 置換の処理は簡単だけど、業務で使うカスタムロジックのほとんどはこれだよ
  • 置換処理の仕組みを使って、パターンの決まった文字化け補正や空欄埋め、ノイズの除外などいろいろできるよ
  • テーブルの場合は列名を指定するよ
  • テーブルの列名にスペースが含まれている場合は、アンスコ(_)に置き換えるよ

いかがでしたか?

置換処理を適切に使うと、簡単にインプットデータの質を上げられて自動化がしやすくなるので、ぜひ試してみてください!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1