{"id":1692,"date":"2021-11-11T14:06:07","date_gmt":"2021-11-11T22:06:07","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/azure-sdk\/?p=1692"},"modified":"2021-11-11T15:18:30","modified_gmt":"2021-11-11T23:18:30","slug":"introducing-the-new-azure-form-recognizer-libraries-beta","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/azure-sdk\/introducing-the-new-azure-form-recognizer-libraries-beta\/","title":{"rendered":"Introducing the new Azure Form Recognizer libraries **Beta**"},"content":{"rendered":"<p>This blog post highlights important changes and features in the new <a href=\"https:\/\/docs.microsoft.com\/azure\/applied-ai-services\/form-recognizer\">Azure Form Recognizer<\/a> client libraries. You&#8217;re encouraged to try the libraries and provide feedback for consideration before the General Availability (GA) release.<\/p>\n<p>Some of the changes and new features in this beta release include:<\/p>\n<ul>\n<li>Introduction of <code>DocumentAnalysisClient<\/code> and <code>DocumentModelAdministrationClient<\/code><\/li>\n<li>Unification of the document analysis method to be used for prebuilt models and custom models<\/li>\n<li>General document analysis (<code>prebuilt-document<\/code>)<\/li>\n<li>Get\/list models and operations<\/li>\n<li>Cross-page elements &amp; bounding regions<\/li>\n<li>Build model<\/li>\n<\/ul>\n<p>In this blog post, Java is the primary language used to showcase the new features and changes. For language-specific improvements and features, see <a href=\"#conclusion\">Conclusion<\/a>.<\/p>\n<h2>Introduction of <code>DocumentAnalysisClient<\/code> and <code>DocumentModelAdministrationClient<\/code><\/h2>\n<p>This 4.0 Beta 1 version of the <code>azure-ai-formrecognizer<\/code> Java library replaces the <code>FormRecognizerClient<\/code> and <code>FormTrainingClient<\/code> with <code>DocumentAnalysisClient<\/code> and <code>DocumentModelAdministrationClient<\/code>, respectively. The new clients provide support for the features added by the service in API version <code>2021-09-30-preview<\/code> and later.<\/p>\n<p>Previously, instantiating <code>FormRecognizerClient<\/code> client with version 3.x.x:<\/p>\n<pre><code class=\"language-java\">FormRecognizerClient formRecognizerClient = new FormRecognizerClientBuilder()\r\n    .credential(new AzureKeyCredential(\"{key}\"))\r\n    .endpoint(\"{endpoint}\")\r\n    .buildClient();<\/code><\/pre>\n<p>Now, instantiating <code>DocumentAnalysisClient<\/code> client with version 4.x.x:<\/p>\n<pre><code class=\"language-java\">DocumentAnalysisClient documentAnalysisClient = new DocumentAnalysisClientBuilder()\r\n    .credential(new AzureKeyCredential(\"{key}\"))\r\n    .endpoint(\"{endpoint}\")\r\n    .buildClient();<\/code><\/pre>\n<p>Similarly, in 4.x.x, <code>FormTrainingClient<\/code> and <code>FormTrainingAsyncClient<\/code> were replaced with the <code>DocumentModelAdministrationClient<\/code> and <code>DocumentModelAdministrationAsyncClient<\/code>, instantiated via the <a href=\"https:\/\/docs.microsoft.com\/java\/api\/com.azure.ai.formrecognizer.administration.documentmodeladministrationclientbuilder?view=azure-java-preview\">DocumentModelAdministrationClientBuilder<\/a>. The synchronous and asynchronous operations are separated to <a href=\"https:\/\/docs.microsoft.com\/java\/api\/com.azure.ai.formrecognizer.administration.documentmodeladministrationclient?view=azure-java-preview\">DocumentModelAdministrationClient<\/a> and <a href=\"https:\/\/docs.microsoft.com\/java\/api\/com.azure.ai.formrecognizer.administration.documentmodeladministrationasyncclient?view=azure-java-preview\">DocumentModelAdministrationAsyncClient<\/a>.<\/p>\n<p>Previously, instantiating <code>FormTrainingClient<\/code> client with version 3.x.x:<\/p>\n<pre><code class=\"language-java\">FormTrainingClient formTrainingClient = new FormTrainingClientBuilder()\r\n    .credential(new AzureKeyCredential(\"{key}\"))\r\n    .endpoint(\"{endpoint}\")\r\n    .buildClient();<\/code><\/pre>\n<p>Now, instantiating <code>DocumentModelAdministrationClient<\/code> client with version 4.x.x:<\/p>\n<pre><code class=\"language-java\">DocumentModelAdministrationClient documentModelAdminClient = new DocumentModelAdministrationClientBuilder()\r\n    .credential(new AzureKeyCredential(\"{key}\"))\r\n    .endpoint(\"{endpoint}\")\r\n    .buildClient();<\/code><\/pre>\n<h2>Unification of the document analysis method<\/h2>\n<p>With 4.x.x, the following methods have been replaced with a unified method called <code>beginAnalyzeDocument<\/code>:<\/p>\n<ul>\n<li><code>beginRecognizeBusinessCards<\/code><\/li>\n<li><code>beginRecognizeContent<\/code><\/li>\n<li><code>beginRecognizeCustomForms<\/code><\/li>\n<li><code>beginRecognizeIdentityDocuments<\/code><\/li>\n<li><code>beginRecognizeInvoices<\/code><\/li>\n<li><code>beginRecognizeReceipts<\/code><\/li>\n<\/ul>\n<p>The 4.x.x version combines analysis for layout analysis, prebuilt models, and custom models into a single operation. It accepts a string with the desired model ID for analysis. The model ID can be any of the prebuilt model IDs, layout model ID, or a custom model ID.<\/p>\n<table>\n<thead>\n<tr>\n<th>3.1.x<\/th>\n<th>4.x.x<\/th>\n<th>Model ID<\/th>\n<th>Features<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>beginRecognizeBusinessCards<\/code> \/ <code>beginRecognizeBusinessCardsFromUrl<\/code><\/td>\n<td><code>beginAnalyzeDocument<\/code>\/<code>beginAnalyzeDocumentFromUrl<\/code><\/td>\n<td>&#8220;prebuilt-businessCard&#8221;<\/td>\n<td>Text extraction and prebuilt fields, and values related to English business cards<\/td>\n<\/tr>\n<tr>\n<td><code>beginRecognizeContent<\/code> \/ <code>beginRecognizeContentFromUrl<\/code><\/td>\n<td><code>beginAnalyzeDocument<\/code>\/<code>beginAnalyzeDocumentFromUrl<\/code><\/td>\n<td>&#8220;prebuilt-layout&#8221;<\/td>\n<td>Text extraction, selection marks, tables<\/td>\n<\/tr>\n<tr>\n<td><code>beginRecognizeCustomForms<\/code> \/ <code>beginRecognizeCustomFormsFromUrl<\/code><\/td>\n<td><code>beginAnalyzeDocument<\/code>\/<code>beginAnalyzeDocumentFromUrl<\/code><\/td>\n<td>&#8220;{custom-model-id}&#8221;<\/td>\n<td>Text extraction, selection marks, tables, labeled fields, and values from your custom documents<\/td>\n<\/tr>\n<tr>\n<td><code>beginRecognizeIdentityDocuments<\/code> \/ <code>beginRecognizeIdentityDocumentsFromUrl<\/code><\/td>\n<td><code>beginAnalyzeDocument<\/code>\/<code>beginAnalyzeDocumentFromUrl<\/code><\/td>\n<td>&#8220;prebuilt-idDocument&#8221;<\/td>\n<td>Text extraction and prebuilt fields and values related to US driver licenses and international passports<\/td>\n<\/tr>\n<tr>\n<td><code>beginRecognizeInvoices<\/code> \/ <code>beginRecognizeInvoicesFromUrl<\/code><\/td>\n<td><code>beginAnalyzeDocument<\/code>\/<code>beginAnalyzeDocumentFromUrl<\/code><\/td>\n<td>&#8220;prebuilt-invoice&#8221;<\/td>\n<td>Text extraction, selection marks, tables, and prebuilt fields and values related to English invoices<\/td>\n<\/tr>\n<tr>\n<td><code>beginRecognizeReceipts<\/code> \/ <code>beginRecognizeReceiptsFromUrl<\/code><\/td>\n<td><code>beginAnalyzeDocument<\/code>\/<code>beginAnalyzeDocumentFromUrl<\/code><\/td>\n<td>&#8220;prebuilt-receipt&#8221;<\/td>\n<td>Text extraction and prebuilt fields and values related to English sales receipts<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The unified method returns an <code>AnalyzeResult<\/code> model that improves the accessibility of the document elements (tables, words, styles) to the top level in contrast to the previously returned <code>RecognizedForm<\/code>.<\/p>\n<p>The list of supported prebuilt model IDs can be found <a href=\"https:\/\/aka.ms\/azsdk\/formrecognizer\/models\">here<\/a>.<\/p>\n<h2>General document analysis (<code>prebuilt-document<\/code>)<\/h2>\n<p>The 4.x.x version of the library:<\/p>\n<ul>\n<li>No longer requires training to extract general key-value pairs.<\/li>\n<li>Uses the prebuilt model `prebuilt-document to extracts entities, key-value pairs, and layout from a document.<\/li>\n<\/ul>\n<p>This <code>prebuilt-document<\/code> model provides a similar functionality to unlabeled custom models from the previous library without the need to train a model.<\/p>\n<h3>Example of using <code>prebuilt-document<\/code> for extracting document data<\/h3>\n<pre><code class=\"language-java\">String documentUrl = \"{document-url}\";\r\nString modelId = \"prebuilt-document\";\r\n\r\nSyncPoller&lt;DocumentOperationResult, AnalyzeResult&gt; analyzeDocumentPoller =\r\n    documentAnalysisClient.beginAnalyzeDocumentFromUrl(modelId, documentUrl);\r\n\r\nAnalyzeResult analyzeResult = analyzeDocumentPoller.getFinalResult();\r\n\r\n\/\/ extracting page level information of the document \r\nanalyzeResult.getPages().forEach(documentPage -&gt; {\r\n    System.out.printf(\"Page has width: %.2f and height: %.2f, measured with unit: %s%n\",\r\n        documentPage.getWidth(),\r\n        documentPage.getHeight(),\r\n        documentPage.getUnit());\r\n\r\n    \/\/ document element - lines accessible on page level\r\n    documentPage.getLines().forEach(documentLine -&gt;\r\n        System.out.printf(\"Line %s is within a bounding box %s.%n\",\r\n            documentLine.getContent(),\r\n            documentLine.getBoundingBox().toString()));\r\n\r\n    \/\/ document element - words accessible on page level\r\n    documentPage.getWords().forEach(documentWord -&gt;\r\n        System.out.printf(\"Word %s has a confidence score of %.2f%n.\",\r\n            documentWord.getContent(),\r\n            documentWord.getConfidence()));\r\n});\r\n\r\n\/\/ tables found in the document\r\nList&lt;DocumentTable&gt; tables = analyzeResult.getTables();\r\nfor (int i = 0; i &lt; tables.size(); i++) {\r\n    DocumentTable documentTable = tables.get(i);\r\n    System.out.printf(\"Table %d has %d rows and %d columns.%n\", i, documentTable.getRowCount(),\r\n        documentTable.getColumnCount());\r\n    documentTable.getCells().forEach(documentTableCell -&gt; {\r\n        System.out.printf(\"Cell '%s', has row index %d and column index %d.%n\",\r\n            documentTableCell.getContent(),\r\n            documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());\r\n    });\r\n    System.out.println();\r\n}\r\n\r\n\/\/ Entities analyzed from the document\r\nanalyzeResult.getEntities().forEach(documentEntity -&gt; {\r\n    System.out.printf(\"Entity category : %s, sub-category %s%n: \",\r\n        documentEntity.getCategory(), documentEntity.getSubCategory());\r\n    System.out.printf(\"Entity content: %s%n: \", documentEntity.getContent());\r\n    System.out.printf(\"Entity confidence: %.2f%n\", documentEntity.getConfidence());\r\n});\r\n\r\n\/\/ Key-value pairs extracted from the document\r\nanalyzeResult.getKeyValuePairs().forEach(documentKeyValuePair -&gt; {\r\n    System.out.printf(\"Key content: %s%n\", documentKeyValuePair.getKey().getContent());\r\n    System.out.printf(\"Key content bounding region: %s%n\",\r\n        documentKeyValuePair.getKey().getBoundingRegions().toString());\r\n\r\n    if (documentKeyValuePair.getValue() != null) {\r\n        System.out.printf(\"Value content: %s%n\", documentKeyValuePair.getValue().getContent());\r\n        System.out.printf(\"Value content bounding region: %s%n\", documentKeyValuePair.getValue().getBoundingRegions().toString());        \r\n    }\r\n});<\/code><\/pre>\n<h2>Get\/list models and operations<\/h2>\n<p>With 4.x.x, the <code>listModels<\/code> operation returns a paged list of prebuilt and custom models. Also, when using the <code>getModel<\/code> method the users can get the field schema (field names and types that the model can extract) for the model they specified.<\/p>\n<p>Furthermore, the <code>getModel<\/code> and <code>listModels<\/code> methods no longer return the models that didn&#8217;t succeed during model creation. These failed creation operations can only be retrieved using the <code>getOperation<\/code> and <code>listOperations<\/code> methods. However, these methods can only retrieve the data for an operation that has occurred in the past 24 hours.<\/p>\n<h2>Cross-page elements and bounding regions<\/h2>\n<p>The 4.x.x version of the Form Recognizer library provides an improved experience to define elements located on documents. It introduces the <code>BoundingRegion<\/code> model, which helps account for elements that can span multiple pages. Each bounding region is composed of the one-based page number and the bounding box coordinates within that page.<\/p>\n<h2>Build model<\/h2>\n<p>The <code>beginBuildModel<\/code> method of the 4.x.x library replaces the <code>beginTraining<\/code> method in the 3.1.x library. The <code>beginBuildModel<\/code> replaces the requirement of the <code>beginTraining<\/code> method for the required the <code>useTrainingLabels<\/code> parameter as we can use <code>prebuilt-document<\/code> model to extract general key-value pairs without training.<\/p>\n<p>With the 4.x.x version of the library:<\/p>\n<ul>\n<li>The newest Form Recognizer service APIs no longer require training to extract general key-value pairs and so have removed the <code>useTrainingLabels<\/code> parameter from <code>beginBuildModel<\/code>.<\/li>\n<li>Users can now assign their own model IDs and specify a description when building, composing, or copying models.<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>3.1.x<\/th>\n<th>4.x.x<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>beginTraining(String trainingFilesUrl, boolean useTrainingLabels, TrainingOptions trainingOptions)<\/code><\/td>\n<td><code>beginBuildModel(String trainingFilesUrl, String modelId, BuildModelOptions buildModelOptions)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Note:<\/strong>\nYou can use the <a href=\"https:\/\/aka.ms\/azsdk\/formrecognizer\/formrecognizerstudio\">Form Recognizer Studio preview<\/a> for creating a labeled file for your training forms.<\/p>\n<h2>Conclusion<\/h2>\n<p>The Form Recognizer libraries have enhanced analysis mechanisms and provided new features and capabilities.<\/p>\n<p>For language-specific reference documentation, examples, and migration guides, see the following resources:<\/p>\n<ul>\n<li>.NET: <a href=\"https:\/\/docs.microsoft.com\/dotnet\/api\/azure.ai.formrecognizer?view=azure-dotnet-preview\">Document Reference<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-net\/blob\/master\/sdk\/formrecognizer\/Azure.AI.FormRecognizer\/README.md\">README<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-net\/blob\/master\/sdk\/formrecognizer\/Azure.AI.FormRecognizer\/samples\/README.md\">Samples<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-net\/blob\/main\/sdk\/formrecognizer\/Azure.AI.FormRecognizer\/MigrationGuide.md\">Migration Guide<\/a><\/li>\n<li>Java: <a href=\"https:\/\/docs.microsoft.com\/java\/api\/overview\/azure\/ai-formrecognizer-readme?view=azure-java-preview\">Document Reference<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-java\/tree\/master\/sdk\/formrecognizer\/azure-ai-formrecognizer\/README.md\">README<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-java\/blob\/main\/sdk\/formrecognizer\/azure-ai-formrecognizer\/src\/samples\/README.md\">Samples<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-java\/blob\/main\/sdk\/formrecognizer\/azure-ai-formrecognizer\/migration-guide.md\">Migration Guide<\/a><\/li>\n<li>JavaScript\/TypeScript: <a href=\"https:\/\/docs.microsoft.com\/javascript\/api\/@azure\/ai-form-recognizer\/?view=azure-node-preview\">Document Reference<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-js\/tree\/master\/sdk\/formrecognizer\/ai-form-recognizer\/README.md\">README<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-js\/blob\/main\/sdk\/formrecognizer\/ai-form-recognizer\/samples\/v4-beta\/javascript\/README.md\">Samples<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-js\/blob\/main\/sdk\/formrecognizer\/ai-form-recognizer\/MIGRATION-v3_v4.md\">Migration Guide<\/a><\/li>\n<li>Python: <a href=\"https:\/\/docs.microsoft.com\/python\/api\/azure-ai-formrecognizer\/azure.ai.formrecognizer?view=azure-python-preview\">Document Reference<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-python\/tree\/master\/sdk\/formrecognizer\/azure-ai-formrecognizer\/README.md\">README<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-python\/blob\/master\/sdk\/formrecognizer\/azure-ai-formrecognizer\/samples\/README.md\">Samples<\/a> | <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-python\/blob\/main\/sdk\/formrecognizer\/azure-ai-formrecognizer\/MIGRATION_GUIDE.md\">Migration Guide<\/a><\/li>\n<\/ul>\n<p>You&#8217;re encouraged to provide feedback before the library reaches GA. To report issues or send feedback to the Azure SDK engineering team, use the language-specific links below:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-net\/issues\/new\/choose\">.NET<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-java\/issues\/new\/choose\">Java<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-js\/issues\/new\/choose\">JavaScript\/TypeScript<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-python\/issues\/new\/choose\">Python<\/a><\/li>\n<\/ul>\n<p><!-- FOOTER: DO NOT EDIT OR REMOVE --><\/p>\n<p><div  class=\"d-flex justify-content-center\"><a class=\"cta_button_link btn-primary mb-24\" href=\"https:\/\/aka.ms\/azsdk\/releases\" target=\"_blank\">Azure SDK Releases<\/a><\/div><\/p>\n<h2>Azure SDK Blog Contributions<\/h2>\n<p>Thank you for reading this Azure SDK blog post! We hope that you learned something new and welcome you to share this post. We&#8217;re open to Azure SDK blog contributions. Contact us at <a href=\"mailto:azsdkblog@microsoft.com\">azsdkblog@microsoft.com<\/a> with your idea, and we&#8217;ll get you set up as a guest blogger.<\/p>\n<h2>Azure SDK Links<\/h2>\n<ul>\n<li>Azure SDK Website: <a href=\"https:\/\/aka.ms\/azsdk\">aka.ms\/azsdk<\/a><\/li>\n<li>Azure SDK Intro (3-minute video): <a href=\"https:\/\/aka.ms\/azsdk\/intro\">aka.ms\/azsdk\/intro<\/a><\/li>\n<li>Azure SDK Intro Deck (PowerPoint deck): <a href=\"https:\/\/aka.ms\/azsdk\/intro\/deck\">aka.ms\/azsdk\/intro\/deck<\/a><\/li>\n<li>Azure SDK Releases: <a href=\"https:\/\/aka.ms\/azsdk\/releases\">aka.ms\/azsdk\/releases<\/a><\/li>\n<li>Azure SDK Blog: <a href=\"https:\/\/aka.ms\/azsdk\/blog\">aka.ms\/azsdk\/blog<\/a><\/li>\n<li>Azure SDK Twitter: <a href=\"https:\/\/twitter.com\/AzureSDK\">twitter.com\/AzureSDK<\/a><\/li>\n<li>Azure SDK Design Guidelines: <a href=\"https:\/\/aka.ms\/azsdk\/guide\">aka.ms\/azsdk\/guide<\/a><\/li>\n<li>Azure SDKs &amp; Tools: <a href=\"https:\/\/azure.microsoft.com\/downloads\">azure.microsoft.com\/downloads<\/a><\/li>\n<li>Azure SDK Central Repository: <a href=\"https:\/\/github.com\/azure\/azure-sdk#azure-sdk\">github.com\/azure\/azure-sdk<\/a><\/li>\n<li>Azure SDK for .NET: <a href=\"https:\/\/github.com\/azure\/azure-sdk-for-net\">github.com\/azure\/azure-sdk-for-net<\/a><\/li>\n<li>Azure SDK for Java: <a href=\"https:\/\/github.com\/azure\/azure-sdk-for-java\">github.com\/azure\/azure-sdk-for-java<\/a><\/li>\n<li>Azure SDK for Python: <a href=\"https:\/\/github.com\/azure\/azure-sdk-for-python\">github.com\/azure\/azure-sdk-for-python<\/a><\/li>\n<li>Azure SDK for JavaScript\/TypeScript: <a href=\"https:\/\/github.com\/azure\/azure-sdk-for-js\">github.com\/azure\/azure-sdk-for-js<\/a><\/li>\n<li>Azure SDK for Android: <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-android\">github.com\/Azure\/azure-sdk-for-android<\/a><\/li>\n<li>Azure SDK for iOS: <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-ios\">github.com\/Azure\/azure-sdk-for-ios<\/a><\/li>\n<li>Azure SDK for Go: <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-go\">github.com\/Azure\/azure-sdk-for-go<\/a><\/li>\n<li>Azure SDK for C: <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-c\">github.com\/Azure\/azure-sdk-for-c<\/a><\/li>\n<li>Azure SDK for C++: <a href=\"https:\/\/github.com\/Azure\/azure-sdk-for-cpp\">github.com\/Azure\/azure-sdk-for-cpp<\/a><\/li>\n<\/ul>\n<p><!-- FOOTER: DO NOT EDIT OR REMOVE --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article introduces new beta features in the Azure Form Recognizer client libraries.<\/p>\n","protected":false},"author":31979,"featured_media":1698,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[701,750,767,749,160,159,793,162,733],"class_list":["post-1692","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure-sdk","tag-net","tag-azure-sdk","tag-cognitive","tag-form-recognizer","tag-java","tag-javascript","tag-preview","tag-python","tag-typescript"],"acf":[],"blog_post_summary":"<p>This article introduces new beta features in the Azure Form Recognizer client libraries.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/posts\/1692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/users\/31979"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/comments?post=1692"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/posts\/1692\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/media\/1698"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/media?parent=1692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/categories?post=1692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sdk\/wp-json\/wp\/v2\/tags?post=1692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}