From 39b5dcfca7d2090974f1015543c8b7899d558803 Mon Sep 17 00:00:00 2001 From: takolota <62068927+takolota@users.noreply.github.com> Date: Wed, 30 Aug 2023 15:08:42 -0400 Subject: [PATCH] Initial Commit for ExtractDataFromPDFsAndImagesWithGPT --- .../README.md | 77 ++++++++++++++++++ .../assets/GPTDataExtractionThumbnail.png | Bin 0 -> 37244 bytes .../assets/preview2.png | Bin 0 -> 54147 bytes .../apisMap.json | 1 + .../connectionsMap.json | 1 + .../definition.json | 1 + .../Microsoft.Flow/flows/manifest.json | 1 + .../manifest.json | 1 + 8 files changed, 82 insertions(+) create mode 100644 samples/ExtractDataFromPDFsAndImagesWithGPT/README.md create mode 100644 samples/ExtractDataFromPDFsAndImagesWithGPT/assets/GPTDataExtractionThumbnail.png create mode 100644 samples/ExtractDataFromPDFsAndImagesWithGPT/assets/preview2.png create mode 100644 samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/apisMap.json create mode 100644 samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/connectionsMap.json create mode 100644 samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/definition.json create mode 100644 samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/manifest.json create mode 100644 samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/manifest.json diff --git a/samples/ExtractDataFromPDFsAndImagesWithGPT/README.md b/samples/ExtractDataFromPDFsAndImagesWithGPT/README.md new file mode 100644 index 0000000..edce989 --- /dev/null +++ b/samples/ExtractDataFromPDFsAndImagesWithGPT/README.md @@ -0,0 +1,77 @@ +--- +page_type: sample +languages: +- powerautomate-comma +products: +- powerautomate +name: Extract Data From PDFs And Images With GPT +description: Uses AI Builder's OCR for PDFs & Images to extract the text present in a file, replicates the file in a text (txt) format, then passes it off to a GPT prompt action for things like data extraction. +urlFragment: powerapps-calendar-component +ms.date: 08/30/2023 +author: tylerkolota +ms.author: pnp +level: intermediate +ms.prod: power-automate +--- + +# Calendar Component + +## Summary + +Uses AI Builder's OCR for PDFs & Images to extract the text present in a file, replicates the file in a text (txt) format, then passes it off to a GPT prompt action for things like data extraction. + +![Preview](./assets/GPTDataExtractionThumbnail.png) +![Preview](./assets/preview2.png) + + +## Applies to + +* [Microsoft Power Automate](https://docs.microsoft.com/powerautomate/) + +## Compatibility + +![Power Apps Source File Pack and Unpack Utility 0.20](https://img.shields.io/badge/Packing%20Tool-0.20-green.svg) +![Premium License](https://img.shields.io/badge/Premium%20License-Not%20Required-green.svg "Premium Power Automate license not required") +![Experimental Features](https://img.shields.io/badge/Experimental%20Features-No-green.svg "Does not rely on experimental features") +![On-Premises Connectors](https://img.shields.io/badge/On--Premises%20Connectors-No-green.svg "Does not use on-premise connectors") +![Custom Connectors](https://img.shields.io/badge/Custom%20Connectors-Not%20Required-green.svg "Does not use custom connectors") + +## Authors + +Solution|Author(s) +--------|--------- +Extract Data From PDFs And Images With GPT | [Tyler Kolota](https://github.com/takolota) ([@tylerkolota](https://www.linkedin.com/in/kolota) ) + +## Version history + +Version|Date|Comments +-------|----|-------- +2.7|August 30, 2023|Initial release + + +## Features + +## Prerequisites + +AI Builder credits + +### Setting Up The Flow + +To set up the flow, you can follow the video guide at https://powerusers.microsoft.com/t5/Power-Automate-Cookbook/Extract-Data-From-PDFs-and-Images-With-GPT/td-p/2201345 + +## Data Sources + +OneDrive, SharePoint, or any other file source. + + + +## Disclaimer + +**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.** + + +## Support + +For questions & feedback, please visit https://powerusers.microsoft.com/t5/Power-Automate-Cookbook/Extract-Data-From-PDFs-and-Images-With-GPT/td-p/2201345 + + diff --git a/samples/ExtractDataFromPDFsAndImagesWithGPT/assets/GPTDataExtractionThumbnail.png b/samples/ExtractDataFromPDFsAndImagesWithGPT/assets/GPTDataExtractionThumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b0fbc781321107d54fd0099e21dfd7e1c15158 GIT binary patch literal 37244 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 L9_ZHGvy1v4E`iwI literal 0 HcmV?d00001 diff --git a/samples/ExtractDataFromPDFsAndImagesWithGPT/assets/preview2.png b/samples/ExtractDataFromPDFsAndImagesWithGPT/assets/preview2.png new file mode 100644 index 0000000000000000000000000000000000000000..d628464eb2858ba900c2d10191cf6a173b92e531 GIT binary patch literal 54147 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 yGr#%|kt?x%0Do2>rv1?V(}>|;ALlmISD~Ac>-~~07-sOc5K`juVijKve*9m~fK{FV literal 0 HcmV?d00001 diff --git a/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/apisMap.json b/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/apisMap.json new file mode 100644 index 0000000..03b9f7f --- /dev/null +++ b/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/apisMap.json @@ -0,0 +1 @@ +{"shared_commondataserviceforapps_1":"046d0d3e-1564-4eab-b2bc-c1abf3361f02","shared_onedriveforbusiness_1":"6918a60c-aeef-4313-93dc-93a4628489df"} \ No newline at end of file diff --git a/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/connectionsMap.json b/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/connectionsMap.json new file mode 100644 index 0000000..9546a7c --- /dev/null +++ b/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/connectionsMap.json @@ -0,0 +1 @@ +{"shared_commondataserviceforapps_1":"60e38b69-b97e-462a-a1fe-21c0ca05795f","shared_onedriveforbusiness_1":"2e6ea997-827b-4116-af72-75bccd815198"} \ No newline at end of file diff --git a/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/definition.json b/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/definition.json new file mode 100644 index 0000000..efdb3f2 --- /dev/null +++ b/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/d02adafe-f0e6-40c5-9efd-1d6196af87e7/definition.json @@ -0,0 +1 @@ +{"name":"d2d31e1b-a6d3-4f9b-a31a-479cad0b11f8","id":"/providers/Microsoft.Flow/flows/d2d31e1b-a6d3-4f9b-a31a-479cad0b11f8","type":"Microsoft.Flow/flows","properties":{"apiId":"/providers/Microsoft.PowerApps/apis/shared_logicflows","displayName":"GPT Data Extraction - PDFs & Images V2.7","definition":{"metadata":{"workflowEntityId":null,"processAdvisorMetadata":null,"flowChargedByPaygo":null,"flowclientsuspensionreason":"None","flowclientsuspensiontime":null,"flowclientsuspensionreasondetails":null,"creator":{"id":"4d4fadf8-39e1-477f-8941-9686478b0cdd","type":"User","tenantId":"7c1f24a6-7d39-452c-8237-0726e3b19a73"},"provisioningMethod":"FromDefinition","failureAlertSubscription":true,"clientLastModifiedTime":"2023-08-30T18:53:50.7795654Z"},"$schema":"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#","contentVersion":"1.0.0.0","parameters":{"$connections":{"defaultValue":{},"type":"Object"},"$authentication":{"defaultValue":{},"type":"SecureObject"}},"triggers":{"manual":{"metadata":{"operationMetadataId":"10b1ccc1-de00-4358-95b8-d8e72f5b7c85"},"type":"Request","kind":"Button","inputs":{"schema":{"type":"object","properties":{},"required":[]}}}},"actions":{"Create_text_with_GPT":{"runAfter":{"Convert_to_txt":["Succeeded"]},"metadata":{"operationMetadataId":"4f627591-70f5-4dff-9608-ce28abd5b492","flowSystemMetadata":{"portalOperationId":"aibuilderpredict_gptpromptengineering","portalOperationGroup":"aibuilder","portalOperationApiDisplayNameOverride":"AI Builder","portalOperationIconOverride":"https://content.powerapps.com/resource/makerx/static/pauto/images/designeroperations/aiBuilderNew.51dbdb6b.png","portalOperationBrandColorOverride":"#0A76C4","portalOperationApiTierOverride":"Standard"}},"type":"OpenApiConnection","inputs":{"host":{"apiId":"/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps","connectionName":"shared_commondataserviceforapps_1","operationId":"aibuilderpredict_gptpromptengineering"},"parameters":{"item/requestv2/prompt":"From the OCR captured invoice document text provided between [Start of text] & [End of text] markers, extract data for each of the example JSON fields between [Start example JSON] & [End example JSON].\nBe aware, OCR text may contain errors like wrong characters or missing formatting.\nIn the JSON, replace [data] with each field's extracted data & use an \"N/A\" string when the field's data is not found.\nConvert all numbers to a standard 2-place decimal notation.\nConvert all dates to international format \"yyyy-mm-dd\".\nRepresented each data value as a string type.\nMode Of Shipment (MOS) may also go by Mode Of Transport & the value is usually Air, Sea, or Land.\nThere may be any number of Product Lines.\n\n\n[Start example JSON]\n{\n\"Invoice Date\": [data],\n\"Invoice Number\": [data],\n\"Purchase Order (PO) Number\": [data],\n\"Incoterms\": [data],\n\"Delivery Or Ship To Address\": [data],\n\"Consignee Address\": [data],\n\"Mode Of Shipment\": [data],\n\"Product Lines\": [\n{\n\"Product Name\": [data],\n\"Product Quantity\": [data],\n\"Product Unit Price\": [data],\n\"Product Line Total or Amount\": [data],\n\"Manufacturer\": [data]\n},\n{\n\"Product Name\": [data],\n\"Product Quantity\": [data],\n\"Product Unit Price\": [data],\n\"Product Line Total or Amount\": [data],\n\"Manufacturer\": [data]\n}\n],\n\"Invoice Total\": [data],\n\"Banking Details\": [data]\n}\n[End example JSON]\n\n\n[Start of text]\n@{outputs('Combined_txt_output')}\n[End of text]\n\n\nReturn only the final JSON object. Do not return any other output descriptions or explanations, only the JSON object.","recordId":"a1afa5d4-7a44-4c31-9cd2-e852a78431fa","item/requestv2/parameters":"{}"},"authentication":"@parameters('$authentication')"}},"Get_file_metadata":{"runAfter":{"Initialize_variable_EachPage":["Succeeded"]},"metadata":{"b!y2rxipfTvUi7ALZMiyxLa89aQqkbMORMksjFtKI_dfKgJA8V37mjQICJm9mYgy-T.01JWBUU4DL3PCH5K65FRCL2IWF3UTNJUWG":"/POD-Kenya PO10023608.pdf","operationMetadataId":"1796706b-e357-4578-b651-8e27cf82b03e","b!y2rxipfTvUi7ALZMiyxLa89aQqkbMORMksjFtKI_dfKgJA8V37mjQICJm9mYgy-T.01JWBUU4C4OWY64YOCSJGJULFZ2CNR7L2K":"/POD-Kenya PO10023608.pdf","b!y2rxipfTvUi7ALZMiyxLa89aQqkbMORMksjFtKI_dfKgJA8V37mjQICJm9mYgy-T.01JWBUU4GNEWKHDBRESJH2GDE4DZFD5EHT":"/Abbott INV_1303673643_POD.pdf","b!y2rxipfTvUi7ALZMiyxLa89aQqkbMORMksjFtKI_dfKgJA8V37mjQICJm9mYgy-T.01JWBUU4DAPRHZ6W7KBZBJKYJSOMNNMIVV":"/Roche INV_8304933707.pdf","b!y2rxipfTvUi7ALZMiyxLa89aQqkbMORMksjFtKI_dfKgJA8V37mjQICJm9mYgy-T.01JWBUU4DGTO6UGLWL6RDLGGR2Q3JMVCRQ":"/Tyler Kolota Resume Chemonics 2023 (1).pdf","b!y2rxipfTvUi7ALZMiyxLa89aQqkbMORMksjFtKI_dfKgJA8V37mjQICJm9mYgy-T.01JWBUU4AKTW6BVXWHERCZSUDGHOTMI27O":"/EastRepairInvoice.png","b!y2rxipfTvUi7ALZMiyxLa89aQqkbMORMksjFtKI_dfKgJA8V37mjQICJm9mYgy-T.01JWBUU4GZHSEFLOQ2TJA2NIOOXKYIQ5Y2":"/StanfordPlumbingInvoice.png","b!y2rxipfTvUi7ALZMiyxLa89aQqkbMORMksjFtKI_dfKgJA8V37mjQICJm9mYgy-T.01JWBUU4A37SOBHIQIXRD2G4ED3YGT4SBR":"/RO10133137_PO10023315_INV_TNRP65465.pdf","b!y2rxipfTvUi7ALZMiyxLa89aQqkbMORMksjFtKI_dfKgJA8V37mjQICJm9mYgy-T.01JWBUU4CZO265H55Z4JGKSRJ6FJWIHEYV":"/Hologic INV_31012396.pdf"},"type":"OpenApiConnection","inputs":{"host":{"apiId":"/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness","connectionName":"shared_onedriveforbusiness_1","operationId":"GetFileMetadata"},"parameters":{"id":"Choose your PDF or image file"},"authentication":{"value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']","type":"Raw"}}},"Get_file_content":{"runAfter":{"Get_file_metadata":["Succeeded"]},"metadata":{"operationMetadataId":"8b379bcb-615a-42ff-b39b-e9adea5daa69"},"type":"OpenApiConnection","inputs":{"host":{"apiId":"/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness","connectionName":"shared_onedriveforbusiness_1","operationId":"GetFileContent"},"parameters":{"id":"@outputs('Get_file_metadata')?['body/Id']","inferContentType":true},"authentication":{"value":"@json(decodeBase64(triggerOutputs().headers['X-MS-APIM-Tokens']))['$ConnectionKey']","type":"Raw"}}},"Recognize_text_in_an_image_or_a_PDF_document":{"runAfter":{"Get_file_content":["Succeeded"]},"metadata":{"operationMetadataId":"3e357f5f-d994-409b-bb47-3d7e43c70439","flowSystemMetadata":{"portalOperationId":"aibuilderpredict_textrecognition","portalOperationGroup":"aibuilder","portalOperationApiDisplayNameOverride":"AI Builder","portalOperationIconOverride":"https://content.powerapps.com/resource/makerx/static/pauto/images/designeroperations/aiBuilderNew.51dbdb6b.png","portalOperationBrandColorOverride":"#0A76C4","portalOperationApiTierOverride":"Standard"}},"type":"OpenApiConnection","inputs":{"host":{"apiId":"/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps","connectionName":"shared_commondataserviceforapps_1","operationId":"aibuilderpredict_textrecognition"},"parameters":{"item/requestv2/base64Encoded":"@body('Get_file_content')","recordId":"86419a67-205a-454f-b6fc-601394f2786d"},"authentication":"@parameters('$authentication')"}},"Initialize_variable_EachPage":{"runAfter":{"StaticVariables":["Succeeded"]},"metadata":{"operationMetadataId":"bbda957a-609e-4ca5-97fb-356b2a294c4d"},"type":"InitializeVariable","inputs":{"variables":[{"name":"EachPage","type":"array"}]}},"PageNumbers":{"runAfter":{"Recognize_text_in_an_image_or_a_PDF_document":["Succeeded"]},"metadata":{"operationMetadataId":"370e3702-6ec7-426d-aa47-4053957c13c5"},"type":"Compose","inputs":"All","description":"Default is All for all pages. Otherwise, select which OCR file pages you want to pass on to the text conversion & GPT prompt by inputting each page number separated by a comma, ex: 1,2,5,6,7"},"StaticVariables":{"runAfter":{},"metadata":{"operationMetadataId":"a481bd89-b379-49fd-a408-8aa7c5b2d56f"},"type":"Compose","inputs":{"LineBreak":"@decodeUriComponent('%0A')","BlankSpaces":" "},"description":"BlankSpaces property allows the later FormTextPropertyWithHorizontalSpacing action to reference any number of blank lines to form the correct spacing between text coordinates."},"Convert_to_txt":{"actions":{"Combined_txt_output":{"runAfter":{"Select_ResortPagesAndLines":["Succeeded"]},"metadata":{"operationMetadataId":"daa1e0fe-4df0-477b-b32b-997f4ccbf8a2"},"type":"Compose","inputs":"@join(\r\nbody('Select_ResortPagesAndLines'), \r\nconcat(outputs('StaticVariables')?['LineBreak'], outputs('StaticVariables')?['LineBreak'], outputs('StaticVariables')?['LineBreak'])\r\n)"},"Select_ResortPagesAndLines":{"runAfter":{"Apply_to_each_Convert_to_txt":["Succeeded"]},"metadata":{"operationMetadataId":"16822721-9a21-46bd-8b8a-7f3f5663b7de"},"type":"Select","inputs":{"from":"@sort(variables('EachPage'))","select":"@join(skip(split(item(), '###'), 1), '')"},"description":"Since the above loop was collecting lines with concurrency on, the lines may not come out in order. That is why the last action in the loop appended the page # & vertical line # so they can be resorted here. Also removes the resort formatting."},"Apply_to_each_Convert_to_txt":{"foreach":"@body('Filter_array_RemoveUnselectedPageBlanks')","actions":{"RecordsSortedByCoordinates":{"runAfter":{"StaticPageVariables":["Succeeded"]},"metadata":{"operationMetadataId":"c924dcdb-3271-4f90-a1b1-9a4a17dffb4b"},"type":"Compose","inputs":"@sort(body('Select_AddProperties'), 'SortYX')"},"Select_FormTextPropertyWithHorizontalSpacing":{"runAfter":{"RecordsSortedByCoordinates":["Succeeded"]},"metadata":{"operationMetadataId":"fa26ad20-0cad-4bd7-9f5a-4631114c2c2b"},"type":"Select","inputs":{"from":"@range(0, length(outputs('RecordsSortedByCoordinates')))","select":"@addProperty(\r\noutputs('RecordsSortedByCoordinates')[item()],\r\n'TextWithSpacing',\r\n\r\nconcat(\r\ntake(outputs('StaticVariables')?['BlankSpaces'], \r\nmax(1, int(formatnumber(mul(\r\n sub(sub(outputs('RecordsSortedByCoordinates')[item()]?['RawMidX'], outputs('RecordsSortedByCoordinates')[item()]?['HalfCharLengthX']), if(or(equals(item(), 0), not(equals(outputs('RecordsSortedByCoordinates')[item()]?['SortY'], outputs('RecordsSortedByCoordinates')[sub(item(), 1)]?['SortY']))), sub(sub(outputs('StaticPageVariables')?['Min0XRawMidX'], outputs('StaticPageVariables')?['Min0XHalfCharLengthX']), float('.04')), add(outputs('RecordsSortedByCoordinates')[sub(item(), 1)]?['RawMidX'], outputs('RecordsSortedByCoordinates')[sub(item(), 1)]?['HalfCharLengthX']))),\r\n outputs('StaticPageVariables')?['ZoomX']), '#0')))\r\n),\r\noutputs('RecordsSortedByCoordinates')[item()]?['text']\r\n)\r\n\r\n)"},"description":"Calculates spacing between text pieces /w (Current MidX -1/2Current Character Length) - (Previous MidX + 1/2Previous Character Length). Also checks if each is a new-line piece & adjusts to spaces between the current piece & the page's left-most piece"},"Append_to_array_variable_EachPage":{"runAfter":{"Select_ArrayItemForEachHorizontalLine":["Succeeded"]},"metadata":{"operationMetadataId":"9f203c72-1312-43b3-a10d-d09c81d1c473"},"type":"AppendToArrayVariable","inputs":{"name":"EachPage","value":"@{formatnumber(items('Apply_to_each_Convert_to_txt')?['page'], 'D4')}###@{join(body('Select_ArrayItemForEachHorizontalLine'), outputs('StaticVariables')?['LineBreak'])}"}},"Select_ArrayItemForEachHorizontalLine":{"runAfter":{"Select_CombineAllTextWithSpacingAndSortY":["Succeeded"]},"metadata":{"operationMetadataId":"a4db395c-fae6-4953-a54a-af8ebd364309"},"type":"Select","inputs":{"from":"@range(int(outputs('StaticPageVariables')?['MinSortY']), int(outputs('StaticPageVariables')?['MaxSortY']))","select":"@join(\r\nreverse(\r\nskip(\r\nreverse(\r\nskip(\r\nsplit(join(body('Select_CombineAllTextWithSpacingAndSortY'), ''), concat(formatnumber(item(), 'D3'), '|~;')),\r\n1)\r\n),\r\n1)\r\n),\r\n''\r\n)"}},"Select_CombineAllTextWithSpacingAndSortY":{"runAfter":{"Select_FormTextPropertyWithHorizontalSpacing":["Succeeded"]},"metadata":{"operationMetadataId":"2995c262-6b37-4d84-bf97-3b86be967f1b"},"type":"Select","inputs":{"from":"@body('Select_FormTextPropertyWithHorizontalSpacing')","select":"@concat(item()['SortY'], '|~;', item()['TextWithSpacing'], item()['SortY'], '|~;')"}},"Select_AddProperties":{"runAfter":{},"metadata":{"operationMetadataId":"28a312bc-0836-4b6b-9de4-86c4a0df9da1"},"type":"Select","inputs":{"from":"@items('Apply_to_each_Convert_to_txt')?['lines']","select":"@addProperty(addProperty(addProperty(addProperty(addProperty(addProperty(item(),\r\n'SortY',\r\nformatNumber(int(formatNumber(mul(100, add(item()?['boundingBox']?['polygon']['coordinates'][0]['y'], div(sub(item()?['boundingBox']?['polygon']['coordinates'][3]['y'], item()?['boundingBox']?['polygon']['coordinates'][0]['y']), float(2)))), '#0')), 'D3')),\r\n'SortX',\r\nformatNumber(int(formatNumber(mul(100, add(item()?['boundingBox']?['polygon']['coordinates'][0]['x'], div(sub(item()?['boundingBox']?['polygon']['coordinates'][1]['x'], item()?['boundingBox']?['polygon']['coordinates'][0]['x']), float(2)))), '#0')), 'D3')),\r\n'SortYX',\r\nconcat(\r\nformatNumber(int(formatNumber(mul(100, add(item()?['boundingBox']?['polygon']['coordinates'][0]['y'], div(sub(item()?['boundingBox']?['polygon']['coordinates'][3]['y'], item()?['boundingBox']?['polygon']['coordinates'][0]['y']), 2))), '#0')), 'D3'),\r\nformatNumber(int(formatNumber(mul(100, add(item()?['boundingBox']?['polygon']['coordinates'][0]['x'], div(sub(item()?['boundingBox']?['polygon']['coordinates'][1]['x'], item()?['boundingBox']?['polygon']['coordinates'][0]['x']), float(2)))), '#0')), 'D3')\r\n)),\r\n'Raw0X',\r\nitem()?['boundingBox']?['polygon']['coordinates'][0]['x']),\r\n'RawMidX',\r\nadd(item()?['boundingBox']?['polygon']['coordinates'][0]['x'], div(sub(item()?['boundingBox']?['polygon']['coordinates'][1]['x'], item()?['boundingBox']?['polygon']['coordinates'][0]['x']), float(2)))),\r\n'HalfCharLengthX',\r\ndiv(length(item()?['text']), float(400)))"}},"StaticPageVariables":{"runAfter":{"Select_AddProperties":["Succeeded"]},"metadata":{"operationMetadataId":"f14f35fb-af34-4d5f-bb5e-85358645ffaa"},"type":"Compose","inputs":{"ZoomX":"@if(equals(1, length(body('Filter_array_RemoveUnselectedPageBlanks'))), 190,\r\nif(equals(2, length(body('Filter_array_RemoveUnselectedPageBlanks'))), 150,\r\nif(equals(3, length(body('Filter_array_RemoveUnselectedPageBlanks'))), 80, \r\n50)))","Min0X":"@first(Sort(body('Select_AddProperties'), 'Raw0X'))?['Raw0X']","Min0XRawMidX":"@first(Sort(body('Select_AddProperties'), 'Raw0X'))?['RawMidX']","Min0XHalfCharLengthX":"@first(Sort(body('Select_AddProperties'), 'Raw0X'))?['HalfCharLengthX']","MinSortY":"@First(Sort(body('Select_AddProperties'), 'SortY'))?['SortY']","MaxSortY":"@Last(Sort(body('Select_AddProperties'), 'SortY'))?['SortY']"},"description":" ZoomX sets the multiple/#spaces per coordinate point, 200=More Accurate 100=Less GPT Tokens. MinX variables help calculate left-margin cut-offs & save characters. Min & Max Y cut top & bot margins & help calculate the txt replica line breaks."}},"runAfter":{"Filter_array_RemoveUnselectedPageBlanks":["Succeeded"]},"metadata":{"operationMetadataId":"20fc68dc-7957-4123-86f6-a2e3757db81c"},"type":"Foreach","description":"Uses the identified text & associated text coordinates to build a text (txt) output that approximates all the text & text positioning in an image or PDF","runtimeConfiguration":{"concurrency":{"repetitions":50}}},"Filter_array_RemoveUnselectedPageBlanks":{"runAfter":{"Select_ReturnPageResults":["Succeeded"]},"metadata":{"operationMetadataId":"402e9795-0ad4-43a8-bf84-355f478385bd"},"type":"Query","inputs":{"from":"@body('Select_ReturnPageResults')","where":"@greater(length(string(item())), 0)"}},"Select_ReturnPageResults":{"runAfter":{},"metadata":{"operationMetadataId":"f1c310d8-eb49-46b4-91de-942c301b79b6"},"type":"Select","inputs":{"from":"@range(1, length(outputs('Recognize_text_in_an_image_or_a_PDF_document')?['body/responsev2/predictionOutput/results']))","select":"@if(or(equals('All', outputs('PageNumbers')), contains(split(replace(string(outputs('PageNumbers')), ' ', ''), ','), string(item()))), \r\noutputs('Recognize_text_in_an_image_or_a_PDF_document')?['body/responsev2/predictionOutput/results']?[sub(item(), 1)],\r\n'')"}}},"runAfter":{"PageNumbers":["Succeeded"]},"metadata":{"operationMetadataId":"4f0cf070-29be-4a1c-a44d-28324997081f"},"type":"Scope"}}},"connectionReferences":{"shared_commondataserviceforapps_1":{"connectionName":"shared-commondataser-5b71dc21-f15d-4d2f-b2fe-b201a568a0f2","source":"Embedded","id":"/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps","tier":"NotSpecified"},"shared_onedriveforbusiness_1":{"connectionName":"shared-onedriveforbu-dbe16364-6a03-40ca-8199-aaebc3241387","source":"Invoker","id":"/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness","tier":"NotSpecified"}},"flowFailureAlertSubscribed":false,"isManaged":false}} \ No newline at end of file diff --git a/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/manifest.json b/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/manifest.json new file mode 100644 index 0000000..a5eeba2 --- /dev/null +++ b/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/Microsoft.Flow/flows/manifest.json @@ -0,0 +1 @@ +{"packageSchemaVersion":"1.0","flowAssets":{"assetPaths":["d02adafe-f0e6-40c5-9efd-1d6196af87e7"]}} \ No newline at end of file diff --git a/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/manifest.json b/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/manifest.json new file mode 100644 index 0000000..b634cfe --- /dev/null +++ b/samples/ExtractDataFromPDFsAndImagesWithGPT/solution/GPTDataExtraction-PDFs&ImagesV2.7/manifest.json @@ -0,0 +1 @@ +{"schema":"1.0","details":{"displayName":"GPT Data Extraction - PDFs & Images V2.7","description":"","createdTime":"2023-08-30T18:54:23.7218933Z","packageTelemetryId":"348331b8-0755-4c65-8377-ebaa4232ed85","creator":"N/A","sourceEnvironment":""},"resources":{"d02adafe-f0e6-40c5-9efd-1d6196af87e7":{"type":"Microsoft.Flow/flows","suggestedCreationType":"New","creationType":"Existing, New, Update","details":{"displayName":"GPT Data Extraction - PDFs & Images V2.7"},"configurableBy":"User","hierarchy":"Root","dependsOn":["046d0d3e-1564-4eab-b2bc-c1abf3361f02","60e38b69-b97e-462a-a1fe-21c0ca05795f","6918a60c-aeef-4313-93dc-93a4628489df","2e6ea997-827b-4116-af72-75bccd815198"]},"046d0d3e-1564-4eab-b2bc-c1abf3361f02":{"id":"/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps","name":"shared_commondataserviceforapps","type":"Microsoft.PowerApps/apis","suggestedCreationType":"Existing","details":{"displayName":"Microsoft Dataverse","iconUri":"https://connectoricons-prod.azureedge.net/releases/v1.0.1651/1.0.1651.3382/commondataserviceforapps/icon.png"},"configurableBy":"System","hierarchy":"Child","dependsOn":[]},"60e38b69-b97e-462a-a1fe-21c0ca05795f":{"type":"Microsoft.PowerApps/apis/connections","suggestedCreationType":"Existing","creationType":"Existing","details":{"displayName":"OpExOptimization@ghsc-psm.org","iconUri":"https://connectoricons-prod.azureedge.net/releases/v1.0.1588/1.0.1588.2938/commondataserviceforapps/icon.png"},"configurableBy":"User","hierarchy":"Child","dependsOn":["046d0d3e-1564-4eab-b2bc-c1abf3361f02"]},"6918a60c-aeef-4313-93dc-93a4628489df":{"id":"/providers/Microsoft.PowerApps/apis/shared_onedriveforbusiness","name":"shared_onedriveforbusiness","type":"Microsoft.PowerApps/apis","suggestedCreationType":"Existing","details":{"displayName":"OneDrive for Business","iconUri":"https://connectoricons-prod.azureedge.net/releases/v1.0.1647/1.0.1647.3361/onedriveforbusiness/icon.png"},"configurableBy":"System","hierarchy":"Child","dependsOn":[]},"2e6ea997-827b-4116-af72-75bccd815198":{"type":"Microsoft.PowerApps/apis/connections","suggestedCreationType":"Existing","creationType":"Existing","details":{"displayName":"OpExOptimization@ghsc-psm.org","iconUri":"https://connectoricons-prod.azureedge.net/releases/v1.0.1546/1.0.1546.2665/onedriveforbusiness/icon.png"},"configurableBy":"User","hierarchy":"Child","dependsOn":["6918a60c-aeef-4313-93dc-93a4628489df"]}}} \ No newline at end of file