カスタムルール
■カスタムルールとは
特定の書類に合わせて各項目(取引日、書類種別、取引先名、金額等)の内容を抽出するためのルールを定義したものをカスタムルールと呼称しています。
一般的に自動アルゴリズムで抽出できる内容には限界があるため誤った内容を抽出した場合はその都度手作業で修正しなければいけません。
金額を例にすると、このツールでは書類内の金額に該当する数値を列挙してその中から一番大きな金額を抽出する事になっていますが、領収書の中には割引等で差し引かれている金額が本来抽出したい金額になっている事があります。こうした場合に自動アルゴリズムではうまく抽出することができませんが、カスタムルールを作れば確実に抽出する事が可能となります。
■カスタムルールの作り方
カスタムルールを作るには「登録/アップロード」の画面で読取指定を「カスタム」にセット、取引情報と読取ルールの右側に[連携中]と表示されて該当の項目が連携するようになり一部入力欄も変化します。
読取ルールでは各項目の抽出方法としてラジオボタンでモード(自動、直後、正規表現等)が選択できるようになります。
取引情報の入力欄は主に正規表現を選択した場合と書類種別を選択にした場合のみでしか使用されません。
サンプルPDFをドラッグ&ドロップ(またはファイルを選択)で読み込ませます。
[取引日]
取引を行った日は注文日の日付となりますが、注文日は読取ルールのモード「自動」で抽出対象の関連ワードとして含まれているので「自動」にセットしています。
自動抽出のワードリスト(登録とアップロード方法を参照)に無い場合は直後を選択して手動で入力します。
[書類種別]
書類の種類は領収書となりますが、領収書は読取ルールのモード「自動」で抽出対象の関連ワードとして含まれているので「自動」にセットしています。
自動抽出のワードリスト(登録とアップロード方法を参照)に無い場合は直後を選択して手動で入力します。
あらかじめ書類の種類がわかっている場合は「選択」にして取引情報から領収書を選択することもできます。
[取引先名]
書類識別で取引先が特定できる(下記書類識別参照)場合は、読取ルールの取引先名を空欄にして取引情報の取引先名に取引先(株式会社ボタクーリ)を入力します。
※この正規表現の詳細は使用例集(例6)にあります。
ほとんどの書類はこのパターンに該当すると思いますが、書類によっては同じ書式を使い回す事もありますのでこの場合は正規表現を使って取引先を抽出すると1つのカスタムルールで済みます。
[金額]
抽出したい金額はポイント値引き(対価の値引きに該当)後の金額の¥105,000ですが、「自動」にすると¥110,000が対象とされてしまうので「直後」を選択しワードを「発行日」にしてこのワード以降に最初に出現する金額を対象にしています。
[書類識別]
書類識別は書類内容から何の書類なのかを識別するための記述になりますので唯一のワードとして「登録番号:T0000000000000」を入力しています。
登録番号(法人番号)のみだとこの書類を識別するワードとしては弱いので「登録番号:」も追加しました。
登録番号は同じでも書類の書式が変わるという事も十分にありますので、なるべく書類の書式に合わせたワードか正規表現を使う事をおすすめします。
※書類が識別できるかは読み取りボタンを押して確認する事ができます(読み取りできなかった場合はエラーメッセージが出ます)。
[登録名]
登録名は任意の名前で構いませんが、既に登録している名前を使用する事はできません。
このカスタムルールの名前は「株式会社ボタクーリ」にしています。
設定後、読み取りボタンを押すと書類の内容を読み取ってアップロードファイル名が表示されます。
カスタムルールへの登録は書類識別と登録名の2つを入力する事で登録が可能となります。
登録後、読取指定のカスタムルールに登録名として表示されるようになります。
※登録したカスタムルールはGoogleドライブのマイドライブ直下に「indexbookmaker.json」(共通設定ファイル)として保存されます。
ファイルはGoogleドライブ内に限り名前の変更や移動を自由に行う事ができます。
■カスタムルールでの正規表現使用例集
下記の内容を理解するにあたり正規表現の知識が必要となります(正規表現の説明は割愛させていただきます)。
簡単な例もありますのでわからないという方も参考程度に見てみてください。
読取指定がカスタムにセットされた時の取引情報の入力欄は主に読取ルールの正規表現で抽出した内容を構築するためのフォーマットに使用されます。
フォーマットでは読取ルールのパターン記述にキャプチャグループを指定するとキャプチャされた文字列を$n(nはn番目にキャプチャされた文字列で0以上の値)でアクセスする事ができるようになります。
キャプチャする内容が無かったり$nでアクセスする事ができなかった場合は空文字列が入力されます。
正規表現はJavaScriptの構文に準拠していますが、正規表現の記述は文字列をスラッシュで囲む正規表現リテラルではなく文字列表現のみが対応しています。
以下はフォーマットと正規表現を組み合わせた使い方の例になります。
(例1)
読み取り対象のテキスト:注文日:2099/01/04
フォーマット(年):$1
フォーマット(月):$2
フォーマット(日):$3
正規表現:注文日:(\d{4})\/(\d{2})\/(\d{2})
抽出結果:20990104
<解説>
「注文日:」の後に続く数字4桁の(\d{4})は1番目のキャプチャグループなので$1、次の数字2桁の(\d{2})は2番目なので$2、次の数字2桁の(\d{2})は3番目なので$3としてアクセスできます。
取引日の入力欄の年には$1が指定してありますので2099、月には$2が指定してありますので01、日には$3が指定してありますので04が入ります。
(例2)
読み取り対象のテキスト:注文日:令和99年1月4日
フォーマット(年):[$1]$2
フォーマット(月):$3
フォーマット(日):$4
正規表現:注文日:(.{2})(\d{1,2})年(\d{1,2})月(\d{1,2})日
抽出結果:21170104
<解説>
読み取り対象のテキストが和暦になっていますが、取引日のみ和暦を西暦に変換する機能が実装されています。
和暦の場合は年を表す数値の左に和暦を表す文字列を大括弧([])で囲うと和暦と認識されて西暦に変換されます。
※和暦を表す文字列は令和なら「令和」、令和をアルファベットで表した大文字「R」、小文字「r」が使えます。
今回、和暦の部分は(.{2})なのでキャプチャグループの1番目、年は(\d{1,2})なので2番目となります。
[$1]$2は[令和]99と置換されて和暦と認識、和暦は西暦に変換されるので結果は2117となります。
最後に1月4日の抽出結果についてですが、この部分が14とならず0104となるのは桁が揃うようにゼロ埋め(ゼロパティング)処理されるからです。
(例3)
読み取り対象のテキスト:注文番号:999999
フォーマット:$0
正規表現:(?<=注文番号:)\d+
抽出結果:999999
<解説>
肯定後読みを使い「注文番号:」の後に続く数値を$0でアクセスしています。
$0は正規表現全体に一致したものが代入されます。
(例4)
読み取り対象のテキスト:注文番号:999999
フォーマット:ABCD$0
正規表現:(?<=注文番号:)\d+
抽出結果:ABCD999999
<解説>
フォーマットにはABCDのように定形文字を入れる事もできます。
(例5)
読み取り対象のテキスト:注文番号↲999999
フォーマット:$1
正規表現:注文番号\n(\d+)
抽出結果:999999
※↲は改行
<解説>
「注文番号」の後の改行にマッチさせるには「\n」を指定し、続く数値を$1でアクセスしています。
$1はキャプチャグループの1番目になります。
(例6)
読み取り対象のテキスト:
フォーマット:株式会社ABCD
正規表現:
抽出結果:株式会社ABCD
<解説>
正規表現の記述を省略すると結果は取引情報の入力内容(定形文字)になります。
あらかじめどこの取引先の書類かわかる場合はこのようにします。
(例7)
※書類識別
読み取り対象のテキスト:ABCD↲XXXX 1234↲5678↲EFGH
正規表現:(?=[\s\S]*ABCD)(?=[\s\S]*5678)
結果:マッチ
<解説>
書類の中で「ABCD」と「5678」が含まれている場合にマッチするという正規表現になります。
この正規表現は特定のワードがいくつか存在する場合にのみ該当の書類として識別するという時に使えます。
基本的にはワード1つに対して「(?=[\s\S]*○○○○○)」を記述するという考え方で構いません。
※○の部分にはワードが入ります。
■カスタムルールライブラリ
こちらでは通販サイトの書類に対応したカスタムルールを配布しています。
※ファイルの末尾に「*」が付加されたカスタムルールはドラッグ&ドロップエリアの「PDFを画像として読み込む」にチェックを付けないと読み取りができません。
それ以外のカスタムルールはチェック有無に関わらず対応しています。
<登録方法>
1.ファイルをダウンロード後、読取指定を「カスタム」にセットします。
2.インポートボタンでダウンロードしたカスタムルールを読み込みます。
3.設定内容が表示されますので登録ボタンを押します。
※領収書の中には共通ポイント(クレジットカードのポイント、PayPayポイント(PayPayマネー含む)、楽天ポイント(楽天キャッシュ含む)等)を値引きと同じ表記で処理されているものがあるため、カスタムルールで金額を抽出した場合でも本来抽出したい金額とはならない場合があります。そのため下記の領収書をご利用の場合は金額を確認し手動で修正してください(簡素化するためポイントを使用して支払わないという事もご検討ください)。
対象の領収書:Amazon.co.jp、楽天ブックス
参考:プライベートで得たポイントで支払いをした場合のポイントは事業主借、事業で得たポイントで支払いをした場合のポイントは雑収入として処理します。