2017-11-17 17 views
0

Azure StorageでPDFからデータを抽出する必要があります(フォルダ内で解析して分離するには遅すぎます)。 1000個のPDFをダウンロードするのに11分かかるだけです。より速くダウンロードする方法や、ダウンロードすることなくデータを移動/抽出する方法はありますか? Blobをダウンロードするのにget_blob_to_path、TXTにPDFを変換するのにslate3kを使用しています。Pythonを使用してAzureからBLOBをダウンロード

コード(申し訳ありませんが、いくつかの単語はポルトガル語である):

block_service = BlockBlobService(account_name=ACCOUNT_NAME, account_key=ACCOUNT_KEY) 

generator = block_service.list_blobs(CONTAINER_NAME, prefix="trt2", num_results=1000, timeout=60) 

for blob in generator: 

    path = "temp/" + blob.name.split("/")[-1] 
    block_service.get_blob_to_path(CONTAINER_NAME, blob.name, path, timeout=60) 

    with open(path, 'rb') as f: 
     doc = slate3k.PDF(f) 
     f.close() 

     text_complete = '' 
     for item in doc: 
      item_pat = '' 
      for line in item.split('\n'): 
       item_pat += line + '\n' 
      text_complete += item_pat 

     text_complete = text_complete.strip().lower() 



     if text_complete.find("acórdão") >= 0 and text_complete.find("acordam os magistrados") >= 0: 
      print("Encontrei Acórdão") 
      print("Arquivo "+path) 
      block_service.create_blob_from_path(CONTAINER_NAME, "trt2/Acordao/" + arquivo, path) 
      block_service.delete_blob(CONTAINER_NAME, blob.name) 
      os.remove(path) 
     elif text_complete.find("despacho") >= 0 and text_complete.find("conclusão") < 0 and text_complete.find("embargo") < 0 and \ 
         text_complete.find("ata de audiência") < 0 and text_complete.find("termo de audiência") < 0 and \ 
         text_complete.find("v o t o") < 0 and text_complete.find("certidão") < 0 : 
      print("Encontrei Despacho") 
      print("Arquivo "+path) 
      block_service.create_blob_from_path(CONTAINER_NAME, "trt2/Despacho/" + arquivo, path) 
      block_service.delete_blob(CONTAINER_NAME, blob.name) 
      os.remove(path) 
     elif text_complete.find("sentença") >= 0 and text_complete.find("relatório") >= 0 and \ 
         text_complete.find("acordam") < 0 and text_complete.find("primeira testemunha") < 0 and \ 
         text_complete.find("provas a produzir") < 0 and text_complete.find("embargo") < 0 and \ 
         text_complete.find("voto") < 0: 
      print("Encontrei Sentença") 
      print("Arquivo "+path) 
      block_service.create_blob_from_path(CONTAINER_NAME, "trt2/Sentenca/" + arquivo, path) 
      block_service.delete_blob(CONTAINER_NAME, blob.name) 
      os.remove(path) 

     else: 
      block_service.create_blob_from_path(CONTAINER_NAME, "trt2/Outros/" + arquivo, path) 
      block_service.delete_blob(CONTAINER_NAME, blob.name) 
      os.remove(path) 
+0

これまでに書いたコードを投稿できますか? – PrestonM

+0

質問が更新されました –

+0

ボトルネックはどこですか?これらの1000個のpdfに80GBのデータが含まれている場合、その2 MBの長さがあなたのダウンロード速度に対してサイズをチェックし、それが問題であるかどうかを確認すれば、10分で問題ありません。その場合は、データボリュームをアップグレードまたは最小化しようとする。ワイヤーを介して転送されるデータを減らすために、数百万のpdfs 1000sを一度に(または7z)圧縮します。 wlanを使用している場合は、LAN接続を取得してそのボトルネックを取り除き、1000mbit LANにアップグレードしてください...分析し、修正してください。 –

答えて

0

私はこのためAzure Batchを使用することをお勧め。あなたは100台のVMをスピンアップして、彼らに仕事をさせることができます。ローカルコンピュータにファイルをダウンロードする必要はありません。

単一のAzure VMでも実行できますが、Azureバッチよりも時間がかかります。

両方の方法で、ファイルはAzureデータセンター内にとどまり、より高速になり、出口トラフィックの料金を支払う必要はありません。

関連する問題