Uwaga
Możliwości dodatków są dostępne we wszystkich modelach z wyjątkiem modelu Business card model.
Możliwości
Analiza dokumentów obsługuje bardziej zaawansowane i modułowe możliwości analizy. Użyj funkcji dodatku, aby rozszerzyć wyniki, aby uwzględnić więcej funkcji wyodrębnionych z dokumentów. Niektóre funkcje dodatków generują dodatkowe koszty. Te opcjonalne funkcje można włączyć i wyłączyć w zależności od scenariusza wyodrębniania dokumentów. Aby włączyć funkcję, dodaj powiązaną nazwę funkcji do właściwości ciągu zapytania features. Możesz włączyć więcej niż jedną funkcję dodatku na żądanie, podając rozdzielaną przecinkami listę funkcji. Następujące możliwości dodatku są dostępne w wersji 2023-07-31 (GA) i nowszych.
Uwaga
Nie wszystkie modele lub typy plików pakietu Microsoft Office obsługują funkcje dodatków. Aby uzyskać więcej informacji, zobaczwyodrębnianie danych modelu.
Dostępność wersji
| Możliwość dodawania |
Dodatek/wersja bezpłatna |
2024-11-30 (dostępność ogólna) |
2023-07-31 (GA) |
2022-08-31 (GA) |
v2.1 (GA) |
| Wyodrębnianie kodów kreskowych |
Bezpłatna |
✔️ |
✔️ |
nie dotyczy |
nie dotyczy |
| Wykrywanie języka |
Bezpłatna |
✔️ |
✔️ |
nie dotyczy |
nie dotyczy |
| Pary kluczy i wartości |
Bezpłatna |
✔️ |
nie dotyczy |
nie dotyczy |
nie dotyczy |
| Plik PDF z możliwością wyszukiwania |
Bezpłatna |
✔️ |
nie dotyczy |
nie dotyczy |
nie dotyczy |
| Wyodrębnianie właściwości czcionki |
Dodatek |
✔️ |
✔️ |
nie dotyczy |
nie dotyczy |
| Wyodrębnianie formuł |
Dodatek |
✔️ |
✔️ |
nie dotyczy |
nie dotyczy |
| Ekstrakcja w wysokiej rozdzielczości |
Dodatek |
✔️ |
✔️ |
nie dotyczy |
nie dotyczy |
| Pola zapytania |
Dodatek |
✔️ |
nie dotyczy |
nie dotyczy |
nie dotyczy |
✱ Dodatek — pola zapytania są wyceniane inaczej niż inne funkcje dodatku. Aby uzyskać szczegółowe informacje, zobacz cennik .
** Dodatek — przeszukiwalny plik PDF jest dostępny tylko w modelu Read jako funkcja dodatkowa.
PDF
Obrazy: JPEG/JPG, , PNGBMP, , TIFFHEIF
✱ Pliki pakietu Microsoft Office nie są obecnie obsługiwane.
Zadanie rozpoznawania małego tekstu z dużych dokumentów, takich jak rysunki inżynieryjne, jest wyzwaniem. Często tekst jest mieszany z innymi elementami graficznymi i ma różne czcionki, rozmiary i orientacje. Ponadto tekst można podzielić na oddzielne części lub połączyć się z innymi symbolami. Usługa Document Intelligence obsługuje teraz wyodrębnianie treści z tych typów dokumentów za pomocą funkcji ocr.highResolution. Ulepszono jakość wyodrębniania zawartości z dokumentów A1/A2/A3, włączając tę funkcję dodatku.
{your-resource-endpoint}.cognitiveservices.azure.com/documentintelligence/documentModels/prebuilt-layout:analyze?api-version=2024-11-30&features=ocrHighResolution
# Analyze a document at a URL:
formUrl = "https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/add-on/add-on-highres.png?raw=true"
poller = document_intelligence_client.begin_analyze_document(
"prebuilt-layout",
AnalyzeDocumentRequest(url_source=formUrl),
features=[DocumentAnalysisFeature.OCR_HIGH_RESOLUTION], # Specify which add-on capabilities to enable.
)
result: AnalyzeResult = poller.result()
# [START analyze_with_highres]
if result.styles and any([style.is_handwritten for style in result.styles]):
print("Document contains handwritten content")
else:
print("Document does not contain handwritten content")
for page in result.pages:
print(f"----Analyzing layout from page #{page.page_number}----")
print(f"Page has width: {page.width} and height: {page.height}, measured with unit: {page.unit}")
if page.lines:
for line_idx, line in enumerate(page.lines):
words = get_words(page, line)
print(
f"...Line # {line_idx} has word count {len(words)} and text '{line.content}' "
f"within bounding polygon '{line.polygon}'"
)
for word in words:
print(f"......Word '{word.content}' has a confidence of {word.confidence}")
if page.selection_marks:
for selection_mark in page.selection_marks:
print(
f"Selection mark is '{selection_mark.state}' within bounding polygon "
f"'{selection_mark.polygon}' and has a confidence of {selection_mark.confidence}"
)
if result.tables:
for table_idx, table in enumerate(result.tables):
print(f"Table # {table_idx} has {table.row_count} rows and " f"{table.column_count} columns")
if table.bounding_regions:
for region in table.bounding_regions:
print(f"Table # {table_idx} location on page: {region.page_number} is {region.polygon}")
for cell in table.cells:
print(f"...Cell[{cell.row_index}][{cell.column_index}] has text '{cell.content}'")
if cell.bounding_regions:
for region in cell.bounding_regions:
print(f"...content on page {region.page_number} is within bounding polygon '{region.polygon}'")
"styles": [true],
"pages": [
{
"page_number": 1,
"width": 1000,
"height": 800,
"unit": "px",
"lines": [
{
"line_idx": 1,
"content": "This",
"polygon": [10, 20, 30, 40],
"words": [
{
"content": "This",
"confidence": 0.98
}
]
}
],
"selection_marks": [
{
"state": "selected",
"polygon": [50, 60, 70, 80],
"confidence": 0.91
}
]
}
],
"tables": [
{
"table_idx": 1,
"row_count": 3,
"column_count": 4,
"bounding_regions": [
{
"page_number": 1,
"polygon": [100, 200, 300, 400]
}
],
"cells": [
{
"row_index": 1,
"column_index": 1,
"content": "Content 1",
"bounding_regions": [
{
"page_number": 1,
"polygon": [110, 210, 310, 410]
}
]
}
]
}
]
{your-resource-endpoint}.cognitiveservices.azure.com/formrecognizer/documentModels/prebuilt-layout:analyze?api-version=2023-07-31&features=ocrHighResolution
# Analyze a document at a URL:
url = "(https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/add-on/add-on-highres.png?raw=true"
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", document_url=url, features=[AnalysisFeature.OCR_HIGH_RESOLUTION] # Specify which add-on capabilities to enable.
)
result = poller.result()
# [START analyze_with_highres]
if any([style.is_handwritten for style in result.styles]):
print("Document contains handwritten content")
else:
print("Document does not contain handwritten content")
for page in result.pages:
print(f"----Analyzing layout from page #{page.page_number}----")
print(
f"Page has width: {page.width} and height: {page.height}, measured with unit: {page.unit}"
)
for line_idx, line in enumerate(page.lines):
words = line.get_words()
print(
f"...Line # {line_idx} has word count {len(words)} and text '{line.content}' "
f"within bounding polygon '{format_polygon(line.polygon)}'"
)
for word in words:
print(
f"......Word '{word.content}' has a confidence of {word.confidence}"
)
for selection_mark in page.selection_marks:
print(
f"Selection mark is '{selection_mark.state}' within bounding polygon "
f"'{format_polygon(selection_mark.polygon)}' and has a confidence of {selection_mark.confidence}"
)
for table_idx, table in enumerate(result.tables):
print(
f"Table # {table_idx} has {table.row_count} rows and "
f"{table.column_count} columns"
)
for region in table.bounding_regions:
print(
f"Table # {table_idx} location on page: {region.page_number} is {format_polygon(region.polygon)}"
)
for cell in table.cells:
print(
f"...Cell[{cell.row_index}][{cell.column_index}] has text '{cell.content}'"
)
for region in cell.bounding_regions:
print(
f"...content on page {region.page_number} is within bounding polygon '{format_polygon(region.polygon)}'"
)
"styles": [true],
"pages": [
{
"page_number": 1,
"width": 1000,
"height": 800,
"unit": "px",
"lines": [
{
"line_idx": 1,
"content": "This",
"polygon": [10, 20, 30, 40],
"words": [
{
"content": "This",
"confidence": 0.98
}
]
}
],
"selection_marks": [
{
"state": "selected",
"polygon": [50, 60, 70, 80],
"confidence": 0.91
}
]
}
],
"tables": [
{
"table_idx": 1,
"row_count": 3,
"column_count": 4,
"bounding_regions": [
{
"page_number": 1,
"polygon": [100, 200, 300, 400]
}
],
"cells": [
{
"row_index": 1,
"column_index": 1,
"content": "Content 1",
"bounding_regions": [
{
"page_number": 1,
"polygon": [110, 210, 310, 410]
}
]
}
]
}
]
Funkcja ocr.formula wyodrębnia wszystkie zidentyfikowane formuły, takie jak równania matematyczne, w formulas kolekcji jako obiekt najwyższego poziomu w obszarze content. Wewnątrz content, wykryte formuły są przedstawiane jako :formula:. Każdy wpis w tej kolekcji oznacza wzór, który zawiera typ wzoru jako inline lub display, jego reprezentację w LaTeX jako value oraz jego współrzędne polygon. Początkowo formuły są wyświetlane na końcu każdej strony.
Uwaga
Wynik confidence jest zakodowany na stałe.
{your-resource-endpoint}.cognitiveservices.azure.com/documentintelligence/documentModels/prebuilt-layout:analyze?api-version=2024-11-30&features=formulas
# Analyze a document at a URL:
formUrl = "https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/add-on/layout-formulas.png?raw=true"
poller = document_intelligence_client.begin_analyze_document(
"prebuilt-layout",
AnalyzeDocumentRequest(url_source=formUrl),
features=[DocumentAnalysisFeature.FORMULAS], # Specify which add-on capabilities to enable
)
result: AnalyzeResult = poller.result()
# [START analyze_formulas]
for page in result.pages:
print(f"----Formulas detected from page #{page.page_number}----")
if page.formulas:
inline_formulas = [f for f in page.formulas if f.kind == "inline"]
display_formulas = [f for f in page.formulas if f.kind == "display"]
# To learn the detailed concept of "polygon" in the following content, visit: https://aka.ms/bounding-region
print(f"Detected {len(inline_formulas)} inline formulas.")
for formula_idx, formula in enumerate(inline_formulas):
print(f"- Inline #{formula_idx}: {formula.value}")
print(f" Confidence: {formula.confidence}")
print(f" Bounding regions: {formula.polygon}")
print(f"\nDetected {len(display_formulas)} display formulas.")
for formula_idx, formula in enumerate(display_formulas):
print(f"- Display #{formula_idx}: {formula.value}")
print(f" Confidence: {formula.confidence}")
print(f" Bounding regions: {formula.polygon}")
"content": ":formula:",
"pages": [
{
"pageNumber": 1,
"formulas": [
{
"kind": "inline",
"value": "\\frac { \\partial a } { \\partial b }",
"polygon": [...],
"span": {...},
"confidence": 0.99
},
{
"kind": "display",
"value": "y = a \\times b + a \\times c",
"polygon": [...],
"span": {...},
"confidence": 0.99
}
]
}
]
{your-resource-endpoint}.cognitiveservices.azure.com/formrecognizer/documentModels/prebuilt-layout:analyze?api-version=2023-07-31&features=formulas
# Analyze a document at a URL:
url = "https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/add-on/layout-formulas.png?raw=true"
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", document_url=url, features=[AnalysisFeature.FORMULAS] # Specify which add-on capabilities to enable
)
result = poller.result()
# [START analyze_formulas]
for page in result.pages:
print(f"----Formulas detected from page #{page.page_number}----")
inline_formulas = [f for f in page.formulas if f.kind == "inline"]
display_formulas = [f for f in page.formulas if f.kind == "display"]
print(f"Detected {len(inline_formulas)} inline formulas.")
for formula_idx, formula in enumerate(inline_formulas):
print(f"- Inline #{formula_idx}: {formula.value}")
print(f" Confidence: {formula.confidence}")
print(f" Bounding regions: {format_polygon(formula.polygon)}")
print(f"\nDetected {len(display_formulas)} display formulas.")
for formula_idx, formula in enumerate(display_formulas):
print(f"- Display #{formula_idx}: {formula.value}")
print(f" Confidence: {formula.confidence}")
print(f" Bounding regions: {format_polygon(formula.polygon)}")
"content": ":formula:",
"pages": [
{
"pageNumber": 1,
"formulas": [
{
"kind": "inline",
"value": "\\frac { \\partial a } { \\partial b }",
"polygon": [...],
"span": {...},
"confidence": 0.99
},
{
"kind": "display",
"value": "y = a \\times b + a \\times c",
"polygon": [...],
"span": {...},
"confidence": 0.99
}
]
}
]
Funkcja ocr.font wyodrębnia wszystkie właściwości czcionki wyodrębnionego tekstu z kolekcji styles jako obiekt najwyższego poziomu pod elementem content. Każdy obiekt stylu określa pojedynczą właściwość czcionki, zakres tekstu, do których ma zastosowanie, oraz odpowiadający mu współczynnik ufności. Istniejąca właściwość stylu została rozszerzona o dodatkowe właściwości czcionki, takie jak similarFontFamily dla czcionki tekstu, fontStyle dla stylów, takich jak kursywa i normalny, fontWeight dla pogrubienia lub stylu normalnego, color dla koloru tekstu oraz backgroundColor dla koloru obramowania pola ograniczającego tekst.
{your-resource-endpoint}.cognitiveservices.azure.com/documentintelligence/documentModels/prebuilt-layout:analyze?api-version=2024-11-30&features=styleFont
# Analyze a document at a URL:
formUrl = "https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/receipt/receipt-with-tips.png?raw=true"
poller = document_intelligence_client.begin_analyze_document(
"prebuilt-layout",
AnalyzeDocumentRequest(url_source=formUrl),
features=[DocumentAnalysisFeature.STYLE_FONT] # Specify which add-on capabilities to enable.
)
result: AnalyzeResult = poller.result()
# [START analyze_fonts]
# DocumentStyle has the following font related attributes:
similar_font_families = defaultdict(list) # e.g., 'Arial, sans-serif
font_styles = defaultdict(list) # e.g, 'italic'
font_weights = defaultdict(list) # e.g., 'bold'
font_colors = defaultdict(list) # in '#rrggbb' hexadecimal format
font_background_colors = defaultdict(list) # in '#rrggbb' hexadecimal format
if result.styles and any([style.is_handwritten for style in result.styles]):
print("Document contains handwritten content")
else:
print("Document does not contain handwritten content")
return
print("\n----Fonts styles detected in the document----")
# Iterate over the styles and group them by their font attributes.
for style in result.styles:
if style.similar_font_family:
similar_font_families[style.similar_font_family].append(style)
if style.font_style:
font_styles[style.font_style].append(style)
if style.font_weight:
font_weights[style.font_weight].append(style)
if style.color:
font_colors[style.color].append(style)
if style.background_color:
font_background_colors[style.background_color].append(style)
print(f"Detected {len(similar_font_families)} font families:")
for font_family, styles in similar_font_families.items():
print(f"- Font family: '{font_family}'")
print(f" Text: '{get_styled_text(styles, result.content)}'")
print(f"\nDetected {len(font_styles)} font styles:")
for font_style, styles in font_styles.items():
print(f"- Font style: '{font_style}'")
print(f" Text: '{get_styled_text(styles, result.content)}'")
print(f"\nDetected {len(font_weights)} font weights:")
for font_weight, styles in font_weights.items():
print(f"- Font weight: '{font_weight}'")
print(f" Text: '{get_styled_text(styles, result.content)}'")
print(f"\nDetected {len(font_colors)} font colors:")
for font_color, styles in font_colors.items():
print(f"- Font color: '{font_color}'")
print(f" Text: '{get_styled_text(styles, result.content)}'")
print(f"\nDetected {len(font_background_colors)} font background colors:")
for font_background_color, styles in font_background_colors.items():
print(f"- Font background color: '{font_background_color}'")
print(f" Text: '{get_styled_text(styles, result.content)}'")
"content": "Foo bar",
"styles": [
{
"similarFontFamily": "Arial, sans-serif",
"spans": [ { "offset": 0, "length": 3 } ],
"confidence": 0.98
},
{
"similarFontFamily": "Times New Roman, serif",
"spans": [ { "offset": 4, "length": 3 } ],
"confidence": 0.98
},
{
"fontStyle": "italic",
"spans": [ { "offset": 1, "length": 2 } ],
"confidence": 0.98
},
{
"fontWeight": "bold",
"spans": [ { "offset": 2, "length": 3 } ],
"confidence": 0.98
},
{
"color": "#FF0000",
"spans": [ { "offset": 4, "length": 2 } ],
"confidence": 0.98
},
{
"backgroundColor": "#00FF00",
"spans": [ { "offset": 5, "length": 2 } ],
"confidence": 0.98
}
]
{your-resource-endpoint}.cognitiveservices.azure.com/formrecognizer/documentModels/prebuilt-layout:analyze?api-version=2023-07-31&features=styleFont
# Analyze a document at a URL:
url = "https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/receipt/receipt-with-tips.png?raw=true"
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", document_url=url, features=[AnalysisFeature.STYLE_FONT] # Specify which add-on capabilities to enable.
)
result = poller.result()
# [START analyze_fonts]
# DocumentStyle has the following font related attributes:
similar_font_families = defaultdict(list) # e.g., 'Arial, sans-serif
font_styles = defaultdict(list) # e.g, 'italic'
font_weights = defaultdict(list) # e.g., 'bold'
font_colors = defaultdict(list) # in '#rrggbb' hexadecimal format
font_background_colors = defaultdict(list) # in '#rrggbb' hexadecimal format
if any([style.is_handwritten for style in result.styles]):
print("Document contains handwritten content")
else:
print("Document does not contain handwritten content")
print("\n----Fonts styles detected in the document----")
# Iterate over the styles and group them by their font attributes.
for style in result.styles:
if style.similar_font_family:
similar_font_families[style.similar_font_family].append(style)
if style.font_style:
font_styles[style.font_style].append(style)
if style.font_weight:
font_weights[style.font_weight].append(style)
if style.color:
font_colors[style.color].append(style)
if style.background_color:
font_background_colors[style.background_color].append(style)
print(f"Detected {len(similar_font_families)} font families:")
for font_family, styles in similar_font_families.items():
print(f"- Font family: '{font_family}'")
print(f" Text: '{get_styled_text(styles, result.content)}'")
print(f"\nDetected {len(font_styles)} font styles:")
for font_style, styles in font_styles.items():
print(f"- Font style: '{font_style}'")
print(f" Text: '{get_styled_text(styles, result.content)}'")
print(f"\nDetected {len(font_weights)} font weights:")
for font_weight, styles in font_weights.items():
print(f"- Font weight: '{font_weight}'")
print(f" Text: '{get_styled_text(styles, result.content)}'")
print(f"\nDetected {len(font_colors)} font colors:")
for font_color, styles in font_colors.items():
print(f"- Font color: '{font_color}'")
print(f" Text: '{get_styled_text(styles, result.content)}'")
print(f"\nDetected {len(font_background_colors)} font background colors:")
for font_background_color, styles in font_background_colors.items():
print(f"- Font background color: '{font_background_color}'")
print(f" Text: '{get_styled_text(styles, result.content)}'")
"content": "Foo bar",
"styles": [
{
"similarFontFamily": "Arial, sans-serif",
"spans": [ { "offset": 0, "length": 3 } ],
"confidence": 0.98
},
{
"similarFontFamily": "Times New Roman, serif",
"spans": [ { "offset": 4, "length": 3 } ],
"confidence": 0.98
},
{
"fontStyle": "italic",
"spans": [ { "offset": 1, "length": 2 } ],
"confidence": 0.98
},
{
"fontWeight": "bold",
"spans": [ { "offset": 2, "length": 3 } ],
"confidence": 0.98
},
{
"color": "#FF0000",
"spans": [ { "offset": 4, "length": 2 } ],
"confidence": 0.98
},
{
"backgroundColor": "#00FF00",
"spans": [ { "offset": 5, "length": 2 } ],
"confidence": 0.98
}
]
Funkcja ocr.barcode wyodrębnia wszystkie zidentyfikowane kody kreskowe w kolekcji barcodes jako obiekt najwyższego poziomu pod content. W obiekcie contentwykryte kody kreskowe są reprezentowane jako :barcode:. Każdy wpis w tej kolekcji reprezentuje kod kreskowy i zawiera typ kodu kreskowego jako kind, osadzoną treść kodu kreskowego jako value oraz jego współrzędne jako polygon. Początkowo kody kreskowe są wyświetlane na końcu każdej strony. Element confidence jest zakodowany jako 1.
Obsługiwane typy kodów kreskowych
|
Typ kodu kreskowego |
Przykład |
QR Code |
|
Code 39 |
|
Code 93 |
|
Code 128 |
|
UPC (UPC-A & UPC-E) |
|
PDF417 |
|
EAN-8 |
|
EAN-13 |
|
Codabar |
|
Databar |
|
Databar Rozszerzony |
|
ITF |
|
Data Matrix |
|
{your-resource-endpoint}.cognitiveservices.azure.com/documentintelligence/documentModels/prebuilt-layout:analyze?api-version=2024-11-30&features=barcodes
# Analyze a document at a URL:
formUrl = "https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/add-on/add-on-barcodes.jpg?raw=true"
poller = document_intelligence_client.begin_analyze_document(
"prebuilt-read",
AnalyzeDocumentRequest(url_source=formUrl),
features=[DocumentAnalysisFeature.BARCODES] # Specify which add-on capabilities to enable.
)
result: AnalyzeResult = poller.result()
# [START analyze_barcodes]
# Iterate over extracted barcodes on each page.
for page in result.pages:
print(f"----Barcodes detected from page #{page.page_number}----")
if page.barcodes:
print(f"Detected {len(page.barcodes)} barcodes:")
for barcode_idx, barcode in enumerate(page.barcodes):
print(f"- Barcode #{barcode_idx}: {barcode.value}")
print(f" Kind: {barcode.kind}")
print(f" Confidence: {barcode.confidence}")
print(f" Bounding regions: {barcode.polygon}")
----Barcodes detected from page #1----
Detected 2 barcodes:
- Barcode #0: 123456
Kind: QRCode
Confidence: 0.95
Bounding regions: [10.5, 20.5, 30.5, 40.5]
- Barcode #1: 789012
Kind: QRCode
Confidence: 0.98
Bounding regions: [50.5, 60.5, 70.5, 80.5]
{your-resource-endpoint}.cognitiveservices.azure.com/formrecognizer/documentModels/prebuilt-layout:analyze?api-version=2023-07-31&features=barcodes
# Analyze a document at a URL:
url = "https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/add-on/add-on-barcodes.jpg?raw=true"
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", document_url=url, features=[AnalysisFeature.BARCODES] # Specify which add-on capabilities to enable.
)
result = poller.result()
# [START analyze_barcodes]
# Iterate over extracted barcodes on each page.
for page in result.pages:
print(f"----Barcodes detected from page #{page.page_number}----")
print(f"Detected {len(page.barcodes)} barcodes:")
for barcode_idx, barcode in enumerate(page.barcodes):
print(f"- Barcode #{barcode_idx}: {barcode.value}")
print(f" Kind: {barcode.kind}")
print(f" Confidence: {barcode.confidence}")
print(f" Bounding regions: {format_polygon(barcode.polygon)}")
----Barcodes detected from page #1----
Detected 2 barcodes:
- Barcode #0: 123456
Kind: QRCode
Confidence: 0.95
Bounding regions: [10.5, 20.5, 30.5, 40.5]
- Barcode #1: 789012
Kind: QRCode
Confidence: 0.98
Bounding regions: [50.5, 60.5, 70.5, 80.5]
Wykrywanie języka
Dodanie funkcji languages do żądania analyzeResult pozwala przewidzieć wykryty podstawowy język dla każdej linii tekstu wraz z elementem confidence w kolekcji languages w obszarze analyzeResult.
{your-resource-endpoint}.cognitiveservices.azure.com/documentintelligence/documentModels/prebuilt-layout:analyze?api-version=2024-11-30&features=languages
# Analyze a document at a URL:
formUrl = "https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/add-on/add-on-fonts_and_languages.png?raw=true"
poller = document_intelligence_client.begin_analyze_document(
"prebuilt-layout",
AnalyzeDocumentRequest(url_source=formUrl),
features=[DocumentAnalysisFeature.LANGUAGES] # Specify which add-on capabilities to enable.
)
result: AnalyzeResult = poller.result()
# [START analyze_languages]
print("----Languages detected in the document----")
if result.languages:
print(f"Detected {len(result.languages)} languages:")
for lang_idx, lang in enumerate(result.languages):
print(f"- Language #{lang_idx}: locale '{lang.locale}'")
print(f" Confidence: {lang.confidence}")
print(
f" Text: '{','.join([result.content[span.offset : span.offset + span.length] for span in lang.spans])}'"
)
"languages": [
{
"spans": [
{
"offset": 0,
"length": 131
}
],
"locale": "en",
"confidence": 0.7
},
]
{your-resource-endpoint}.cognitiveservices.azure.com/formrecognizer/documentModels/prebuilt-layout:analyze?api-version=2023-07-31&features=languages
# Analyze a document at a URL:
url = "https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/add-on/add-on-fonts_and_languages.png?raw=true"
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", document_url=url, features=[AnalysisFeature.LANGUAGES] # Specify which add-on capabilities to enable.
)
result = poller.result()
# [START analyze_languages]
print("----Languages detected in the document----")
print(f"Detected {len(result.languages)} languages:")
for lang_idx, lang in enumerate(result.languages):
print(f"- Language #{lang_idx}: locale '{lang.locale}'")
print(f" Confidence: {lang.confidence}")
print(f" Text: '{','.join([result.content[span.offset : span.offset + span.length] for span in lang.spans])}'")
"languages": [
{
"spans": [
{
"offset": 0,
"length": 131
}
],
"locale": "en",
"confidence": 0.7
},
]
Plik PDF z możliwością wyszukiwania
Możliwość przeszukiwania plików PDF umożliwia konwertowanie analogowych plików PDF, takich jak pliki PDF zeskanowanych obrazów, do formatu PDF z osadzonym tekstem. Osadzony tekst umożliwia zaawansowane wyszukiwanie tekstowe w zawartości wyodrębnionej z pliku PDF przez nałożenie wykrytych elementów tekstowych na pliki obrazów.
Ważne
- Obecnie tylko model Read
prebuilt-read obsługuje funkcję przeszukiwalnych plików PDF. W przypadku korzystania z tej funkcji określ parametr modelId jako prebuilt-read.
- Przeszukiwalny plik PDF jest dostępny w modelu
2024-11-30 (GA) prebuilt-read bez dodatkowych opłat na potrzeby ogólnego korzystania z plików PDF.
Korzystanie z pliku PDF z możliwością wyszukiwania
Aby użyć pliku PDF z możliwością wyszukiwania, utwórz POST żądanie przy użyciu Analyze operacji i określ format danych wyjściowych jako pdf:
POST /documentModels/prebuilt-read:analyze?output=pdf
{...}
202
Po zakończeniu Analyze operacji utwórz GET żądanie pobrania Analyze wyników operacji.
Po pomyślnym zakończeniu plik PDF można odebrać i pobrać jako application/pdf. Ta operacja umożliwia bezpośrednie pobieranie osadzonej formy tekstu PDF zamiast kodu JSON zakodowanego w formacie Base64.
// Monitor the operation until completion.
GET /documentModels/prebuilt-read/analyzeResults/{resultId}
200
{...}
// Upon successful completion, retrieve the PDF as application/pdf.
GET /documentModels/prebuilt-read/analyzeResults/{resultId}/pdf
200 OK
Content-Type: application/pdf
Pary klucz–wartość
We wcześniejszych wersjach interfejsu API model prebuilt-document wyodrębniał pary klucz-wartość z formularzy i dokumentów. Po dodaniu funkcji keyValuePairs do prebuilt-layout model układu generuje teraz takie same wyniki.
Pary klucz–wartość to konkretne fragmenty dokumentu, które identyfikują etykietę lub klucz oraz powiązaną z nimi odpowiedź lub wartość. W formularzu ustrukturyzowanym te pary mogą być etykietą i wartością wprowadzoną przez użytkownika dla tego pola. W dokumencie bez struktury mogą one być datą wykonania umowy na podstawie tekstu w akapicie. Model sztucznej inteligencji jest trenowany w celu wyodrębniania możliwych do zidentyfikowania kluczy i wartości w oparciu o szeroką gamę typów dokumentów, formatów i struktur.
Klucze mogą również istnieć w izolacji, gdy model wykryje, że klucz istnieje, bez skojarzonej wartości lub podczas przetwarzania pól opcjonalnych. Na przykład pole nazwy środkowej może być puste w formularzu w niektórych przypadkach. Pary klucz-wartość to zakresy tekstu zawartego w dokumencie. W przypadku dokumentów, w których ta sama wartość jest określana na różne sposoby, na przykład jako klient/użytkownik, powiązany klucz to klient lub użytkownik (w zależności od kontekstu).
interfejs API REST
{your-resource-endpoint}.cognitiveservices.azure.com/documentintelligence/documentModels/prebuilt-layout:analyze?api-version=2024-11-30&features=keyValuePairs
Pola zapytania
Pola zapytań to możliwość rozszerzenia schematu wyodrębnionego z dowolnego wstępnie utworzonego modelu lub zdefiniowania określonej nazwy klucza, gdy nazwa klucza jest zmienna. Aby użyć pól zapytania, ustaw funkcje na queryFields i podaj rozdzielaną przecinkami listę nazw pól we queryFields właściwości .
Analiza dokumentów obsługuje teraz wyodrębnianie pól zapytań. Dzięki ekstrakcji pól na podstawie zapytania możesz dodawać pola do procesu ekstrakcji za pomocą żądania zapytania bez potrzeby dodatkowego trenowania.
Użyj pól zapytania, gdy musisz rozszerzyć schemat wstępnie utworzonego lub niestandardowego modelu lub wyodrębnić kilka pól z danymi wyjściowymi układu.
Pola zapytań są funkcją dodatkową dostępną w wersji Premium. Aby uzyskać najlepsze wyniki, zdefiniuj pola, które chcesz wyodrębnić, używając notacji camelCase lub PascalCase w przypadku nazw pól składających się z wielu wyrazów.
Pola zapytania obsługują maksymalnie 20 pól na żądanie. Jeśli dokument zawiera wartość pola, zwracane jest pole i wartość.
To wydanie zawiera nową implementację funkcji pól zapytań, która jest tańsza niż wcześniejsza implementacja i powinna zostać zweryfikowana.
Uwaga
Wyodrębnianie pól zapytań usługi Document Intelligence Studio jest obecnie dostępne za pomocą interfejsu API układów i wstępnie utworzonych modeli 2024-11-30 (GA), z wyjątkiem modeli podatkowych USA W2, 1098 i 1099.
W przypadku wyodrębniania pól zapytania określ pola, które chcesz wyodrębnić, a analiza dokumentów analizuje odpowiednio dokument. Oto przykład:
Jeśli przetwarzasz kontrakt w programie Document Intelligence Studio, użyj wersji 2024-11-30 (GA):
Możesz przekazać listę etykiet pól, takich jak Party1, Party2, TermsOfUse, PaymentTerms, PaymentDatei TermEndDate w ramach analyze document żądania.
Document Intelligence może analizować i wyodrębniać dane pól oraz zwracać wartości w ustrukturyzowanym formacie wyjściowym JSON.
Oprócz pól zapytania odpowiedź zawiera tekst, tabele, znaczniki wyboru i inne istotne dane.
{your-resource-endpoint}.cognitiveservices.azure.com/documentintelligence/documentModels/prebuilt-layout:analyze?api-version=2024-11-30&features=queryFields&queryFields=TERMS
# Analyze a document at a URL:
formUrl = "https://github.com/Azure-Samples/document-intelligence-code-samples/blob/main/Data/invoice/simple-invoice.png?raw=true"
poller = document_intelligence_client.begin_analyze_document(
"prebuilt-layout",
AnalyzeDocumentRequest(url_source=formUrl),
features=[DocumentAnalysisFeature.QUERY_FIELDS], # Specify which add-on capabilities to enable.
query_fields=["Address", "InvoiceNumber"], # Set the features and provide a comma-separated list of field names.
)
result: AnalyzeResult = poller.result()
print("Here are extra fields in result:\n")
if result.documents:
for doc in result.documents:
if doc.fields and doc.fields["Address"]:
print(f"Address: {doc.fields['Address'].value_string}")
if doc.fields and doc.fields["InvoiceNumber"]:
print(f"Invoice number: {doc.fields['InvoiceNumber'].value_string}")
Address: 1 Redmond way Suite 6000 Redmond, WA Sunnayvale, 99243
Invoice number: 34278587
Następne kroki