SYCTRA

文档不是文本,而是版面。

我们的引擎不是抄写文字:它重建表格,还原图表背后的数据,将公式输出为 LaTeX,并遵循多栏文档的阅读顺序。随后字段进入贵司 ERP,存疑项交由人工。

  • 22 类文件格式
  • 表格与图表数据重建
  • 支持完全本地部署

Why extraction fails exactly where it costs the most

Never on the clean documents. Always on the ones carrying the value.

01

The table becomes a soup of words

Most extractors flatten a table into a stream of words. Merged headers, propagated cells and blocks that start at C4 disappear — and with them the only thing you wanted to read.

02

The chart is not read at all

The figures driving the decision sit in a curve, not in a sentence. A conventional extractor returns the figure caption and stops there. The data stays locked inside the image.

03

The format changes with every sender

Thirty suppliers, thirty layouts, plus skewed scans and ZIP archives. Rigid templates break the moment a column moves, and the configuration starts over.

22 format families, one call

An unknown type does not fail: it falls back to text decoding if it is readable. Text, HTML, XML, CSV and spreadsheet formats are handled locally, with no API call and no cost.

FamilyExtensionsExtraction path
Digital PDFpdfOCR → Markdown per page, tables preserved; falls back to the text layer
Scanned PDFpdfFull OCR; batched for documents of 1,000+ pages, stitched back in order
Imagespng jpg jpeg gif webp bmp tiff heicVision model: transcription, tables and chart data
Worddocx docm dotx doc rtf odtLibreOffice → PDF → OCR, true layout; native fallback
PowerPointpptx pptm ppsx ppt pps odpLibreOffice → PDF → OCR, presenter notes included
Excelxlsx xlsm xls xlsb odsOne Markdown table per sheet, offset blocks re-framed
OpenDocumentodt ods odp odgLibreOffice → PDF → OCR
Web and markuphtml htm xhtml xmlClean text, scripts and styles stripped, entities decoded — local, $0
Text and codetxt md csv tsv json yaml toml ini py js ts java c cpp go rs sh sqlDirect decoding, instant — local, $0
BooksepubChapters in OPF spine order, offline
EmailemlHeaders, body (text preferred, HTML cleaned) and attachments listed
Audiomp3 wav m4a ogg flac aac opus amrffmpeg chunking → parallel transcription → timestamped transcript
Videomp4 mov webm avi mkv m4v mpeg wmvAudio track extracted then transcribed, absolute timestamps
ArchiveszipRecursive expansion: every inner file becomes a document

Zip-bomb guardrails (entry count, decompressed size, depth) and a 300 MB per-file limit, configurable.

From document received to data written

Every step can refuse to continue. That is what keeps doubtful data out of your system.

01 / 05

Capture and estimate

The document arrives by email, drop into a watched folder, scan or API call. Before any processing, a local estimate counts pages and type — no upload, no API call, free. On a batch of several thousand pages, that is how you know the bill before you trigger it.

What is rebuilt, not merely copied

That is the difference between readable text and usable data.

Complete tables

Markdown tables with headers merged across several rows, merged cells propagated, offset blocks re-framed — a table starting at C4 is found — and empty rows or columns purged.

The data behind a chart

For every chart: type, title, axis titles and units including rotated labels, full legend, and a table rebuilding the underlying data, one row per tick and one column per series. Values read off the scale are marked ≈.

Formulas as LaTeX

Scanned mathematics comes out as usable LaTeX, not as a typographic approximation.

Reading order respected

Multi-column documents are returned column by column, not line by line across the page — the difference between coherent text and scrambled text.

Handwriting and historical documents

Tested on real documents, down to degraded 19th-century cursive, with a dedicated profile that transcribes without modernising.

Multilingual, Arabic included

French, English and right-to-left Arabic. 96% recall on Arabic scans at our internal bench, where the public state of the art for Arabic PDF-to-Markdown plateaus around 65%.

