CoolFace
Datasetpublic

andynoodles/Taiwan-Financial

Taiwan Financial Report OCR — block-level (zh-Hant) Block-level OCR pairs synthesised from Traditional-Chinese (zh-Hant) Taiwan listed-company financial reports. Each row is one cropped layout region with its block type and the vision-LLM transcription — including raw OTSL for tables. 194,314 rows from 138 financial reports (合併財報, IFRS consolidated, type AI1) 15 companies across major industries, 2021–2023, all four quarters Source: 公開資訊觀測站 / MOPS (doc.twse.com.tw) — public… See the full description on the dataset page: https://huggingface.co/datasets/andynoodles/Taiwan-Financial.

sourceHugging Faceotherupdated 3mo agoView on Hugging Face
1likes661downloads
Dataset Card

Taiwan Financial Report OCR — block-level (zh-Hant)

Block-level OCR pairs synthesised from Traditional-Chinese (zh-Hant) Taiwan listed-company financial reports. Each row is one cropped layout region with its block type and the vision-LLM transcription — including raw OTSL for tables.

  • —194,314 rows from 138 financial reports (合併財報, IFRS consolidated, type AI1)
  • —15 companies across major industries, 2021–2023, all four quarters
  • —Source: 公開資訊觀測站 / MOPS (doc.twse.com.tw) — public regulatory filings

How it was made

PDF pages → layout detection (PP-DocLayoutV3) → per-region crops → OCR by a PaddleOCR-VL vision-LLM (the teacher) → per-type revision by a Qwen3.6 vision-LLM (the reviser) → Traditional-Chinese normalization (OpenCC). This is a distillation dataset: there is no human ground truth — labels are model output and may contain errors. Because the source PDFs are born-digital, the reviser is additionally grounded in each PDF's own text layer (the real characters/digits, extracted per-block via the bbox), which removes most character-level OCR noise.

