Skip to main content
After extraction, two tools help you ensure data quality: validation_run checks that extracted values match what is in the source document, and value_manage normalizes inconsistent text values to a single canonical form.

validation_run

Verify extracted CSV data against the original source PDF. Soria uses a combination of heuristics and Gemini to compare extracted values to the source document and flag discrepancies. Validation runs automatically after extraction completes. Use validation_run directly when you want to manually trigger validation, re-validate after corrections, or validate a specific subset of files.
Validation currently applies to PDFs only. It compares the extracted CSV against the source PDF that was used as input.

Parameters

string
required
The workspace to run validation in.
string
required
The group containing the extracted CSV files to validate.
string[]
Limit validation to specific CSV file IDs. Defaults to all extracted CSV files in the group.
boolean
default:"false"
Re-validate files that already have validation results.

Examples

If validation is taking a long time, check the server logs before retrying. API rate limits and server restarts mid-run are common causes. Use file_ids to retry a smaller batch.

value_manage

Normalize inconsistent text values extracted from source files to a single canonical form. When Soria’s extraction AI processes different files, it may produce variations of the same concept: "total", "overall", "all ages", and "All" might all represent the same row label. value_manage lets you define which raw values are equivalent and map them to a single canonical value that downstream queries and models can rely on.

When to use value_manage

Value normalization is most useful for:
  • Unlabeled or ambiguous tables — where the AI produces slightly different labels for the same row across files
  • Columns with a controlled vocabulary — plan types, coverage tiers, age bands, geographic regions
  • Aggregation rows — where a “total” row might be labeled differently across issuers or years

Value states

Each extracted value is in one of three states: You do not create canonicals upfront. When you map an unmapped value to another unmapped value, Soria automatically promotes the target to a canonical and maps the source to it.

Parameters

string
required
The schema column ID to manage values for. Get this from schema_manage with read=True.
boolean
default:"false"
Return all values for the column organized by state (canonicals, unmapped, mapped), with similarity suggestions for unmapped values.
boolean
default:"false"
Scan all extracted CSV files for this column and index the distinct values found. Also generates embeddings for similarity suggestions. This is a standalone operation — it cannot be combined with other parameters.Run this first after extraction completes to populate the value list before mapping.
boolean
default:"false"
Backfill vector embeddings for values that are missing them. Can be combined with read and mutation operations.
boolean
default:"false"
When used with index=True, deletes all existing values for the column and re-indexes from scratch.
object
Map source value IDs to target value IDs. If the target is currently unmapped, it is automatically promoted to a canonical.
string[]
Unmap one or more value IDs, returning them to unmapped state.
object
Rename a canonical value’s display text. Does not affect which raw values are mapped to it.
string
Required for write operations (index, embed, map, unmap, rename).

Typical workflow

1

Index values

After extraction, run value_manage with index=True to collect all distinct values from the extracted CSVs and generate embeddings.
2

Read values and suggestions

Call with read=True to see all unmapped values and their similarity suggestions. Each unmapped value shows candidate canonicals ranked by semantic similarity.
3

Map values to canonicals

Map unmapped value IDs to their canonical equivalents. You can map multiple values at once. Mapping one unmapped value to another promotes the target to a canonical automatically.
4

Rename canonicals (optional)

Give canonicals a clean display name if the raw text is ambiguous.

Example: normalizing age band labels

The extraction AI may produce all of these for the same concept across different source files: After mapping, any downstream query against this column can filter on "Total" and match all five variations.
Re-run index after extracting new files to pick up any new values that appear in the latest data. Existing mappings are preserved — only new values are added.