Accuracy comes from vocabulary, not from the model

A vision model transcribes “Dig. 0.25 mg” far better when it knows it is reading a prescription. You describe the document before parsing it, and the context is added to the extraction prompt — never substituted for the rules.

ProfileWhat it primes
medicalGeneric and brand drug names, dosages (mg, µg, mL, IU, 1-0-1, bid, per os), lab tests and reference ranges, ICD codes, vital signs. Never normalises a dose.
financeLocale-aware thousands separators, currencies, negatives in parentheses, VAT/net/gross, debit/credit, depreciation, invoice references. Never recomputes a total.
legalArticle and paragraph references, statute and case-law citations, defined terms, standard formulas, numbering hierarchy preserved.
technicalAlphanumeric part references, tolerances (±0.05 mm), SI units, ISO/DIN/ASTM standards, wiring marks; 0/O, 1/l/I, 5/S, 8/B disambiguation.
academicAbstract, numbered sections, formulas as LaTeX, figure captions, citations and bibliography.
historicalPeriod handwriting, abbreviations and ligatures, long s (ſ), historical currencies, faded ink. Transcribes without modernising, marks the illegible [?].
administrativeLabelled fields, checkboxes with their state, case numbers, stamps, marginal annotations, empty fields flagged.

Measured effect on an 1831 apothecary's ledger with the historical profile: period accents restored, abbreviations expanded, long s preserved (ſoin, deſſus).

The engine is chosen per request. Including “no network”.

The costs below are for the same invoice, processed by each engine. You trade accuracy, price and sovereignty without changing a line of code.

EngineModeCost on the same invoice
Mistral smallManaged API$0.00040
Mistral mediumManaged API — handwriting and degraded documents$0.00288
Google GeminiManaged API$0.00020
OpenAIManaged API, your key$0.00405
OllamaLocal, on your machine$0
vLLM / GPU (Qwen2.5-VL)Local, on your GPU$0
PaddleOCR-VLLocal, vLLM$0
Hugging FaceManaged routermodel-dependent

Fully offline mode: with a local endpoint, text, HTML, XML, CSV, Office, Excel, images, EPUB, email and PDF are all processed without any data leaving the machine. Security contract: a URL you choose never receives the server's keys — with no key supplied, the key sent is empty.

What the bench says

Every figure comes from a reproducible bench on a deterministic corpus whose content is exactly known — not from an estimate.

recall on 20 of the 21 document families in the reference corpus
100%

recall on 20 of the 21 document families in the reference corpus

on right-to-left Arabic scans, against roughly 65% for the public state of the art
96%

on right-to-left Arabic scans, against roughly 65% for the public state of the art

per page in local mode: text, Office, images and PDFs processed without leaving your premises
$0

per page in local mode: text, Office, images and PDFs processed without leaving your premises

这些量级来自我们在可比范围内于试点阶段的实测。在贵司语料上,它们会在规模化之前实测,而不是事先承诺。

Against Docling, on the same corpus

Ground-truth bench: a deterministic corpus whose content is exactly known, 21 document families, word / cell / reading-order recall metrics. Docling ran on CPU with its default pipeline.

MetricOur engineDocling
Files processed19 / 1917 / 19
Average score99.9%75.4%
Total time29 s258 s
Chart data recovered100%0%
Scanned formulas100%0%
Arabic scan (RTL)96%0%

In fairness: Docling stays fully local in its default configuration, while our best path calls a commercial OCR API — our local mode exists too, and is measured separately. The full corpus can be inspected document by document, source next to extracted Markdown.

Three SDKs, two deployment modes, one API

The SDK alone is enough to start: it calls the APIs directly and handles text, HTML, XML and CSV locally. The service unlocks office formats, audio and video, EPUB, huge PDFs, figure description and local models — and the SDK detects it automatically, falling back to direct mode if it is absent.

python
pip install z-parser-sdk

import zparser as zp