Two text fields are provided per block:

  • —`ocr` — the teacher's raw output, captured before any rendering post-processing: tables are OTSL (not HTML), formulas keep native \(...\) delimiters, everything else is plain text. (Repetitive-loop truncation is applied.)
  • —`ocr_revised` — the revised label (populated for >99.9% of rows; the rare null means no trustworthy revision → use ocr). Produced per type:
  • —tables — re-transcribed from scratch by Qwen3.6 given the crop image + the PDF text-layer text for the region (the raw OCR is not shown, so its errors can't anchor the output). The model emits a strict HTML table which is deterministically converted to OTSL (regular grid; rowspan/colspan → lcel/ucel/xcel), with information-free padding columns/rows collapsed. 14 / 29,428 failed conversion → null.
  • —seals — read with full-page context: the stamp crop + the rendered page (stamp location marked) + the page's text layer, using the priors that large stamps are company names and small stamps personal names from the signature lines. 1 / 1,835 unresolved → null.
  • —all other types — Qwen3.6 correction of the raw OCR against the crop image (instruct mode; anti-hallucination prompt).

Both text fields are normalized to Traditional Chinese with OpenCC (s2t): the documents are Traditional-only, so any Simplified characters the VLMs emitted are OCR errors and are converted back (统→統, 陈→陳, …). OTSL tags, LaTeX, digits, and punctuation are unaffected.

Schema

columntypenotes
imageimagethe crop fed to the VLM
typestringlayout label (see distribution)
ocrstringraw teacher output; OTSL for tables, \(...\) for formulas
ocr_revisedstringQwen3.6-corrected text; null if not kept → fall back to ocr
bboxint[4][x1,y1,x2,y2] in rendered-page pixels
polygon_pointsint[][]null in rectangular layout mode
group_idintmerged-block grouping
page_width, page_heightintfor normalising bbox
doc_idstringe.g. 2330_2023_Q4_AI1 (coidyearquartertype)
page_index, block_indexint(doc_id, page_index, block_index) is the key
sourcestringmops_caibao

Type distribution

text 44.2% · table 15.1% · paragraph_title 14.8% · number 10.6% · vision_footnote 4.5% · figure_title 4.4% · header 2.1% · doc_title 1.9% · seal 0.9% · footer 0.9% · image 0.3% · plus footnote, content, reference_content, chart, formula, aside_text, algorithm.

Companies

TSMC 台積電, Hon Hai 鴻海, MediaTek 聯發科, Chunghwa Telecom 中華電, Cathay FHC 國泰金, Fubon FHC 富邦金, Formosa Plastics 台塑, Nan Ya 南亞, China Steel 中鋼, Evergreen 長榮, Uni-President 統一, President Chain 統一超, Delta 台達電, Feng Tay 豐泰, Hotai Motor 和泰車.

Source documents

The original PDFs are included under `source_pdfs/` (138 files) with `source_pdfs/manifest.jsonl` (per-file co_id, company, year, season, report_type, source url, bytes, sha256). A row's doc_id ({co_id}_{year}_{quarter}_AI1) maps to the matching manifest entry / PDF, so every block is traceable back to its page in the source filing.

Usage

python
from datasets import load_dataset
ds = load_dataset("andynoodles/TaiwanFinancial", split="train")
row = ds[0]
row["image"]            # PIL crop
row["type"], row["ocr"] # e.g. "table", "<fcel>資產<fcel>附註..."

tables = ds.filter(lambda r: r["type"] == "table")          # OTSL tables
text   = ds.filter(lambda r: r["type"] in ("text", "paragraph_title", "doc_title"))

Quality & limitations

  • —Model-generated labels (distillation) — not human-verified, though tables and seals are grounded in the PDF text layer / page context (see above), which removes most character-level noise.
  • —Tables: both ocr and ocr_revised are OTSL. ocr_revised is a fresh text-layer-grounded transcription, so its cell segmentation can legitimately differ from ocr (e.g. recovered columns, merged wrapped labels). A small residue of tables may carry an extra empty column from a shifted header.
  • —`ocr` (raw) is least reliable for: seal (heavy hallucination on stylized stamp glyphs — but ocr_revised resolves them against the page's signature lines), number (tiny markers), and image regions. Filter by `type` and prefer ocr_revised where quality matters.
  • —ocr_revised may differ from ocr in benign ways (spacing/punctuation-width normalisation, Simplified→Traditional fixes, and for tables/seals the text-layer-faithful rendering described above; e.g. the PDF text layer's half-width parentheses where OCR used full-width).
  • —3 of 138 PDFs have no usable text layer (1 scanned, 2 with un-mapped CID fonts); their tables/seals were revised from images alone.

Acknowledgements

This dataset was produced with the following open models and tools — sincere thanks to their authors and communities:

  • —[PP-DocLayoutV3](https://huggingface.co/PaddlePaddle/PP-DocLayoutV3_safetensors) — document layout detection.
  • —[PaddleOCR-VL-1.6](https://huggingface.co/PaddlePaddle/PaddleOCR-VL-1.6) — vision-language OCR; the teacher that produced the ocr field.
  • —[Qwen3.6-35B-A3B-FP8](https://huggingface.co/Qwen/Qwen3.6-35B-A3B-FP8) — vision-language model used for OCR revision (ocr_revised).
  • —[OpenCC](https://github.com/BYVoid/OpenCC) — Simplified→Traditional Chinese conversion.

License

Built from MOPS / TWSE public regulatory filings (Taiwan government open disclosure). Provided for research and development use; verify terms for your own use case. Labels are generated by PaddleOCR-VL and Qwen3.6.

Citation (required)

This dataset is part of the Taiwan Document OCR (zh-Hant) collection by Andy Chen (andynoodles). If you use this dataset — in research, training data, products, or derivatives — you must cite it:

bibtex
@misc{chen2026_financial,
  title        = {Taiwan Financial Report OCR (block-level, zh-Hant)},
  author       = {Chen, Andy (andynoodles)},
  year         = {2026},
  publisher    = {Hugging Face},
  howpublished = {\url{https://huggingface.co/datasets/andynoodles/TaiwanFinancial}},
  note         = {Part of the Taiwan Document OCR (zh-Hant) collection}
}

Citing this dataset is required in addition to the source-attribution noted under License & provenance above. Please retain both this citation and the original source attribution in any redistribution or derived work.