AmazonTextractで表を認識させてみた

AWS Textractは、PDFデータや画像データに含まれるフォーム形式のデータ、または、表形式のデータを読み取り、機械判読可能なデータに変換するサービスです。


[https://aws.amazon.com/jp/textract/]


2019年8月現在まだ日本語をサポートしていませんが、どのようなデータをパースできるのか実際に使ってみました。

# 条件

Excelで作成したデータをPDF形式で出力し、PDFファイルをAWS Textractにアップロードして認識させた。現実バージョンのPDFデータは、tabula-javaのテストに用いられているPDFデータをそのまま利用した。

1. シンプルな表(罫線あり)
2. シンプルな表(罫線一部のみ)
3. シンプルな表(罫線なし)
4. 複雑な表(罫線あり)
5. 複雑な表(罫線一部のみ)
6. 複雑な表（罫線なし→これはありえないのでパス)
7.  テキストの列挙
8. 同じ構造の繰り返し
9. 現実バージョン1
10.  現実バージョン2
11. 現実バージョン3
12. 現実バージョン4

# 結果

## (1)  シンプルな表(罫線あり)

#### 入力

![20190716210654.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/8ab1c756-8b85-8af0-6eed-dcedfa78a9c1.png)

![case1_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/15a2b31a-5fda-8dfb-2c60-8abd4036e46f.png)

#### 出力

なし

#### 評価
表形式を認識できない。アラインメント(右寄せ)を調整してみたが認識できない。


## (1-2) シンプルな表(罫線あり、大きなフォント）

#### 入力

![case1_3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/6b854ad3-a092-5b55-96f0-4439ee95dea5.png)


#### 出力

![res1_3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/e8c0d5fd-eb4b-bfb1-442e-ca658cb00967.png)

#### 評価

大きなフォントに変換するとテーブルとテキストを認識する。ただし、認識されるテキストが一部間違っている。

## (2)  シンプルな表(罫線一部のみ)

#### 入力
![case2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/7d86c8ed-4b45-253d-f0ef-76a758716c44.png)


#### 出力

![res2_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/dcffacc8-85e1-e48c-13d0-e897342e4a38.png)


![res02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/c8b00352-99d8-dc85-ad02-52c689f99650.png)


#### 評価
 表形式は認識できたが、正しく文字を認識できない。”col" の半角小文字の"L"を罫線と認識してしまっている。

## (3) シンプルな表(罫線なし)

#### 入力

![20190716210728.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/f19af763-ed1b-d9b2-af23-4a7804239d60.png)


#### 出力


![res03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/1f766814-ab7b-a6ec-cbe2-822b3f3171d1.png)


#### 評価
罫線がなくなると正しく認識できた！罫線が苦手のよう。

## (4) 複雑な表(罫線あり)

#### 入力
![20190716210744.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/d6c78f39-8d01-a1ff-00e5-88ee4fa2d010.png)


#### 出力

![res04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/4cc4cd4a-2cde-4487-b9d3-505a265cf400.png)



#### 評価:
罫線があっても、parent, 2018, 2019を除くとほぼ正しく抽出できている

## (5) 複雑な表(罫線一部のみ)

#### 入力

![20190716210757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/3500c944-d325-4651-7123-1882bbcb2c6f.png)


#### 出力

![res05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/811030ef-508b-eb1b-6913-b30be8f8cff7.png)


#### 評価: 

4に比べて精度が落ちている。

## (6) 複雑な表（罫線なし→これは現実的にありえないのでパス)

## (7) テキストの列挙

#### 入力
![20190716210807.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/a2c5dcad-5552-fece-3eec-1529032605d5.png)


#### 出力

![20190717010625.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/e6058548-e924-05f5-e094-f870312fd328.png)


#### 評価
パーフェクト

case7_2

## 入力

![20190717001419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/44092ec2-e3c4-ea73-4193-8d278b8dca94.png)

## 出力

![20190717010543.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/5dd36967-e039-783c-505b-bd185557425c.png)


#### 評価
パーフェクト

case7_3

#### 入力

![20190717001449.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/cbeb3ce5-3cd2-564a-1ab4-c4bafc304f4b.png)

#### 出力

![20190717001518.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/55c31143-9a4e-8326-2ca8-9825ed9cb46b.png)


#### 評価
急に文字が認識できなくなる。なんでよ？

## (8) 同じ構造の繰り返し

#### 入力

![20190716210837.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/d36807df-5f00-e215-67d8-96b9b9a8cbdc.png)


#### 出力

![res08.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/ade87d7b-56b9-fb0f-f7e6-461621ea157e.png)

![res8_2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/0630db78-b036-9a32-1235-e51c2ca6e8fe.png)



#### 評価

そもそもこの同じ構造を繰り返す形式はサポートしていないよう

## (9) 現実バージョン1

#### 入力
![20190716210851.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/a9352ab2-a905-aef8-f160-f0035090a891.png)

#### 出力

![res09.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/5fa01539-f14b-fc71-4d0b-3ca368ff2200.png)


#### 評価

親子関係が死んでいる以外はパーフェクト。フォントによるのかな？

## (10) 現実バージョン2

#### 入力

![20190716210901.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/e686a08d-3717-c5d8-30c6-77d91e290f41.png)
![20190716210923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/83dda5fb-8899-3bb1-db56-7128dbc43364.png)



#### 出力

![20190717011850.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/2f8d5fdc-8d55-6244-f7c0-0d9ab42f2eb5.png)


#### 評価:

パーフェクト。2ページ目の図を表と認識しないのも正解。


## (11) 現実バージョン3

#### 入力

![20190716210937.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/207f1ac4-0f77-63d6-9ac5-2b25cfc2893e.png)

#### 出力


![20190716215147.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/3f5e5f98-5eb5-2bcb-225b-66e40b9bca53.png)


#### 評価

行を正しく認識できていない(odd行even行の色違いを認識しない)

## 12. 現実バージョン4

#### 入力

![20190717005115.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/6badf1b2-fb6c-623b-6f64-01806cabcf59.png)



#### 出力

![res12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1660/d9afa56e-3c1f-62c8-8b09-ee6abbea90b6.png)



#### 評価:

1ページ内の異なる4つのテーブルをそれぞれ認識できているが、テーブル内に複数の行が存在していることを認識できていない。

## まとめ

- 飽くまで画像のOCR。一般的にPDFデータには文字情報が含まれているが、その文字情報は利用していないよう（もったいない）。
- テーブルにはキー(ヘッダ)とバリュー(データセル）が存在するが、現時点でのバージョンでは何がキーで何がバリューかを認識できない。
- 抽出できるかどうかはフォントに依存するよう。
- CSVを生成するところでミスが多い。
- 罫線がまだ苦手のよう。
- 色々試してたら300円くらいかかった。

### インボイスや申請書の認識（フォーム）の成績は結構よいとのことですが、表（テーブル）の認識はまだまだこれからのようですね。日本語版を作るのはおそらく大変でしょう。