# 1. Know the cost before spending it — local, no API call, free.
est = zp.estimate("catalogue.pdf")
print(est)              # ~$0.7000 (175 page(s), ocr:mistral-ocr-latest)

# 2. Parse with business context: accuracy comes from vocabulary.
doc = zp.parse(
    "balance-sheet.pdf",
    domain="finance",
    context="Algerian balance sheet, amounts in DZD, SCF chart of accounts.",
)

print(doc.text)         # Markdown: tables, chart data recovered, LaTeX
print(doc.cost)         # 0.0533 — real cost, every unit included
print(doc.usage)        # breakdown of billed units
print(doc.cost_unpriced)  # flags any model with an unknown price

Never a 500 on a broken document: the service replies 200 with status "error", so a single file cannot break an ingestion pipeline. Cascading fallbacks — OCR unavailable, the text layer is kept; LibreOffice missing, the native parser takes over; vision fails, the OCR text stands.

Three flows, three treatments

01 · 背景

The accounts team keys in three hundred invoices a month, arriving by email in around ten different layouts.

02 · 我们实施的内容

Automatic reading with the finance profile, field extraction, matching against ERP purchase orders, writing of compliant invoices and an exception queue for the rest.

03 · 结果

Data entry disappears across most of the flow. The team handles discrepancies, with the document and the reason for doubt in front of them.

现在就能看到运行的产品

这些产品已经构建完成。部分可在线访问,其余可按需演示。

在线演示

CERFA

从你的文件里自动填好行政表单。

智能体读取你的材料,预填对应的法国 CERFA 表单,并标出字段之间的矛盾。你复核、签字,一个上午就省下来了。

在线试用
按需开通

投标应答

按你自己的模板写出技术标书。

智能体读招标文件,调取过往案例,按你的结构和品牌规范撰写。你直接从空白页跳到复核环节。

申请演示

常见问题

No. Extraction works by understanding the document, not by position on the page. That is what absorbs a new layout without reconfiguration, and what separates this from rigid templates.

A vision model reads the figure and rebuilds a table: one row per tick, one column per series, with the type, title, axes and their units, and the legend. Values read off the scale rather than labelled are marked ≈ — you can see what is certain and what is estimated.

It is first re-rendered at 300 dpi and re-read by a stronger model. If that is not enough, it goes to the exception queue with the reason. Uncertain data never enters the database: that rule is what makes the rest usable.

No, and that is the design point: a clean page is never re-read. On a standard printed corpus, escalation overhead is close to zero. And you can know the bill before triggering it anyway, since the estimate is local and free.

Yes. With a local vision endpoint — Ollama, vLLM on your GPU, PaddleOCR-VL — text, HTML, XML, CSV, Office, Excel, images, EPUB, email and PDF are all processed without any data leaving the machine, at zero cost per page.

96% recall on Arabic scans at our internal bench, where the public state of the art for Arabic PDF-to-Markdown plateaus around 65% on KITAB-bench. Right-to-left reading order is respected, including inside tables.

Via API where one exists: the service exposes parsing, rendering and figure-extraction endpoints, with Prometheus metrics for monitoring. Where the ERP has no API, the software pole builds the connector — often the real subject of the project.

The service replies 200 with an error status rather than a 500, so a single file cannot break your ingestion pipeline. Zip-bomb guardrails and a per-file size limit protect the service from booby-trapped archives.

本方案不做什么

We do not aim for zero human involvement, and we distrust anyone who promises it. On a real flow some items will always be ambiguous: our goal is that this share is identified and escalated, never written to the database unchecked. The engine never normalises a dosage and never recomputes a total — it transcribes what is written and flags what it could not read. And fully offline mode is slower and needs a GPU: we recommend it when sensitivity demands it, not on principle.

Which document defeats your current extractor?

Bring twenty, the ugliest included: skewed scans, tables with merged headers, charts with no data table. We will hand back the extracted Markdown and the real cost per page.