請求書からデータを抽出して、会計士に要約を送信するソリューションを探しています。
月に約20ユーロでそのようなサービスを提供している会社がいくつかあり、請求書は通常非常によく認識されています。しかし、私が試したサービスでは、気に入ったすべてのデータが抽出されないか、データを会計士に送信するためのExcelエクスポートなどの機能が不足しています。そして、月に20ユーロを支払い、月に5回の請求書で別のサービスを管理しなければならないことは、まだ私には魅力的ではありませんでした。
私は少し調べていて、このスタックオーバーフローの質問を見つけました: 請求書を処理するためにOCRソフトウェアを推奨できる人はいますか?
それは少し時代遅れであり、より最新の推奨事項を見つけることを望んでいます。 Ephesoftコミュニティエディションを試してみましたが、最初は非常に有望に見えました。しかし、ソフトウェアには学習とレビューのステップがあります。レビューステップ内では、データは学習ステップにフィードバックされていないようです。さらに、手作業で行うよりも面倒な感じがします。大企業向けだと思います。
簡単なデータ抽出ソフトウェアを探しています。これは、表示する各ステップで学習します。
Apache Tikaも調べましたが、単純なWebインターフェイスで使用する準備ができていないようです。
1)有料のOCRサービスに関する推奨事項はありますか?合計VAT額/ VAT%/合計金額/合計金額通貨/ VAT通貨/支払われたアカウント/会社名を柔軟に抽出できます。優れた輸出で?
2)オープンソースソフトウェアに関する推奨事項はありますか?
3)少数(年間50未満)の請求書をどのように処理するかについて、一般的なアドバイスはありますか?
どうもありがとうございました、
トビー
生のOCRとその上にある正規表現(非常に限られたユースケースでは正常に機能する可能性があります)を除いて、APIアクセスを提供する他のいくつかのオプションがあります。デモや販売プロセスなしで実際に使い始めることができるもの:
あなたが販売プロセスを進んで通過することをいとわない場合(そして彼らは実際に本物で生きているように見えます):
(免責事項:私はElisのベンダーであるRossumと提携しています。他のAPIを追加する編集を提案してください!)
Syphtは、これを行うためのAPIを提供します: http://www.sypht.com 。
Pythonクライアント: https://github.com/sypht-team/sypht-python-client
ステップ1
pip install sypht
ステップ2
from sypht.client import SyphtClient, Fieldset
sc = SyphtClient('<client_id>', '<client_secret>')
with open('invoice.png', 'rb') as f:
fid = sc.upload(f, fieldsets=["document, "invoice"])
print(sc.fetch_results(fid))
免責事項:私はベンダーと提携しています
請求書処理の自動化された方法(機械学習を使用)を備えたAPIへのリンクを追加させてください。
試してみるために、展開されたデモがあります: https://rossum.ai/developers
抽出プロセスは、次のようにAPI( https://docs.api.rossum.ai/ )で自動化できるようになりました。
from __future__ import division, print_function
import argparse
import json
import os
import requests
import polling
DEFAULT_API_URL='https://all.rir.rossum.ai'
class ElisClient(object):
"""
Simple client for Rossum Elis API that allows to submit a document for
extraction and then wait for the processed result.
Usage:
```
client = ElisClient(secret_key, base_url)
document_id = client.send_document(document_path)
extracted_document = client.get_document(document_id)
```
"""
def __init__(self, secret_key, url=DEFAULT_API_URL):
self.secret_key = secret_key
self.url = url
# we do not use requests.auth.HTTPBasicAuth
self.headers = {'Authorization': 'secret_key ' + self.secret_key}
def send_document(self, document_path):
"""
Submits a document to Elis API for extractions.
Returns: dict with 'id' representing job id
"""
with open(document_path, 'rb') as f:
content_type = self._content_type(document_path)
response = requests.post(
self.url + '/document',
files={'file': (os.path.basename(document_path), f, content_type)},
headers=self.headers)
return json.loads(response.text)
@staticmethod
def _content_type(document_path):
return 'image/png' if document_path.lower().endswith('.png') else 'application/pdf'
def get_document_status(self, document_id):
"""
Gets a single document status.
"""
response = requests.get(self.url + '/document/' + document_id, headers=self.headers)
response_json = json.loads(response.text)
if response_json['status'] != 'ready':
print(response_json)
return response_json
def get_document(self, document_id, max_retries=30, sleep_secs=5):
"""
Waits for document via polling.
"""
def is_done(response_json):
return response_json['status'] != 'processing'
return polling.poll(
lambda: self.get_document_status(document_id),
check_success=is_done,
step=sleep_secs,
timeout=int(round(max_retries * sleep_secs)))
def parse_args():
parser = argparse.ArgumentParser(description='Elis API client example.')
parser.add_argument('document_path', metavar='DOCUMENT_PATH',
help='Document path (PDF/PNG)')
parser.add_argument('-s', '--secret-key', help='Secret API key')
parser.add_argument('-u', '--base-url', default=DEFAULT_API_URL, help='Base API URL')
return parser.parse_args()
def main():
args = parse_args()
client = ElisClient(args.secret_key, args.base_url)
print('Submitting document:', args.document_path)
send_result = client.send_document(args.document_path)
document_id = send_result['id']
print('Document id:', document_id)
extracted_document = client.get_document(document_id)
print('Extracted data:')
print(json.dumps(extracted_document, indent=4))
if __name__ == '__main__':
main()
と呼ばれる
python elis_client_example.py ../data/invoice.pdf -s xxxxxxxxxxxxxxxxxxxxxx_YOUR_ELIS_API_KEY_xxxxxxxxxxxxxxxxxxxxxxx
(例 https://github.com/rossumai/elis-client-examples/ )
追加して明確にするために、Iamは、開発者にこのサポートを有効にすることに取り組んでいるチームの一員です。
請求書からデータを抽出することは複雑な問題です。オープンソースソリューションはまだ見ていません。 OCRは、データ抽出プロセスの一部にすぎません。画像の前処理、データ認識用のAIエンジンなどが必要です。
この問題を解決するための多くの解決策があります。それらのすべてが少し異なります。 @PeterBaudisはすでにそれらのいくつかについて言及しています。
それらは非常に単純なものから始まります。
より高度なものへ:
ユースケースを知ることは重要です。万能の解決策はありません。それはあなたが何を達成しようとしているのかによります:
データマイニング-安価で高速でなければなりません。データの欠落や不正確さはミッションクリティカルではありません。あなたはデータ分析でそれをきれいにすることができます。
企業の自動化-訓練された繰り返し請求書はほぼ100%機能する必要があります。スピードと新しい請求書はミッションクリティカルではありません。
税関などの自動化-取得したデータをできるだけ多く返すことが不可欠です。セット全体の正確さは非常に重要ですが、おそらくすべてのドキュメントがとにかくレビューされます。
したがって、それらをテストして、プロセス/ニーズにどのように適合するかを確認する必要があります。
免責事項:私はtyplessの作成者の1人です。編集を提案してください。