mindee-lite 5.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.editorconfig +24 -0
- data/.gitattributes +14 -0
- data/.gitignore +76 -0
- data/.gitmodules +3 -0
- data/.pre-commit-config.yaml +36 -0
- data/.rubocop.yml +49 -0
- data/.yardopts +4 -0
- data/CHANGELOG.md +515 -0
- data/CODE_OF_CONDUCT.md +129 -0
- data/CONTRIBUTING.md +107 -0
- data/Gemfile +14 -0
- data/LICENSE +21 -0
- data/README.md +42 -0
- data/Rakefile +40 -0
- data/Steepfile +30 -0
- data/bin/console +14 -0
- data/bin/mindee.rb +30 -0
- data/bin/v1/parser.rb +153 -0
- data/bin/v1/products.rb +88 -0
- data/bin/v2/parser.rb +235 -0
- data/bin/v2/products.rb +34 -0
- data/docs/code_samples/bank_account_details_v1.txt +24 -0
- data/docs/code_samples/bank_account_details_v2.txt +24 -0
- data/docs/code_samples/bank_statement_fr_v2_async.txt +24 -0
- data/docs/code_samples/barcode_reader_v1.txt +24 -0
- data/docs/code_samples/cropper_v1.txt +21 -0
- data/docs/code_samples/default.txt +30 -0
- data/docs/code_samples/default_async.txt +29 -0
- data/docs/code_samples/expense_receipts_v5.txt +25 -0
- data/docs/code_samples/expense_receipts_v5_async.txt +24 -0
- data/docs/code_samples/financial_document_v1.txt +25 -0
- data/docs/code_samples/financial_document_v1_async.txt +24 -0
- data/docs/code_samples/idcard_fr_v1.txt +24 -0
- data/docs/code_samples/idcard_fr_v2.txt +24 -0
- data/docs/code_samples/international_id_v2_async.txt +24 -0
- data/docs/code_samples/invoice_splitter_v1_async.txt +24 -0
- data/docs/code_samples/invoices_v4.txt +25 -0
- data/docs/code_samples/invoices_v4_async.txt +24 -0
- data/docs/code_samples/multi_receipts_detector_v1.txt +24 -0
- data/docs/code_samples/passport_v1.txt +24 -0
- data/docs/code_samples/resume_v1_async.txt +24 -0
- data/docs/code_samples/v2_classification.txt +30 -0
- data/docs/code_samples/v2_crop.txt +30 -0
- data/docs/code_samples/v2_extraction.txt +42 -0
- data/docs/code_samples/v2_extraction_webhook.txt +45 -0
- data/docs/code_samples/v2_ocr.txt +30 -0
- data/docs/code_samples/v2_split.txt +30 -0
- data/docs/code_samples/workflow_execution.txt +28 -0
- data/docs/code_samples/workflow_polling.txt +35 -0
- data/examples/auto_invoice_splitter_extraction.rb +48 -0
- data/examples/auto_multi_receipts_detector_extraction.rb +30 -0
- data/lib/mindee/dependency.rb +29 -0
- data/lib/mindee/error/mindee_error.rb +17 -0
- data/lib/mindee/error/mindee_http_error.rb +36 -0
- data/lib/mindee/error/mindee_http_error_v2.rb +45 -0
- data/lib/mindee/error/mindee_http_unknown_error_v2.rb +18 -0
- data/lib/mindee/error/mindee_input_error.rb +30 -0
- data/lib/mindee/error.rb +6 -0
- data/lib/mindee/geometry/min_max.rb +23 -0
- data/lib/mindee/geometry/point.rb +41 -0
- data/lib/mindee/geometry/polygon.rb +37 -0
- data/lib/mindee/geometry/quadrilateral.rb +50 -0
- data/lib/mindee/geometry/utils.rb +88 -0
- data/lib/mindee/geometry.rb +7 -0
- data/lib/mindee/http/.rubocop.yml +7 -0
- data/lib/mindee/http/http_error_handler.rb +106 -0
- data/lib/mindee/http/response_validation.rb +81 -0
- data/lib/mindee/http.rb +3 -0
- data/lib/mindee/image/extracted_image.rb +89 -0
- data/lib/mindee/image/image_compressor.rb +29 -0
- data/lib/mindee/image/image_extractor.rb +118 -0
- data/lib/mindee/image/image_utils.rb +165 -0
- data/lib/mindee/image.rb +6 -0
- data/lib/mindee/input/base_parameters.rb +149 -0
- data/lib/mindee/input/local_response.rb +80 -0
- data/lib/mindee/input/polling_options.rb +26 -0
- data/lib/mindee/input/sources/base64_input_source.rb +31 -0
- data/lib/mindee/input/sources/bytes_input_source.rb +21 -0
- data/lib/mindee/input/sources/file_input_source.rb +20 -0
- data/lib/mindee/input/sources/local_input_source.rb +216 -0
- data/lib/mindee/input/sources/path_input_source.rb +20 -0
- data/lib/mindee/input/sources/url_input_source.rb +130 -0
- data/lib/mindee/input/sources.rb +8 -0
- data/lib/mindee/input.rb +4 -0
- data/lib/mindee/logging/logger.rb +24 -0
- data/lib/mindee/logging.rb +3 -0
- data/lib/mindee/page_options.rb +24 -0
- data/lib/mindee/pdf/extracted_pdf.rb +70 -0
- data/lib/mindee/pdf/pdf_compressor.rb +121 -0
- data/lib/mindee/pdf/pdf_extractor.rb +121 -0
- data/lib/mindee/pdf/pdf_processor.rb +91 -0
- data/lib/mindee/pdf/pdf_tools.rb +201 -0
- data/lib/mindee/pdf.rb +7 -0
- data/lib/mindee/v1/client.rb +490 -0
- data/lib/mindee/v1/extraction/multi_receipts_extractor.rb +32 -0
- data/lib/mindee/v1/extraction.rb +3 -0
- data/lib/mindee/v1/http/.rubocop.yml +7 -0
- data/lib/mindee/v1/http/endpoint.rb +221 -0
- data/lib/mindee/v1/http/workflow_endpoint.rb +93 -0
- data/lib/mindee/v1/http.rb +4 -0
- data/lib/mindee/v1/parsing/common/api_request.rb +38 -0
- data/lib/mindee/v1/parsing/common/api_response.rb +63 -0
- data/lib/mindee/v1/parsing/common/document.rb +86 -0
- data/lib/mindee/v1/parsing/common/execution.rb +78 -0
- data/lib/mindee/v1/parsing/common/execution_file.rb +26 -0
- data/lib/mindee/v1/parsing/common/execution_priority.rb +38 -0
- data/lib/mindee/v1/parsing/common/extras/cropper_extra.rb +32 -0
- data/lib/mindee/v1/parsing/common/extras/extras.rb +62 -0
- data/lib/mindee/v1/parsing/common/extras/full_text_ocr_extra.rb +35 -0
- data/lib/mindee/v1/parsing/common/extras/rag_extra.rb +28 -0
- data/lib/mindee/v1/parsing/common/extras.rb +6 -0
- data/lib/mindee/v1/parsing/common/inference.rb +69 -0
- data/lib/mindee/v1/parsing/common/job.rb +48 -0
- data/lib/mindee/v1/parsing/common/ocr/mvision_v1.rb +52 -0
- data/lib/mindee/v1/parsing/common/ocr/ocr.rb +180 -0
- data/lib/mindee/v1/parsing/common/ocr.rb +3 -0
- data/lib/mindee/v1/parsing/common/orientation.rb +28 -0
- data/lib/mindee/v1/parsing/common/page.rb +49 -0
- data/lib/mindee/v1/parsing/common/prediction.rb +19 -0
- data/lib/mindee/v1/parsing/common/product.rb +26 -0
- data/lib/mindee/v1/parsing/common/workflow_response.rb +30 -0
- data/lib/mindee/v1/parsing/common.rb +15 -0
- data/lib/mindee/v1/parsing/standard/abstract_field.rb +74 -0
- data/lib/mindee/v1/parsing/standard/address_field.rb +51 -0
- data/lib/mindee/v1/parsing/standard/amount_field.rb +28 -0
- data/lib/mindee/v1/parsing/standard/base_field.rb +30 -0
- data/lib/mindee/v1/parsing/standard/boolean_field.rb +29 -0
- data/lib/mindee/v1/parsing/standard/classification_field.rb +18 -0
- data/lib/mindee/v1/parsing/standard/company_registration_field.rb +45 -0
- data/lib/mindee/v1/parsing/standard/date_field.rb +40 -0
- data/lib/mindee/v1/parsing/standard/feature_field.rb +26 -0
- data/lib/mindee/v1/parsing/standard/locale_field.rb +52 -0
- data/lib/mindee/v1/parsing/standard/payment_details_field.rb +44 -0
- data/lib/mindee/v1/parsing/standard/position_field.rb +61 -0
- data/lib/mindee/v1/parsing/standard/string_field.rb +26 -0
- data/lib/mindee/v1/parsing/standard/tax_field.rb +110 -0
- data/lib/mindee/v1/parsing/standard.rb +15 -0
- data/lib/mindee/v1/parsing/universal/universal_list_field.rb +60 -0
- data/lib/mindee/v1/parsing/universal/universal_object_field.rb +123 -0
- data/lib/mindee/v1/parsing/universal.rb +4 -0
- data/lib/mindee/v1/parsing.rb +5 -0
- data/lib/mindee/v1/product/.rubocop.yml +12 -0
- data/lib/mindee/v1/product/barcode_reader/barcode_reader_v1.rb +47 -0
- data/lib/mindee/v1/product/barcode_reader/barcode_reader_v1_document.rb +47 -0
- data/lib/mindee/v1/product/barcode_reader/barcode_reader_v1_page.rb +38 -0
- data/lib/mindee/v1/product/cropper/cropper_v1.rb +47 -0
- data/lib/mindee/v1/product/cropper/cropper_v1_document.rb +15 -0
- data/lib/mindee/v1/product/cropper/cropper_v1_page.rb +55 -0
- data/lib/mindee/v1/product/financial_document/financial_document_v1.rb +47 -0
- data/lib/mindee/v1/product/financial_document/financial_document_v1_document.rb +329 -0
- data/lib/mindee/v1/product/financial_document/financial_document_v1_line_item.rb +124 -0
- data/lib/mindee/v1/product/financial_document/financial_document_v1_line_items.rb +64 -0
- data/lib/mindee/v1/product/financial_document/financial_document_v1_page.rb +38 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v1.rb +49 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_document.rb +49 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_page.rb +40 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2.rb +49 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_bban.rb +63 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_document.rb +60 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_page.rb +40 -0
- data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2.rb +49 -0
- data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_document.rb +169 -0
- data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_page.rb +40 -0
- data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_transaction.rb +78 -0
- data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_transactions.rb +56 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v1.rb +49 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v1_document.rb +106 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v1_page.rb +57 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v2.rb +49 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v2_document.rb +143 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v2_page.rb +65 -0
- data/lib/mindee/v1/product/international_id/international_id_v2.rb +47 -0
- data/lib/mindee/v1/product/international_id/international_id_v2_document.rb +164 -0
- data/lib/mindee/v1/product/international_id/international_id_v2_page.rb +38 -0
- data/lib/mindee/v1/product/invoice/invoice_v4.rb +47 -0
- data/lib/mindee/v1/product/invoice/invoice_v4_document.rb +300 -0
- data/lib/mindee/v1/product/invoice/invoice_v4_line_item.rb +124 -0
- data/lib/mindee/v1/product/invoice/invoice_v4_line_items.rb +64 -0
- data/lib/mindee/v1/product/invoice/invoice_v4_page.rb +38 -0
- data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1.rb +47 -0
- data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_document.rb +66 -0
- data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_group.rb +58 -0
- data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_groups.rb +50 -0
- data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_page.rb +38 -0
- data/lib/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1.rb +47 -0
- data/lib/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_document.rb +38 -0
- data/lib/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_page.rb +38 -0
- data/lib/mindee/v1/product/passport/passport_v1.rb +47 -0
- data/lib/mindee/v1/product/passport/passport_v1_document.rb +112 -0
- data/lib/mindee/v1/product/passport/passport_v1_page.rb +38 -0
- data/lib/mindee/v1/product/receipt/receipt_v5.rb +47 -0
- data/lib/mindee/v1/product/receipt/receipt_v5_document.rb +187 -0
- data/lib/mindee/v1/product/receipt/receipt_v5_line_item.rb +88 -0
- data/lib/mindee/v1/product/receipt/receipt_v5_line_items.rb +56 -0
- data/lib/mindee/v1/product/receipt/receipt_v5_page.rb +38 -0
- data/lib/mindee/v1/product/resume/resume_v1.rb +47 -0
- data/lib/mindee/v1/product/resume/resume_v1_certificate.rb +82 -0
- data/lib/mindee/v1/product/resume/resume_v1_certificates.rb +60 -0
- data/lib/mindee/v1/product/resume/resume_v1_document.rb +340 -0
- data/lib/mindee/v1/product/resume/resume_v1_education.rb +106 -0
- data/lib/mindee/v1/product/resume/resume_v1_educations.rb +66 -0
- data/lib/mindee/v1/product/resume/resume_v1_language.rb +66 -0
- data/lib/mindee/v1/product/resume/resume_v1_languages.rb +56 -0
- data/lib/mindee/v1/product/resume/resume_v1_page.rb +38 -0
- data/lib/mindee/v1/product/resume/resume_v1_professional_experience.rb +122 -0
- data/lib/mindee/v1/product/resume/resume_v1_professional_experiences.rb +70 -0
- data/lib/mindee/v1/product/resume/resume_v1_social_networks_url.rb +66 -0
- data/lib/mindee/v1/product/resume/resume_v1_social_networks_urls.rb +56 -0
- data/lib/mindee/v1/product/universal/universal.rb +48 -0
- data/lib/mindee/v1/product/universal/universal_document.rb +35 -0
- data/lib/mindee/v1/product/universal/universal_page.rb +54 -0
- data/lib/mindee/v1/product/universal/universal_prediction.rb +128 -0
- data/lib/mindee/v1/product.rb +18 -0
- data/lib/mindee/v1.rb +7 -0
- data/lib/mindee/v2/client.rb +132 -0
- data/lib/mindee/v2/file_operation/crop.rb +51 -0
- data/lib/mindee/v2/file_operation/crop_files.rb +25 -0
- data/lib/mindee/v2/file_operation/split.rb +37 -0
- data/lib/mindee/v2/file_operation/split_files.rb +25 -0
- data/lib/mindee/v2/file_operation.rb +6 -0
- data/lib/mindee/v2/http/.rubocop.yml +7 -0
- data/lib/mindee/v2/http/api_v2_settings.rb +65 -0
- data/lib/mindee/v2/http/mindee_api_v2.rb +230 -0
- data/lib/mindee/v2/http.rb +4 -0
- data/lib/mindee/v2/parsing/base_inference.rb +44 -0
- data/lib/mindee/v2/parsing/base_response.rb +15 -0
- data/lib/mindee/v2/parsing/common_response.rb +20 -0
- data/lib/mindee/v2/parsing/error_item.rb +21 -0
- data/lib/mindee/v2/parsing/error_response.rb +51 -0
- data/lib/mindee/v2/parsing/field/base_field.rb +63 -0
- data/lib/mindee/v2/parsing/field/field_confidence.rb +128 -0
- data/lib/mindee/v2/parsing/field/field_location.rb +33 -0
- data/lib/mindee/v2/parsing/field/inference_fields.rb +105 -0
- data/lib/mindee/v2/parsing/field/list_field.rb +79 -0
- data/lib/mindee/v2/parsing/field/object_field.rb +138 -0
- data/lib/mindee/v2/parsing/field/simple_field.rb +60 -0
- data/lib/mindee/v2/parsing/field.rb +9 -0
- data/lib/mindee/v2/parsing/inference_active_options.rb +67 -0
- data/lib/mindee/v2/parsing/inference_file.rb +38 -0
- data/lib/mindee/v2/parsing/inference_job.rb +25 -0
- data/lib/mindee/v2/parsing/inference_model.rb +30 -0
- data/lib/mindee/v2/parsing/job.rb +93 -0
- data/lib/mindee/v2/parsing/job_response.rb +30 -0
- data/lib/mindee/v2/parsing/job_webhook.rb +59 -0
- data/lib/mindee/v2/parsing/rag_metadata.rb +17 -0
- data/lib/mindee/v2/parsing/raw_text.rb +27 -0
- data/lib/mindee/v2/parsing/raw_text_page.rb +24 -0
- data/lib/mindee/v2/parsing/search/pagination_metadata.rb +44 -0
- data/lib/mindee/v2/parsing/search/search_model.rb +38 -0
- data/lib/mindee/v2/parsing/search/search_models.rb +34 -0
- data/lib/mindee/v2/parsing/search/search_response.rb +38 -0
- data/lib/mindee/v2/parsing/search.rb +6 -0
- data/lib/mindee/v2/parsing.rb +16 -0
- data/lib/mindee/v2/product/base_product.rb +28 -0
- data/lib/mindee/v2/product/classification/classification.rb +20 -0
- data/lib/mindee/v2/product/classification/classification_classifier.rb +25 -0
- data/lib/mindee/v2/product/classification/classification_inference.rb +35 -0
- data/lib/mindee/v2/product/classification/classification_response.rb +32 -0
- data/lib/mindee/v2/product/classification/classification_result.rb +27 -0
- data/lib/mindee/v2/product/classification/params/classification_parameters.rb +47 -0
- data/lib/mindee/v2/product/crop/crop.rb +20 -0
- data/lib/mindee/v2/product/crop/crop_inference.rb +34 -0
- data/lib/mindee/v2/product/crop/crop_item.rb +39 -0
- data/lib/mindee/v2/product/crop/crop_response.rb +40 -0
- data/lib/mindee/v2/product/crop/crop_result.rb +34 -0
- data/lib/mindee/v2/product/crop/params/crop_parameters.rb +47 -0
- data/lib/mindee/v2/product/extraction/extraction.rb +21 -0
- data/lib/mindee/v2/product/extraction/extraction_inference.rb +40 -0
- data/lib/mindee/v2/product/extraction/extraction_response.rb +32 -0
- data/lib/mindee/v2/product/extraction/extraction_result.rb +44 -0
- data/lib/mindee/v2/product/extraction/params/data_schema.rb +51 -0
- data/lib/mindee/v2/product/extraction/params/data_schema_field.rb +69 -0
- data/lib/mindee/v2/product/extraction/params/data_schema_replace.rb +39 -0
- data/lib/mindee/v2/product/extraction/params/extraction_parameters.rb +125 -0
- data/lib/mindee/v2/product/ocr/ocr.rb +20 -0
- data/lib/mindee/v2/product/ocr/ocr_inference.rb +34 -0
- data/lib/mindee/v2/product/ocr/ocr_page.rb +33 -0
- data/lib/mindee/v2/product/ocr/ocr_response.rb +32 -0
- data/lib/mindee/v2/product/ocr/ocr_result.rb +34 -0
- data/lib/mindee/v2/product/ocr/ocr_word.rb +29 -0
- data/lib/mindee/v2/product/ocr/params/ocr_parameters.rb +47 -0
- data/lib/mindee/v2/product/split/params/split_parameters.rb +48 -0
- data/lib/mindee/v2/product/split/split.rb +19 -0
- data/lib/mindee/v2/product/split/split_inference.rb +34 -0
- data/lib/mindee/v2/product/split/split_range.rb +38 -0
- data/lib/mindee/v2/product/split/split_response.rb +40 -0
- data/lib/mindee/v2/product/split/split_result.rb +34 -0
- data/lib/mindee/v2/product.rb +7 -0
- data/lib/mindee/v2.rb +7 -0
- data/lib/mindee/version.rb +26 -0
- data/lib/mindee.rb +135 -0
- data/mindee-lite.gemspec +36 -0
- data/mindee.gemspec +44 -0
- data/sig/custom/marcel.rbs +3 -0
- data/sig/custom/mini_magick.rbs +31 -0
- data/sig/custom/net_http.rbs +43 -0
- data/sig/custom/origami.rbs +59 -0
- data/sig/mindee/dependency.rbs +13 -0
- data/sig/mindee/error/mindee_error.rbs +13 -0
- data/sig/mindee/error/mindee_http_error.rbs +17 -0
- data/sig/mindee/error/mindee_http_error_v2.rbs +15 -0
- data/sig/mindee/error/mindee_http_unknown_error_v2.rbs +9 -0
- data/sig/mindee/error/mindee_input_error.rbs +18 -0
- data/sig/mindee/geometry/min_max.rbs +11 -0
- data/sig/mindee/geometry/point.rbs +14 -0
- data/sig/mindee/geometry/polygon.rbs +12 -0
- data/sig/mindee/geometry/quadrilateral.rbs +15 -0
- data/sig/mindee/geometry/utils.rbs +13 -0
- data/sig/mindee/http/http_error_handler.rbs +15 -0
- data/sig/mindee/http/response_validation.rbs +11 -0
- data/sig/mindee/image/extracted_image.rbs +21 -0
- data/sig/mindee/image/image_compressor.rbs +8 -0
- data/sig/mindee/image/image_extractor.rbs +13 -0
- data/sig/mindee/image/image_utils.rbs +19 -0
- data/sig/mindee/input/base_parameters.rbs +35 -0
- data/sig/mindee/input/local_response.rbs +14 -0
- data/sig/mindee/input/polling_options.rbs +12 -0
- data/sig/mindee/input/sources/base64_input_source.rbs +11 -0
- data/sig/mindee/input/sources/bytes_input_source.rbs +10 -0
- data/sig/mindee/input/sources/file_input_source.rbs +10 -0
- data/sig/mindee/input/sources/local_input_source.rbs +30 -0
- data/sig/mindee/input/sources/path_input_source.rbs +10 -0
- data/sig/mindee/input/sources/url_input_source.rbs +20 -0
- data/sig/mindee/logging/logger.rbs +11 -0
- data/sig/mindee/page_options.rbs +11 -0
- data/sig/mindee/pdf/extracted_pdf.rbs +17 -0
- data/sig/mindee/pdf/pdf_compressor.rbs +15 -0
- data/sig/mindee/pdf/pdf_extractor.rbs +19 -0
- data/sig/mindee/pdf/pdf_processor.rbs +12 -0
- data/sig/mindee/pdf/pdf_tools.rbs +31 -0
- data/sig/mindee/v1/client.rbs +84 -0
- data/sig/mindee/v1/extraction/multi_receipts_extractor.rbs +8 -0
- data/sig/mindee/v1/http/endpoint.rbs +41 -0
- data/sig/mindee/v1/http/workflow_endpoint.rbs +22 -0
- data/sig/mindee/v1/parsing/common/api_request.rbs +22 -0
- data/sig/mindee/v1/parsing/common/api_response.rbs +31 -0
- data/sig/mindee/v1/parsing/common/document.rbs +32 -0
- data/sig/mindee/v1/parsing/common/execution.rbs +26 -0
- data/sig/mindee/v1/parsing/common/execution_file.rbs +16 -0
- data/sig/mindee/v1/parsing/common/execution_priority.rbs +16 -0
- data/sig/mindee/v1/parsing/common/extras/cropper_extra.rbs +18 -0
- data/sig/mindee/v1/parsing/common/extras/extras.rbs +24 -0
- data/sig/mindee/v1/parsing/common/extras/full_text_ocr_extra.rbs +22 -0
- data/sig/mindee/v1/parsing/common/extras/rag_extra.rbs +19 -0
- data/sig/mindee/v1/parsing/common/inference.rbs +31 -0
- data/sig/mindee/v1/parsing/common/job.rbs +24 -0
- data/sig/mindee/v1/parsing/common/ocr/mvision_v1.rbs +20 -0
- data/sig/mindee/v1/parsing/common/ocr/ocr.rbs +56 -0
- data/sig/mindee/v1/parsing/common/orientation.rbs +15 -0
- data/sig/mindee/v1/parsing/common/page.rbs +19 -0
- data/sig/mindee/v1/parsing/common/prediction.rbs +14 -0
- data/sig/mindee/v1/parsing/common/product.rbs +16 -0
- data/sig/mindee/v1/parsing/common/workflow_response.rbs +22 -0
- data/sig/mindee/v1/parsing/standard/abstract_field.rbs +30 -0
- data/sig/mindee/v1/parsing/standard/address_field.rbs +28 -0
- data/sig/mindee/v1/parsing/standard/amount_field.rbs +16 -0
- data/sig/mindee/v1/parsing/standard/base_field.rbs +16 -0
- data/sig/mindee/v1/parsing/standard/boolean_field.rbs +16 -0
- data/sig/mindee/v1/parsing/standard/classification_field.rbs +12 -0
- data/sig/mindee/v1/parsing/standard/company_registration_field.rbs +20 -0
- data/sig/mindee/v1/parsing/standard/date_field.rbs +20 -0
- data/sig/mindee/v1/parsing/standard/feature_field.rbs +12 -0
- data/sig/mindee/v1/parsing/standard/locale_field.rbs +24 -0
- data/sig/mindee/v1/parsing/standard/payment_details_field.rbs +19 -0
- data/sig/mindee/v1/parsing/standard/position_field.rbs +26 -0
- data/sig/mindee/v1/parsing/standard/string_field.rbs +16 -0
- data/sig/mindee/v1/parsing/standard/tax_field.rbs +33 -0
- data/sig/mindee/v1/parsing/universal/universal_list_field.rbs +21 -0
- data/sig/mindee/v1/parsing/universal/universal_object_field.rbs +38 -0
- data/sig/mindee/v1/product/barcode_reader/barcode_reader_v1.rbs +13 -0
- data/sig/mindee/v1/product/barcode_reader/barcode_reader_v1_document.rbs +16 -0
- data/sig/mindee/v1/product/barcode_reader/barcode_reader_v1_page.rbs +17 -0
- data/sig/mindee/v1/product/cropper/cropper_v1.rbs +13 -0
- data/sig/mindee/v1/product/cropper/cropper_v1_document.rbs +14 -0
- data/sig/mindee/v1/product/cropper/cropper_v1_page.rbs +19 -0
- data/sig/mindee/v1/product/financial_document/financial_document_v1.rbs +13 -0
- data/sig/mindee/v1/product/financial_document/financial_document_v1_document.rbs +49 -0
- data/sig/mindee/v1/product/financial_document/financial_document_v1_line_item.rbs +35 -0
- data/sig/mindee/v1/product/financial_document/financial_document_v1_line_items.rbs +15 -0
- data/sig/mindee/v1/product/financial_document/financial_document_v1_page.rbs +17 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v1.rbs +15 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_document.rbs +19 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_page.rbs +19 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2.rbs +15 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_bban.rbs +25 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_document.rbs +20 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_page.rbs +19 -0
- data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2.rbs +15 -0
- data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_document.rbs +31 -0
- data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_page.rbs +19 -0
- data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_transaction.rbs +27 -0
- data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_transactions.rbs +17 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v1.rbs +15 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v1_document.rbs +26 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v1_page.rbs +20 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v2.rbs +15 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v2_document.rbs +31 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v2_page.rbs +21 -0
- data/sig/mindee/v1/product/international_id/international_id_v2.rbs +13 -0
- data/sig/mindee/v1/product/international_id/international_id_v2_document.rbs +31 -0
- data/sig/mindee/v1/product/international_id/international_id_v2_page.rbs +17 -0
- data/sig/mindee/v1/product/invoice/invoice_v4.rbs +13 -0
- data/sig/mindee/v1/product/invoice/invoice_v4_document.rbs +45 -0
- data/sig/mindee/v1/product/invoice/invoice_v4_line_item.rbs +35 -0
- data/sig/mindee/v1/product/invoice/invoice_v4_line_items.rbs +15 -0
- data/sig/mindee/v1/product/invoice/invoice_v4_page.rbs +17 -0
- data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1.rbs +13 -0
- data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_document.rbs +17 -0
- data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_group.rbs +21 -0
- data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_groups.rbs +15 -0
- data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_page.rbs +17 -0
- data/sig/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1.rbs +14 -0
- data/sig/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_document.rbs +15 -0
- data/sig/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_page.rbs +17 -0
- data/sig/mindee/v1/product/passport/passport_v1.rbs +13 -0
- data/sig/mindee/v1/product/passport/passport_v1_document.rbs +25 -0
- data/sig/mindee/v1/product/passport/passport_v1_page.rbs +17 -0
- data/sig/mindee/v1/product/receipt/receipt_v5.rbs +13 -0
- data/sig/mindee/v1/product/receipt/receipt_v5_document.rbs +33 -0
- data/sig/mindee/v1/product/receipt/receipt_v5_line_item.rbs +27 -0
- data/sig/mindee/v1/product/receipt/receipt_v5_line_items.rbs +15 -0
- data/sig/mindee/v1/product/receipt/receipt_v5_page.rbs +17 -0
- data/sig/mindee/v1/product/resume/resume_v1.rbs +13 -0
- data/sig/mindee/v1/product/resume/resume_v1_certificate.rbs +27 -0
- data/sig/mindee/v1/product/resume/resume_v1_certificates.rbs +17 -0
- data/sig/mindee/v1/product/resume/resume_v1_document.rbs +69 -0
- data/sig/mindee/v1/product/resume/resume_v1_education.rbs +33 -0
- data/sig/mindee/v1/product/resume/resume_v1_educations.rbs +17 -0
- data/sig/mindee/v1/product/resume/resume_v1_language.rbs +23 -0
- data/sig/mindee/v1/product/resume/resume_v1_languages.rbs +17 -0
- data/sig/mindee/v1/product/resume/resume_v1_page.rbs +19 -0
- data/sig/mindee/v1/product/resume/resume_v1_professional_experience.rbs +37 -0
- data/sig/mindee/v1/product/resume/resume_v1_professional_experiences.rbs +17 -0
- data/sig/mindee/v1/product/resume/resume_v1_social_networks_url.rbs +23 -0
- data/sig/mindee/v1/product/resume/resume_v1_social_networks_urls.rbs +17 -0
- data/sig/mindee/v1/product/universal/universal.rbs +16 -0
- data/sig/mindee/v1/product/universal/universal_document.rbs +12 -0
- data/sig/mindee/v1/product/universal/universal_page.rbs +18 -0
- data/sig/mindee/v1/product/universal/universal_prediction.rbs +30 -0
- data/sig/mindee/v2/client.rbs +29 -0
- data/sig/mindee/v2/file_operation/crop.rbs +10 -0
- data/sig/mindee/v2/file_operation/crop_files.rbs +9 -0
- data/sig/mindee/v2/file_operation/split.rbs +11 -0
- data/sig/mindee/v2/file_operation/split_files.rbs +9 -0
- data/sig/mindee/v2/http/api_v2_settings.rbs +27 -0
- data/sig/mindee/v2/http/mindee_api_v2.rbs +52 -0
- data/sig/mindee/v2/parsing/base_inference.rbs +18 -0
- data/sig/mindee/v2/parsing/base_response.rbs +11 -0
- data/sig/mindee/v2/parsing/common_response.rbs +12 -0
- data/sig/mindee/v2/parsing/error_item.rbs +13 -0
- data/sig/mindee/v2/parsing/error_response.rbs +20 -0
- data/sig/mindee/v2/parsing/field/base_field.rbs +17 -0
- data/sig/mindee/v2/parsing/field/field_confidence.rbs +30 -0
- data/sig/mindee/v2/parsing/field/field_location.rbs +16 -0
- data/sig/mindee/v2/parsing/field/inference_fields.rbs +20 -0
- data/sig/mindee/v2/parsing/field/list_field.rbs +23 -0
- data/sig/mindee/v2/parsing/field/object_field.rbs +27 -0
- data/sig/mindee/v2/parsing/field/simple_field.rbs +16 -0
- data/sig/mindee/v2/parsing/inference_active_options.rbs +26 -0
- data/sig/mindee/v2/parsing/inference_file.rbs +17 -0
- data/sig/mindee/v2/parsing/inference_job.rbs +13 -0
- data/sig/mindee/v2/parsing/inference_model.rbs +12 -0
- data/sig/mindee/v2/parsing/job.rbs +24 -0
- data/sig/mindee/v2/parsing/job_response.rbs +14 -0
- data/sig/mindee/v2/parsing/job_webhook.rbs +19 -0
- data/sig/mindee/v2/parsing/rag_metadata.rbs +13 -0
- data/sig/mindee/v2/parsing/raw_text.rbs +12 -0
- data/sig/mindee/v2/parsing/raw_text_page.rbs +11 -0
- data/sig/mindee/v2/parsing/search/pagination_metadata.rbs +20 -0
- data/sig/mindee/v2/parsing/search/search_model.rbs +19 -0
- data/sig/mindee/v2/parsing/search/search_response.rbs +17 -0
- data/sig/mindee/v2/parsing/search_models.rbs +14 -0
- data/sig/mindee/v2/product/base_product.rbs +19 -0
- data/sig/mindee/v2/product/classification/classification.rbs +10 -0
- data/sig/mindee/v2/product/classification/classification_classifier.rbs +15 -0
- data/sig/mindee/v2/product/classification/classification_inference.rbs +15 -0
- data/sig/mindee/v2/product/classification/classification_response.rbs +23 -0
- data/sig/mindee/v2/product/classification/classification_result.rbs +15 -0
- data/sig/mindee/v2/product/classification/params/classification_parameters/classification_parameters.rbs +23 -0
- data/sig/mindee/v2/product/crop/crop.rbs +10 -0
- data/sig/mindee/v2/product/crop/crop_inference.rbs +14 -0
- data/sig/mindee/v2/product/crop/crop_item.rbs +18 -0
- data/sig/mindee/v2/product/crop/crop_response.rbs +25 -0
- data/sig/mindee/v2/product/crop/crop_result.rbs +14 -0
- data/sig/mindee/v2/product/crop/params/crop_parameters/crop_parameters.rbs +23 -0
- data/sig/mindee/v2/product/extraction/extraction.rbs +15 -0
- data/sig/mindee/v2/product/extraction/extraction_inference.rbs +19 -0
- data/sig/mindee/v2/product/extraction/extraction_response.rbs +24 -0
- data/sig/mindee/v2/product/extraction/extraction_result.rbs +18 -0
- data/sig/mindee/v2/product/extraction/params/data_schema.rbs +21 -0
- data/sig/mindee/v2/product/extraction/params/data_schema_field.rbs +29 -0
- data/sig/mindee/v2/product/extraction/params/data_schema_replace.rbs +21 -0
- data/sig/mindee/v2/product/extraction/params/extraction_parameters.rbs +38 -0
- data/sig/mindee/v2/product/ocr/ocr.rbs +10 -0
- data/sig/mindee/v2/product/ocr/ocr_inference.rbs +14 -0
- data/sig/mindee/v2/product/ocr/ocr_page.rbs +15 -0
- data/sig/mindee/v2/product/ocr/ocr_response.rbs +23 -0
- data/sig/mindee/v2/product/ocr/ocr_result.rbs +14 -0
- data/sig/mindee/v2/product/ocr/ocr_word.rbs +15 -0
- data/sig/mindee/v2/product/ocr/params/ocr_parameters/ocr_parameters.rbs +24 -0
- data/sig/mindee/v2/product/split/params/split_parameters/split_parameters.rbs +23 -0
- data/sig/mindee/v2/product/split/split.rbs +10 -0
- data/sig/mindee/v2/product/split/split_inference.rbs +14 -0
- data/sig/mindee/v2/product/split/split_range.rbs +18 -0
- data/sig/mindee/v2/product/split/split_response.rbs +25 -0
- data/sig/mindee/v2/product/split/split_result.rbs +14 -0
- data/sig/mindee/version.rbs +6 -0
- data/sig/mindee.rbs +62 -0
- metadata +600 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mindee
|
|
4
|
+
module V2
|
|
5
|
+
module Parsing
|
|
6
|
+
# Individual error item.
|
|
7
|
+
class ErrorItem
|
|
8
|
+
# @return [String, nil] A JSON Pointer to the location of the body property.
|
|
9
|
+
attr_reader :pointer
|
|
10
|
+
# @return [String, nil] Explicit information on the issue.
|
|
11
|
+
attr_reader :detail
|
|
12
|
+
|
|
13
|
+
# @param server_response [Hash] Raw JSON parsed into a Hash.
|
|
14
|
+
def initialize(server_response)
|
|
15
|
+
@pointer = server_response['pointer']
|
|
16
|
+
@detail = server_response['detail']
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mindee
|
|
4
|
+
module V2
|
|
5
|
+
module Parsing
|
|
6
|
+
# Encapsulates information returned by the API when an error occurs.
|
|
7
|
+
class ErrorResponse
|
|
8
|
+
# @return [Integer] The HTTP status code returned by the server.
|
|
9
|
+
attr_reader :status
|
|
10
|
+
# @return [String] A human-readable explanation specific to the occurrence of the problem.
|
|
11
|
+
attr_reader :detail
|
|
12
|
+
# @return [String] A short, human-readable summary of the problem.
|
|
13
|
+
attr_reader :title
|
|
14
|
+
# @return [String] A machine-readable code specific to the occurrence of the problem.
|
|
15
|
+
attr_reader :code
|
|
16
|
+
# @return [Array<ErrorItem>] A list of explicit error details.
|
|
17
|
+
attr_reader :errors
|
|
18
|
+
|
|
19
|
+
# @param server_response [Hash] Raw JSON parsed into a Hash.
|
|
20
|
+
def initialize(server_response)
|
|
21
|
+
@status = server_response['status']
|
|
22
|
+
@detail = server_response['detail']
|
|
23
|
+
@title = server_response['title']
|
|
24
|
+
@code = server_response['code']
|
|
25
|
+
@errors = if server_response.key?('errors')
|
|
26
|
+
server_response['errors'].map do |error|
|
|
27
|
+
ErrorItem.new(error)
|
|
28
|
+
end
|
|
29
|
+
else
|
|
30
|
+
[]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# String representation.
|
|
35
|
+
# @return [String]
|
|
36
|
+
def to_s
|
|
37
|
+
"HTTP #{@status} - #{@title} :: #{@code} - #{@detail}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Hash representation
|
|
41
|
+
# @return [Hash] Hash representation of the object.
|
|
42
|
+
def as_hash
|
|
43
|
+
{
|
|
44
|
+
status: @status,
|
|
45
|
+
detail: @detail,
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mindee
|
|
4
|
+
module V2
|
|
5
|
+
module Parsing
|
|
6
|
+
# Field submodule for V2.
|
|
7
|
+
module Field
|
|
8
|
+
# Base class for V2 fields.
|
|
9
|
+
class BaseField
|
|
10
|
+
# @return [Integer] Level of indentation for rst display.
|
|
11
|
+
attr_reader :indent_level
|
|
12
|
+
|
|
13
|
+
# @return [FieldConfidence, nil] Confidence score for the field.
|
|
14
|
+
attr_reader :confidence
|
|
15
|
+
|
|
16
|
+
# @return [Array<FieldLocation>] List of locations the field was found at.
|
|
17
|
+
attr_reader :locations
|
|
18
|
+
|
|
19
|
+
# @param raw_prediction [Hash] Raw prediction hash.
|
|
20
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
|
21
|
+
def initialize(raw_prediction, indent_level = 0)
|
|
22
|
+
@indent_level = indent_level
|
|
23
|
+
confidence = raw_prediction['confidence']
|
|
24
|
+
@confidence = FieldConfidence.new(confidence) unless confidence.nil? || confidence.empty?
|
|
25
|
+
|
|
26
|
+
locations = raw_prediction['locations']
|
|
27
|
+
@locations = if locations.nil? || locations.empty?
|
|
28
|
+
[]
|
|
29
|
+
else
|
|
30
|
+
locations.map do |location|
|
|
31
|
+
FieldLocation.new(location)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Factory method to create appropriate field types.
|
|
37
|
+
# @param raw_prediction [Hash] Raw prediction hash.
|
|
38
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
|
39
|
+
# @return [BaseField] Appropriate field instance.
|
|
40
|
+
# @raise [MindeeError] If the field type isn't recognized.
|
|
41
|
+
def self.create_field(raw_prediction, indent_level = 0)
|
|
42
|
+
if raw_prediction.key?('items')
|
|
43
|
+
require_relative 'list_field'
|
|
44
|
+
return ListField.new(raw_prediction, indent_level)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
if raw_prediction.key?('fields')
|
|
48
|
+
require_relative 'object_field'
|
|
49
|
+
return ObjectField.new(raw_prediction, indent_level)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
if raw_prediction.key?('value')
|
|
53
|
+
require_relative 'simple_field'
|
|
54
|
+
return SimpleField.new(raw_prediction, indent_level)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
raise Error::MindeeError, "Unrecognized field format in #{raw_prediction.to_json}"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mindee
|
|
4
|
+
module V2
|
|
5
|
+
module Parsing
|
|
6
|
+
module Field
|
|
7
|
+
# Confidence level of a field as returned by the V2 API.
|
|
8
|
+
class FieldConfidence
|
|
9
|
+
# @return [String] The confidence level value.
|
|
10
|
+
attr_reader :value
|
|
11
|
+
|
|
12
|
+
# Absolute certainty about the field's extraction.
|
|
13
|
+
CERTAIN = 'Certain'
|
|
14
|
+
# High certainty about the field's extraction.
|
|
15
|
+
HIGH = 'High'
|
|
16
|
+
# Medium certainty about the field's extraction.
|
|
17
|
+
MEDIUM = 'Medium'
|
|
18
|
+
# Low certainty about the field's extraction.
|
|
19
|
+
LOW = 'Low'
|
|
20
|
+
|
|
21
|
+
# List of valid values, as frozen strings.
|
|
22
|
+
VALID_VALUES = ['Certain', 'High', 'Medium', 'Low'].freeze
|
|
23
|
+
|
|
24
|
+
# @param value [String] The confidence level value.
|
|
25
|
+
# @raise [ArgumentError] If the value is not a valid confidence level.
|
|
26
|
+
def initialize(value)
|
|
27
|
+
case value
|
|
28
|
+
when 'Certain' then @value = CERTAIN
|
|
29
|
+
when 'High' then @value = HIGH
|
|
30
|
+
when 'Medium' then @value = MEDIUM
|
|
31
|
+
when 'Low' then @value = LOW
|
|
32
|
+
else
|
|
33
|
+
raise ArgumentError,
|
|
34
|
+
"Invalid confidence level: '#{value}'. Must be one of: #{VALID_VALUES.join(', ')}"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
@value = value
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# String representation of the confidence level.
|
|
41
|
+
# @return [String] The confidence level value.
|
|
42
|
+
def to_s
|
|
43
|
+
@value
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# String representation of the confidence level.
|
|
47
|
+
# @return [Integer] The confidence level value as an integer: 1 is LOW, 4 is HIGH.
|
|
48
|
+
def to_i
|
|
49
|
+
val_to_i(@value)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Inspect method for debugging.
|
|
53
|
+
# @return [String] Debug representation.
|
|
54
|
+
def inspect
|
|
55
|
+
"#<#{self.class.name}:#{@value}>"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Using 'case' breaks steep ...
|
|
59
|
+
# rubocop:disable Style/CaseLikeIf
|
|
60
|
+
|
|
61
|
+
# Equality of two FieldConfidence instances.
|
|
62
|
+
# @param other [String, Integer, FieldConfidence] The other confidence to compare.
|
|
63
|
+
# @return [Boolean] `true` if they have the same value.
|
|
64
|
+
def ==(other)
|
|
65
|
+
if other.is_a?(FieldConfidence)
|
|
66
|
+
@value == other.value
|
|
67
|
+
elsif other.is_a?(String)
|
|
68
|
+
@value == other
|
|
69
|
+
elsif other.is_a?(Integer)
|
|
70
|
+
to_i == other
|
|
71
|
+
else
|
|
72
|
+
raise ArgumentError, "Invalid type: #{other.class}"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Greater than or equality of two FieldConfidence instances.
|
|
77
|
+
# @param other [String, Integer, FieldConfidence] The other confidence to compare.
|
|
78
|
+
def >=(other)
|
|
79
|
+
if other.is_a?(FieldConfidence)
|
|
80
|
+
to_i >= val_to_i(other.value)
|
|
81
|
+
elsif other.is_a?(String)
|
|
82
|
+
to_i >= val_to_i(other)
|
|
83
|
+
elsif other.is_a?(Integer)
|
|
84
|
+
to_i >= other
|
|
85
|
+
else
|
|
86
|
+
raise ArgumentError, "Invalid type: #{other.class}"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# less than or equality of two FieldConfidence instances.
|
|
91
|
+
# # @param other [String, Integer, FieldConfidence] The other confidence to compare.
|
|
92
|
+
def <=(other)
|
|
93
|
+
if other.is_a?(FieldConfidence)
|
|
94
|
+
to_i <= val_to_i(other.value)
|
|
95
|
+
elsif other.is_a?(String)
|
|
96
|
+
to_i <= val_to_i(other)
|
|
97
|
+
elsif other.is_a?(Integer)
|
|
98
|
+
to_i <= other
|
|
99
|
+
else
|
|
100
|
+
raise ArgumentError, "Invalid type: #{other.class}"
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# rubocop:enable Style/CaseLikeIf
|
|
105
|
+
|
|
106
|
+
# Aliases for the comparison operators.
|
|
107
|
+
alias eql? ==
|
|
108
|
+
alias gteql? >=
|
|
109
|
+
alias lteql? <=
|
|
110
|
+
|
|
111
|
+
protected
|
|
112
|
+
|
|
113
|
+
def val_to_i(value)
|
|
114
|
+
case value
|
|
115
|
+
when CERTAIN then 4
|
|
116
|
+
when HIGH then 3
|
|
117
|
+
when MEDIUM then 2
|
|
118
|
+
when LOW then 1
|
|
119
|
+
else
|
|
120
|
+
raise ArgumentError,
|
|
121
|
+
"Invalid confidence level: '#{value}'. Must be one of: #{VALID_VALUES.join(', ')}"
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../../geometry/polygon'
|
|
4
|
+
|
|
5
|
+
module Mindee
|
|
6
|
+
module V2
|
|
7
|
+
module Parsing
|
|
8
|
+
module Field
|
|
9
|
+
# Location of a field.
|
|
10
|
+
class FieldLocation
|
|
11
|
+
# @return [Mindee::Geometry::Polygon, nil] Polygon corresponding to the field location.
|
|
12
|
+
attr_reader :polygon
|
|
13
|
+
|
|
14
|
+
# @return [Integer, nil] Page on which the field is located.
|
|
15
|
+
attr_reader :page
|
|
16
|
+
|
|
17
|
+
# @param server_response [Hash] Raw server response hash.
|
|
18
|
+
def initialize(server_response)
|
|
19
|
+
@polygon = Mindee::Geometry::Polygon.new(server_response['polygon'])
|
|
20
|
+
@page = server_response['page']
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# String representation of the polygon (empty string when none).
|
|
24
|
+
#
|
|
25
|
+
# @return [String]
|
|
26
|
+
def to_s
|
|
27
|
+
"#{polygon} on page #{page}"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base_field'
|
|
4
|
+
|
|
5
|
+
module Mindee
|
|
6
|
+
module V2
|
|
7
|
+
module Parsing
|
|
8
|
+
module Field
|
|
9
|
+
# Represents a hash-like collection of inference fields, providing methods for
|
|
10
|
+
# retrieval and string representation.
|
|
11
|
+
class InferenceFields < Hash
|
|
12
|
+
# @return [Integer] Level of indentation for rst display.
|
|
13
|
+
attr_reader :indent_level
|
|
14
|
+
|
|
15
|
+
# @param server_response [Hash] Raw server response hash.
|
|
16
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
|
17
|
+
def initialize(server_response, indent_level = 0)
|
|
18
|
+
super()
|
|
19
|
+
@indent_level = indent_level
|
|
20
|
+
|
|
21
|
+
server_response.each do |key, value|
|
|
22
|
+
self[key.to_s] = BaseField.create_field(value, 1)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Get a field by key with nil fallback.
|
|
27
|
+
# @param key [String] Field key to retrieve.
|
|
28
|
+
# @return [BaseField, nil] The field or nil if not found.
|
|
29
|
+
def get(key)
|
|
30
|
+
self[key]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Get a field by key and ensure it is a SimpleField.
|
|
34
|
+
# @param key [String] Field key to retrieve.
|
|
35
|
+
# @return [SimpleField] The SimpleField.
|
|
36
|
+
# @raise [TypeError] If the field is not a SimpleField.
|
|
37
|
+
def get_simple_field(key)
|
|
38
|
+
field = self[key]
|
|
39
|
+
raise TypeError, "Field #{key} is not a SimpleField" unless field.is_a?(SimpleField)
|
|
40
|
+
|
|
41
|
+
field
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Get a field by key and ensure it is a ListField.
|
|
45
|
+
# @param key [String] Field key to retrieve.
|
|
46
|
+
# @return [ListField] The ListField.
|
|
47
|
+
# @raise [TypeError] If the field is not a ListField.
|
|
48
|
+
def get_list_field(key)
|
|
49
|
+
field = self[key]
|
|
50
|
+
raise TypeError, "Field #{key} is not a ListField" unless field.is_a?(ListField)
|
|
51
|
+
|
|
52
|
+
field
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Get a field by key and ensure it is an ObjectField.
|
|
56
|
+
# @param key [String] Field key to retrieve.
|
|
57
|
+
# @return [ObjectField] The ObjectField.
|
|
58
|
+
# @raise [TypeError] If the field is not an ObjectField.
|
|
59
|
+
def get_object_field(key)
|
|
60
|
+
field = self[key]
|
|
61
|
+
raise TypeError, "Field #{key} is not a ObjectField" unless field.is_a?(ObjectField)
|
|
62
|
+
|
|
63
|
+
field
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
67
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
|
68
|
+
# Convert the fields to a string representation.
|
|
69
|
+
# @param indent [Integer, nil] Optional indentation level.
|
|
70
|
+
# @return [String] String representation of all fields.
|
|
71
|
+
def to_s(indent = 0)
|
|
72
|
+
return '' if empty?
|
|
73
|
+
|
|
74
|
+
indent ||= @indent_level
|
|
75
|
+
padding = ' ' * indent
|
|
76
|
+
lines = [] # @type var lines: Array[String]
|
|
77
|
+
|
|
78
|
+
each do |field_key, field_value|
|
|
79
|
+
line = "#{padding}:#{field_key}:"
|
|
80
|
+
|
|
81
|
+
case (field_value.class.name || '').split('::').last
|
|
82
|
+
when 'ListField', 'ObjectField'
|
|
83
|
+
line += field_value.to_s
|
|
84
|
+
when 'SimpleField'
|
|
85
|
+
# Check if SimpleField has a non-empty value
|
|
86
|
+
simple_f = field_value # @type var simple_f: SimpleField
|
|
87
|
+
if defined?(simple_f.value) && simple_f.value && !simple_f.value.to_s.empty?
|
|
88
|
+
line += " #{simple_f}"
|
|
89
|
+
end
|
|
90
|
+
else
|
|
91
|
+
logger.debug("Unknown value was passed to the field creator: #{field_key} : #{field_value}")
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
lines << line
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
lines.join("\n").rstrip
|
|
98
|
+
end
|
|
99
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
|
100
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base_field'
|
|
4
|
+
|
|
5
|
+
module Mindee
|
|
6
|
+
module V2
|
|
7
|
+
module Parsing
|
|
8
|
+
module Field
|
|
9
|
+
# Represents a field that contains a list of items.
|
|
10
|
+
class ListField < BaseField
|
|
11
|
+
# @return [Array<ListField | ObjectField | SimpleField>] Items contained in the list.
|
|
12
|
+
attr_reader :items
|
|
13
|
+
|
|
14
|
+
# @param server_response [Hash] Raw server response hash.
|
|
15
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
|
16
|
+
# @raise [MindeeError] If the 'items' key is missing or not an array.
|
|
17
|
+
def initialize(server_response, indent_level = 0)
|
|
18
|
+
super
|
|
19
|
+
|
|
20
|
+
unless server_response.key?('items') && server_response['items'].is_a?(Array)
|
|
21
|
+
raise Error::MindeeError,
|
|
22
|
+
"Expected \"items\" to be an array in #{server_response.to_json}."
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
@items = []
|
|
26
|
+
server_response['items'].each do |item|
|
|
27
|
+
@items << BaseField.create_field(item, indent_level + 1)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Return only simple fields.
|
|
32
|
+
# @return [Array<SimpleField>] Simple fields contained in the list.
|
|
33
|
+
# @raise [TypeError] If the fields are not SimpleField.
|
|
34
|
+
def simple_items
|
|
35
|
+
fields = [] # @type var fields: Array[SimpleField]
|
|
36
|
+
@items.each do |item|
|
|
37
|
+
raise TypeError, "Invalid field type detected: #{item.class}" unless item.is_a?(SimpleField)
|
|
38
|
+
|
|
39
|
+
fields << item
|
|
40
|
+
end
|
|
41
|
+
fields
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Return only object fields.
|
|
45
|
+
# @return [Array<ObjectField>] Object fields contained in the list.
|
|
46
|
+
# @raise [TypeError] If the fields are not ObjectField.
|
|
47
|
+
def object_items
|
|
48
|
+
fields = [] # @type var fields: Array[ObjectField]
|
|
49
|
+
@items.each do |item|
|
|
50
|
+
raise TypeError, "Invalid field type detected: #{item.class}" unless item.is_a?(ObjectField)
|
|
51
|
+
|
|
52
|
+
fields << item
|
|
53
|
+
end
|
|
54
|
+
fields
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# String representation of the list field.
|
|
58
|
+
# @return [String] Formatted string with bullet points for each item.
|
|
59
|
+
def to_s
|
|
60
|
+
return '' unless @items && !@items.empty?
|
|
61
|
+
|
|
62
|
+
parts = ['']
|
|
63
|
+
@items.each do |item|
|
|
64
|
+
next unless item
|
|
65
|
+
|
|
66
|
+
parts << if item.is_a?(ObjectField)
|
|
67
|
+
item.to_s_from_list
|
|
68
|
+
else
|
|
69
|
+
item.to_s
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
parts.join("\n * ")
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base_field'
|
|
4
|
+
require_relative 'inference_fields'
|
|
5
|
+
|
|
6
|
+
module Mindee
|
|
7
|
+
module V2
|
|
8
|
+
module Parsing
|
|
9
|
+
module Field
|
|
10
|
+
# A field containing a nested set of inference fields.
|
|
11
|
+
class ObjectField < BaseField
|
|
12
|
+
# @return [InferenceFields] Fields contained in the object.
|
|
13
|
+
attr_reader :fields
|
|
14
|
+
|
|
15
|
+
# @param raw_prediction [Hash] Raw server response hash.
|
|
16
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
|
17
|
+
def initialize(raw_prediction, indent_level = 0)
|
|
18
|
+
super
|
|
19
|
+
|
|
20
|
+
inner_fields = raw_prediction.fetch('fields', raw_prediction)
|
|
21
|
+
@fields = InferenceFields.new(inner_fields, @indent_level + 1)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# String representation of the object field.
|
|
25
|
+
# @return [String] String representation with newline prefix.
|
|
26
|
+
def to_s
|
|
27
|
+
return "\n" unless @fields && !@fields.empty?
|
|
28
|
+
|
|
29
|
+
"\n#{@fields.to_s(1)}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# String representation suitable for list display.
|
|
33
|
+
# @return [String] String representation without leading spaces.
|
|
34
|
+
def to_s_from_list
|
|
35
|
+
return '' if @fields.nil?
|
|
36
|
+
return '' unless @fields && !@fields.empty?
|
|
37
|
+
|
|
38
|
+
field_str = @fields.to_s(2)
|
|
39
|
+
field_str.length > 4 ? (field_str[4..] || '') : ''
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# String representation of a single object field
|
|
43
|
+
# @return [String] Multi-line string with proper indentation.
|
|
44
|
+
def single_str
|
|
45
|
+
return '' unless @fields && !@fields.empty?
|
|
46
|
+
|
|
47
|
+
out_str = ''
|
|
48
|
+
indent = ' ' * @indent_level
|
|
49
|
+
|
|
50
|
+
@fields.each do |field_key, field_value|
|
|
51
|
+
value_str = field_value && !field_value.to_s.empty? ? field_value.to_s : ''
|
|
52
|
+
out_str += "\n#{indent} :#{field_key}: #{value_str}"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
out_str
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# String representation for multi-object display
|
|
59
|
+
# @return [String] Formatted string for list context.
|
|
60
|
+
def multi_str
|
|
61
|
+
return '' unless @fields && !@fields.empty?
|
|
62
|
+
|
|
63
|
+
out_str = ''
|
|
64
|
+
indent = ' ' * @indent_level
|
|
65
|
+
first = true
|
|
66
|
+
|
|
67
|
+
@fields.each do |field_key, field_value|
|
|
68
|
+
value_str = field_value ? field_value.to_s : ''
|
|
69
|
+
|
|
70
|
+
if first
|
|
71
|
+
out_str += "#{indent}:#{field_key}: #{value_str}"
|
|
72
|
+
first = false
|
|
73
|
+
else
|
|
74
|
+
out_str += "\n#{indent} :#{field_key}: #{value_str}"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
out_str
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Get a field by key and ensure it is a SimpleField.
|
|
82
|
+
# @param key [String] Field key to retrieve.
|
|
83
|
+
# @return [SimpleField] The SimpleField.
|
|
84
|
+
# @raise [TypeError] If the field is not a SimpleField.
|
|
85
|
+
def get_simple_field(key)
|
|
86
|
+
@fields.get_simple_field(key)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Get a field by key and ensure it is a ListField.
|
|
90
|
+
# @param key [String] Field key to retrieve.
|
|
91
|
+
# @return [ListField] The ListField.
|
|
92
|
+
# @raise [TypeError] If the field is not a ListField.
|
|
93
|
+
def get_list_field(key)
|
|
94
|
+
field = @fields.get_list_field(key)
|
|
95
|
+
raise TypeError, "Field #{key} is not a ListField" unless field.is_a?(ListField)
|
|
96
|
+
|
|
97
|
+
field
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Get a field by key and ensure it is an ObjectField.
|
|
101
|
+
# @param key [String] Field key to retrieve.
|
|
102
|
+
# @return [ObjectField] The ObjectField.
|
|
103
|
+
# @raise [TypeError] If the field is not an ObjectField.
|
|
104
|
+
def get_object_field(key)
|
|
105
|
+
field = @fields.get_object_field(key)
|
|
106
|
+
raise TypeError, "Field #{key} is not an ObjectField" unless field.is_a?(ObjectField)
|
|
107
|
+
|
|
108
|
+
field
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Get all simple fields.
|
|
112
|
+
# @return [Hash<String, SimpleField>] Simple fields contained in the object.
|
|
113
|
+
def simple_fields
|
|
114
|
+
# @type var result: Hash[String, SimpleField]
|
|
115
|
+
result = @fields.select { |_, value| value.is_a?(SimpleField) } # rubocop:disable Style/RedundantAssignment
|
|
116
|
+
result
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Get all list fields.
|
|
120
|
+
# @return [Hash<String, ListField>] List fields contained in the object.
|
|
121
|
+
def list_fields
|
|
122
|
+
# @type var result: Hash[String, ListField]
|
|
123
|
+
result = @fields.select { |_, value| value.is_a?(ListField) } # rubocop:disable Style/RedundantAssignment
|
|
124
|
+
result
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Get all object fields.
|
|
128
|
+
# @return [Hash<String, ObjectField>] Object fields contained in the object.
|
|
129
|
+
def object_fields
|
|
130
|
+
# @type var result: Hash[String, ObjectField]
|
|
131
|
+
result = @fields.select { |_, value| value.is_a?(ObjectField) } # rubocop:disable Style/RedundantAssignment
|
|
132
|
+
result
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base_field'
|
|
4
|
+
|
|
5
|
+
module Mindee
|
|
6
|
+
module V2
|
|
7
|
+
module Parsing
|
|
8
|
+
module Field
|
|
9
|
+
# A simple field with a scalar value.
|
|
10
|
+
class SimpleField < BaseField
|
|
11
|
+
# @return [String, Integer, Float, Boolean, nil] Value contained in the field.
|
|
12
|
+
attr_reader :value
|
|
13
|
+
|
|
14
|
+
# @param server_response [Hash] Raw server response hash.
|
|
15
|
+
# @param indent_level [Integer] Level of indentation for rst display.
|
|
16
|
+
def initialize(server_response, indent_level = 0)
|
|
17
|
+
super
|
|
18
|
+
value = server_response['value']
|
|
19
|
+
@value = if value.is_a?(Integer)
|
|
20
|
+
value.to_f
|
|
21
|
+
else
|
|
22
|
+
value
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# String representation of the field value.
|
|
27
|
+
# @return [String] String representation of the value.
|
|
28
|
+
def to_s
|
|
29
|
+
return '' if @value.nil?
|
|
30
|
+
|
|
31
|
+
if @value.is_a?(TrueClass) || @value.is_a?(FalseClass)
|
|
32
|
+
@value ? 'True' : 'False'
|
|
33
|
+
elsif @value.is_a?(Integer) || @value.is_a?(Float)
|
|
34
|
+
num = @value # @type var num: Integer | Float
|
|
35
|
+
format_numeric_value(num)
|
|
36
|
+
else
|
|
37
|
+
@value.to_s
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
# Format numeric values to display '.0' in string reps.
|
|
44
|
+
# @param value [Numeric] The numeric value to format.
|
|
45
|
+
# @return [String] Formatted numeric string.
|
|
46
|
+
def format_numeric_value(value)
|
|
47
|
+
float_value = value.to_f
|
|
48
|
+
|
|
49
|
+
if float_value == float_value.to_i
|
|
50
|
+
format('%.1f', float_value)
|
|
51
|
+
else
|
|
52
|
+
formatted = format('%.5f', float_value)
|
|
53
|
+
formatted.sub(%r{\.?0+$}, '')
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'field/base_field'
|
|
4
|
+
require_relative 'field/field_confidence'
|
|
5
|
+
require_relative 'field/field_location'
|
|
6
|
+
require_relative 'field/inference_fields'
|
|
7
|
+
require_relative 'field/list_field'
|
|
8
|
+
require_relative 'field/object_field'
|
|
9
|
+
require_relative 'field/simple_field'
|