Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

**New features**

- `FormField` now has attribute `type` which contains the semantic data type of the field value
- `FormField` now has attribute `value_type` which contains the semantic data type of the field value

**Fixes and improvements**

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,24 +202,24 @@ def __repr__(self):
class FormField(object):
"""Represents a field recognized in an input form.

:ivar type: The type of `value` found on FormField. Possible types include: 'string',
:ivar value_type: The type of `value` found on FormField. Possible types include: 'string',
'date', 'time', 'phoneNumber', 'number', 'integer', 'object', or 'array'.
:vartype type: str or ~azure.ai.formrecognizer.FieldValueType
:vartype value_type: str or ~azure.ai.formrecognizer.FieldValueType
:ivar ~azure.ai.formrecognizer.FieldData label_data:
Contains the text, bounding box, and field elements for the field label.
:ivar ~azure.ai.formrecognizer.FieldData value_data:
Contains the text, bounding box, and field elements for the field value.
:ivar str name: The unique name of the field or label.
:ivar value:
The value for the recognized field. Its semantic data type is described by `type`.
The value for the recognized field. Its semantic data type is described by `value_type`.
:vartype value: str, int, float, :class:`~datetime.date`, :class:`~datetime.time`,
:class:`~azure.ai.formrecognizer.FormField`, or list[:class:`~azure.ai.formrecognizer.FormField`]
:ivar float confidence:
Measures the degree of certainty of the recognition result. Value is between [0.0, 1.0].
"""

def __init__(self, **kwargs):
self.type = kwargs.get("type", None)
self.value_type = kwargs.get("value_type", None)
self.label_data = kwargs.get("label_data", None)
self.value_data = kwargs.get("value_data", None)
self.name = kwargs.get("name", None)
Expand All @@ -229,7 +229,7 @@ def __init__(self, **kwargs):
@classmethod
def _from_generated(cls, field, value, read_result):
return cls(
type=value.type if value else None,
value_type=value.type if value else None,
label_data=FieldData._from_generated(field, read_result),
value_data=FieldData._from_generated(value, read_result),
value=get_field_value(field, value, read_result),
Expand All @@ -240,7 +240,7 @@ def _from_generated(cls, field, value, read_result):
@classmethod
def _from_generated_unlabeled(cls, field, idx, page, read_result):
return cls(
type="string", # unlabeled only returns string
value_type="string", # unlabeled only returns string
label_data=FieldData._from_generated_unlabeled(field.key, page, read_result),
value_data=FieldData._from_generated_unlabeled(field.value, page, read_result),
value=field.value.text,
Expand All @@ -249,8 +249,8 @@ def _from_generated_unlabeled(cls, field, idx, page, read_result):
)

def __repr__(self):
return "FormField(type={}, label_data={}, value_data={}, name={}, value={}, confidence={})".format(
self.type, repr(self.label_data), repr(self.value_data), self.name, repr(self.value), self.confidence
return "FormField(value_type={}, label_data={}, value_data={}, name={}, value={}, confidence={})".format(
self.value_type, repr(self.label_data), repr(self.value_data), self.name, repr(self.value), self.confidence
)[:1024]


Expand Down
8 changes: 4 additions & 4 deletions sdk/formrecognizer/azure-ai-formrecognizer/tests/test_repr.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,15 @@ def field_data(bounding_box, form_word, form_line):

@pytest.fixture
def form_field_two(field_data):
model = _models.FormField(type="string", label_data=field_data[0], value_data=field_data[0], name="form_field_two", value="value", confidence=0)
model_repr = "FormField(type=string, label_data={}, value_data={}, name=form_field_two, value='value', confidence=0)".format(field_data[1], field_data[1])[:1024]
model = _models.FormField(value_type="string", label_data=field_data[0], value_data=field_data[0], name="form_field_two", value="value", confidence=0)
model_repr = "FormField(value_type=string, label_data={}, value_data={}, name=form_field_two, value='value', confidence=0)".format(field_data[1], field_data[1])[:1024]
assert repr(model) == model_repr
return model, model_repr

@pytest.fixture
def form_field_one(field_data, form_field_two):
model = _models.FormField(type="string", label_data=field_data[0], value_data=field_data[0], name="form_field_one", value=form_field_two[0], confidence=1.0)
model_repr = "FormField(type=string, label_data={}, value_data={}, name=form_field_one, value={}, confidence=1.0)".format(field_data[1], field_data[1], form_field_two[1])[:1024]
model = _models.FormField(value_type="string", label_data=field_data[0], value_data=field_data[0], name="form_field_one", value=form_field_two[0], confidence=1.0)
model_repr = "FormField(value_type=string, label_data={}, value_data={}, name=form_field_one, value={}, confidence=1.0)".format(field_data[1], field_data[1], form_field_two[1])[:1024]
assert repr(model) == model_repr
return model, model_repr

Expand Down
12 changes: 6 additions & 6 deletions sdk/formrecognizer/azure-ai-formrecognizer/tests/testcase.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ def assertLabeledFormFieldDictTransformCorrect(self, form_fields, actual_fields,
self.assertBoundingBoxTransformCorrect(b[label].value_data.bounding_box, a.bounding_box)
self.assertEqual(a.text, b[label].value_data.text)
field_type = a.type
self.assertEqual(field_type, b[label].type)
self.assertEqual(field_type, b[label].value_type)
if field_type == "string":
self.assertEqual(b[label].value, a.value_string)
if field_type == "number":
Expand Down Expand Up @@ -268,7 +268,7 @@ def assertFormFieldTransformCorrect(self, receipt_field, actual_field, read_resu
if actual_field is None:
return
field_type = actual_field.type
self.assertEqual(field_type, receipt_field.type)
self.assertEqual(field_type, receipt_field.value_type)
if field_type == "string":
self.assertEqual(receipt_field.value, actual_field.value_string)
if field_type == "number":
Expand Down Expand Up @@ -320,19 +320,19 @@ def assertTablesTransformCorrect(self, layout, actual_layout, read_results=None,

def assertReceiptItemsHasValues(self, items, page_number, include_field_elements):
for item in items:
self.assertEqual(item.type, "object")
self.assertEqual(item.value_type, "object")
self.assertBoundingBoxHasPoints(item.value.get("Name").value_data.bounding_box)
self.assertIsNotNone(item.value.get("Name").confidence)
self.assertIsNotNone(item.value.get("Name").value_data.text)
self.assertIsNotNone(item.value.get("Name").type)
self.assertIsNotNone(item.value.get("Name").value_type)
self.assertBoundingBoxHasPoints(item.value.get("Quantity").value_data.bounding_box)
self.assertIsNotNone(item.value.get("Quantity").confidence)
self.assertIsNotNone(item.value.get("Quantity").value_data.text)
self.assertIsNotNone(item.value.get("Quantity").type)
self.assertIsNotNone(item.value.get("Quantity").value_type)
self.assertBoundingBoxHasPoints(item.value.get("TotalPrice").value_data.bounding_box)
self.assertIsNotNone(item.value.get("TotalPrice").confidence)
self.assertIsNotNone(item.value.get("TotalPrice").value_data.text)
self.assertIsNotNone(item.value.get("TotalPrice").type)
self.assertIsNotNone(item.value.get("TotalPrice").value_type)

if include_field_elements:
self.assertFieldElementsHasValues(item.value.get("Name").value_data.field_elements, page_number)
Expand Down