-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconversion-eval.html
More file actions
16 lines (16 loc) · 51.4 KB
/
Copy pathconversion-eval.html
File metadata and controls
16 lines (16 loc) · 51.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!doctype html>
<html lang="en" dir="ltr" class="plugin-pages plugin-id-default" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.10.2">
<title data-rh="true">Conversion eval | neokapi</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" property="og:image" content="https://neokapi.github.io/img/og-card.png"><meta data-rh="true" name="twitter:image" content="https://neokapi.github.io/img/og-card.png"><meta data-rh="true" property="og:url" content="https://neokapi.github.io/conversion-eval"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" property="og:locale:alternate" content="nb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" name="twitter:site" content="@neokapi"><meta data-rh="true" property="og:title" content="Conversion eval | neokapi"><meta data-rh="true" name="description" content="How much of a document's text each converter keeps, scored against the documents themselves"><meta data-rh="true" property="og:description" content="How much of a document's text each converter keeps, scored against the documents themselves"><link data-rh="true" rel="icon" href="/img/favicon.png"><link data-rh="true" rel="canonical" href="https://neokapi.github.io/conversion-eval"><link data-rh="true" rel="alternate" href="https://neokapi.github.io/conversion-eval" hreflang="en"><link data-rh="true" rel="alternate" href="https://neokapi.github.io/nb/conversion-eval" hreflang="nb"><link data-rh="true" rel="alternate" href="https://neokapi.github.io/qps/conversion-eval" hreflang="en"><link data-rh="true" rel="alternate" href="https://neokapi.github.io/conversion-eval" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.f4228ccd.css">
<script src="/assets/js/runtime~main.f7852c0e.js" defer="defer"></script>
<script src="/assets/js/main.bee0a246.js" defer="defer"></script>
</head>
<body>
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/img/logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_WmD6" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="neokapi" class="themedComponent_wbKQ themedComponent--light_jlwr"><img src="/img/logo.png" alt="neokapi" class="themedComponent_wbKQ themedComponent--dark_D5UJ"></div><b class="navbar__title text--truncate">neokapi</b></a><a class="navbar__item navbar__link" href="/kapi/overview">Kapi</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Labs</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/labs">Labs overview</a></li><li><a class="dropdown__link" href="/lab">Content Model Workspace</a></li><li><a class="dropdown__link" href="/lab/segmentation">Segmentation</a></li><li><a class="dropdown__link" href="/lab/convert">File Conversion</a></li><li><a class="dropdown__link" href="/lab/structure">Structure & Layout</a></li><li><a class="dropdown__link" href="/lab/vision">Vision</a></li><li><a class="dropdown__link" href="/lab/media">Audio & Video</a></li><li><a class="dropdown__link" href="/playground-cli">CLI Playground</a></li><li><a class="dropdown__link" href="/kbf-lab">KBF Anatomy</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Reference</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/reference">Reference Overview</a></li><li><a class="dropdown__link" href="/commands">Kapi CLI Commands</a></li><li><a class="dropdown__link" href="/formats">Formats</a></li><li><a class="dropdown__link" href="/tools">Tools</a></li><li><a class="dropdown__link" href="/models">AI Models</a></li><li><a class="dropdown__link" href="/reference/project-file">Project file</a></li><li><a class="dropdown__link" href="/reference/serialization/overview">kapi serialization formats</a></li><li><a class="dropdown__link" href="/reference/mcp">MCP Server</a></li><li><a class="dropdown__link" href="/reference/cli-contract">Scripting & JSON contract</a></li><li><a class="dropdown__link" href="/reference/engine-service">Engine service (gRPC)</a></li><li><a class="dropdown__link" href="/reference/telemetry">Telemetry</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Toolbox</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/toolbox/overview">CLI tools</a></li><li><a class="dropdown__link" href="/react/introduction">neokapi-i18n</a></li></ul></div><a class="navbar__item navbar__link" href="/framework/architecture">Framework</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link navbar-locale-icon"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" class="iconLanguage_Lw9k"><path fill="currentColor" d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"></path></svg>English</a><ul class="dropdown__menu"><li><a href="/conversion-eval" target="_self" rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang="en">English</a></li><li><a href="/nb/conversion-eval" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="nb">Norsk (bokmål)</a></li><li><a href="/qps/conversion-eval" target="_self" rel="noopener noreferrer" class="dropdown__link" lang="en">Þšéüđö Éñĝļîšĥ</a></li></ul></div><a href="https://github.com/neokapi/neokapi" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository"></a><div class="toggle_IPLv colorModeToggle_KrYI"><button class="clean-btn toggleButton_hVnx toggleButtonDisabled_kmUe" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_FAva lightToggleIcon_frLN"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_FAva darkToggleIcon_fLy3"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_FAva systemToggleIcon_kwTI"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_R3Ot"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_Xz0H"><main style="max-width:1080px;margin:0 auto;padding:2rem 1rem 4rem"><h1 style="margin-bottom:.3rem">Conversion</h1><div style="display:flex;gap:.5rem;align-items:center;margin-bottom:.8rem"><span style="fg:var(--ifm-color-emphasis-800);bg:var(--ifm-color-emphasis-200);font-family:var(--ifm-font-family-monospace);font-size:.72rem;padding:.1rem .45rem;border-radius:4px;white-space:nowrap">measured 4d ago</span><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">make conversion-eval</code></div><p style="font-size:1.05rem;line-height:1.6;max-width:68ch">How much of a document’s text each converter keeps, and how long it takes. The answer comes from the documents rather than from any converter: OOXML designates which elements carry text, so each file states its own contents and no tool’s output has to stand in for the truth.</p><div style="border-left:4px solid var(--ifm-color-emphasis-400);background:var(--ifm-color-emphasis-100);padding:.85rem 1.1rem;border-radius:0 6px 6px 0;margin-top:1rem;line-height:1.6;max-width:72ch"><strong>Corpus.</strong> <!-- -->The Okapi Framework's own integration-test resources (okapi-testdata 1.48.0). Real documents, collected by another project for another purpose, which is what makes them a fair test rather than a demonstration.<!-- --> <!-- -->All <!-- -->1,128<!-- --> of them.</div><h2 style="font-size:1.35rem;margin-top:2.6rem;margin-bottom:.4rem">By format</h2><p style="color:var(--ifm-color-emphasis-700);max-width:72ch;line-height:1.6">These are the comparable numbers. Within one extension every converter read the same documents, so the same ground truth is behind each row.</p><div style="border:1px solid var(--ifm-color-emphasis-300);border-radius:8px;padding:1.1rem 1.3rem;margin-top:1rem;background:var(--ifm-background-surface-color)"><div style="display:flex;gap:.6rem;align-items:baseline;flex-wrap:wrap"><strong><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">.docx</code></strong><span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">599<!-- --> documents · <!-- -->275,469<!-- --> words of ground truth · every converter below read the same files. A mean well under the typical file means a few documents went badly wrong.</span></div><div style="border-left:4px solid var(--ifm-color-emphasis-400);background:var(--ifm-color-emphasis-100);padding:.85rem 1.1rem;border-radius:0 6px 6px 0;margin-top:.7rem;line-height:1.6;max-width:72ch"><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">big.docx</code> carries <!-- -->34<!-- -->% of this format’s ground truth, so the words-kept column is mostly a score about that one document. The typical-file and mean columns weight every document equally.</div><div style="overflow-x:auto;margin-top:.8rem"><table style="width:100%;border-collapse:collapse;font-size:.88rem"><thead><tr><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">converter</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">words kept</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">typical file</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">mean file</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">failed</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">median time</th></tr></thead><tbody><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>kapi</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">kapi v1.2.0-rc28-17-g2a5d76a88 (beta, commit: 2a5d76a88, built: 2026-08-27T09:44:05Z)</span></td><td style="text-align:right;font-variant-numeric:tabular-nums"><div style="display:flex;align-items:center;gap:.5rem;justify-content:flex-end"><div style="width:70px;height:6px;background:var(--ifm-color-emphasis-200);border-radius:3px;overflow:hidden"><div style="width:96.94339471955101%;height:100%;background:var(--ifm-color-success-contrast-foreground)"></div></div><span style="font-variant-numeric:tabular-nums;min-width:3.5rem;text-align:right">99.4%</span></div></td><td style="text-align:right;font-variant-numeric:tabular-nums">100.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">96.1%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="text-align:right;font-variant-numeric:tabular-nums">29ms</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>textutil</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">macos</span></td><td style="text-align:right;font-variant-numeric:tabular-nums"><div style="display:flex;align-items:center;gap:.5rem;justify-content:flex-end"><div style="width:70px;height:6px;background:var(--ifm-color-emphasis-200);border-radius:3px;overflow:hidden"><div style="width:95.80715071387344%;height:100%;background:var(--ifm-color-success-contrast-foreground)"></div></div><span style="font-variant-numeric:tabular-nums;min-width:3.5rem;text-align:right">99.2%</span></div></td><td style="text-align:right;font-variant-numeric:tabular-nums">100.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">98.3%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="text-align:right;font-variant-numeric:tabular-nums">95ms</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>pandoc</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">3.10.1</span></td><td style="text-align:right;font-variant-numeric:tabular-nums"><div style="display:flex;align-items:center;gap:.5rem;justify-content:flex-end"><div style="width:70px;height:6px;background:var(--ifm-color-emphasis-200);border-radius:3px;overflow:hidden"><div style="width:94.70539334734582%;height:100%;background:var(--ifm-color-warning-contrast-foreground)"></div></div><span style="font-variant-numeric:tabular-nums;min-width:3.5rem;text-align:right">98.9%</span></div></td><td style="text-align:right;font-variant-numeric:tabular-nums">100.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">97.2%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="text-align:right;font-variant-numeric:tabular-nums">37ms</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>libreoffice</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">26.2.5.2</span></td><td style="text-align:right;font-variant-numeric:tabular-nums"><div style="display:flex;align-items:center;gap:.5rem;justify-content:flex-end"><div style="width:70px;height:6px;background:var(--ifm-color-emphasis-200);border-radius:3px;overflow:hidden"><div style="width:90.0950742188776%;height:100%;background:var(--ifm-color-warning-contrast-foreground)"></div></div><span style="font-variant-numeric:tabular-nums;min-width:3.5rem;text-align:right">98.0%</span></div></td><td style="text-align:right;font-variant-numeric:tabular-nums">100.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">93.5%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="text-align:right;font-variant-numeric:tabular-nums">3.8s</td></tr></tbody></table></div></div><div style="border:1px solid var(--ifm-color-emphasis-300);border-radius:8px;padding:1.1rem 1.3rem;margin-top:1rem;background:var(--ifm-background-surface-color)"><div style="display:flex;gap:.6rem;align-items:baseline;flex-wrap:wrap"><strong><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">.pptx</code></strong><span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">242<!-- --> documents · <!-- -->11,002<!-- --> words of ground truth · every converter below read the same files. A mean well under the typical file means a few documents went badly wrong.</span></div><div style="overflow-x:auto;margin-top:.8rem"><table style="width:100%;border-collapse:collapse;font-size:.88rem"><thead><tr><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">converter</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">words kept</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">typical file</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">mean file</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">failed</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">median time</th></tr></thead><tbody><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>kapi</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">kapi v1.2.0-rc28-17-g2a5d76a88 (beta, commit: 2a5d76a88, built: 2026-08-27T09:44:05Z)</span></td><td style="text-align:right;font-variant-numeric:tabular-nums"><div style="display:flex;align-items:center;gap:.5rem;justify-content:flex-end"><div style="width:70px;height:6px;background:var(--ifm-color-emphasis-200);border-radius:3px;overflow:hidden"><div style="width:91.0470823486639%;height:100%;background:var(--ifm-color-warning-contrast-foreground)"></div></div><span style="font-variant-numeric:tabular-nums;min-width:3.5rem;text-align:right">98.2%</span></div></td><td style="text-align:right;font-variant-numeric:tabular-nums">100.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">94.6%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="text-align:right;font-variant-numeric:tabular-nums">31ms</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>pandoc</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">3.10.1</span></td><td style="text-align:right;font-variant-numeric:tabular-nums"><div style="display:flex;align-items:center;gap:.5rem;justify-content:flex-end"><div style="width:70px;height:6px;background:var(--ifm-color-emphasis-200);border-radius:3px;overflow:hidden"><div style="width:81.04890019996365%;height:100%;background:var(--ifm-color-warning-contrast-foreground)"></div></div><span style="font-variant-numeric:tabular-nums;min-width:3.5rem;text-align:right">96.2%</span></div></td><td style="text-align:right;font-variant-numeric:tabular-nums">100.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">96.3%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="text-align:right;font-variant-numeric:tabular-nums">36ms</td></tr></tbody></table></div></div><div style="border:1px solid var(--ifm-color-emphasis-300);border-radius:8px;padding:1.1rem 1.3rem;margin-top:1rem;background:var(--ifm-background-surface-color)"><div style="display:flex;gap:.6rem;align-items:baseline;flex-wrap:wrap"><strong><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">.xlsx</code></strong><span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">249<!-- --> documents · <!-- -->4,518,533<!-- --> words of ground truth · every converter below read the same files. A mean well under the typical file means a few documents went badly wrong.</span></div><div style="border-left:4px solid var(--ifm-color-emphasis-400);background:var(--ifm-color-emphasis-100);padding:.85rem 1.1rem;border-radius:0 6px 6px 0;margin-top:.7rem;line-height:1.6;max-width:72ch"><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">large.xlsx</code> carries <!-- -->100<!-- -->% of this format’s ground truth, so the words-kept column is mostly a score about that one document. The typical-file and mean columns weight every document equally.</div><div style="overflow-x:auto;margin-top:.8rem"><table style="width:100%;border-collapse:collapse;font-size:.88rem"><thead><tr><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">converter</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">words kept</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">typical file</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">mean file</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">failed</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">median time</th></tr></thead><tbody><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>kapi</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">kapi v1.2.0-rc28-17-g2a5d76a88 (beta, commit: 2a5d76a88, built: 2026-08-27T09:44:05Z)</span></td><td style="text-align:right;font-variant-numeric:tabular-nums"><div style="display:flex;align-items:center;gap:.5rem;justify-content:flex-end"><div style="width:70px;height:6px;background:var(--ifm-color-emphasis-200);border-radius:3px;overflow:hidden"><div style="width:99.99822951387097%;height:100%;background:var(--ifm-color-success-contrast-foreground)"></div></div><span style="font-variant-numeric:tabular-nums;min-width:3.5rem;text-align:right">100.0%</span></div></td><td style="text-align:right;font-variant-numeric:tabular-nums">100.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">99.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="text-align:right;font-variant-numeric:tabular-nums">28ms</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>libreoffice</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">26.2.5.2</span></td><td style="text-align:right;font-variant-numeric:tabular-nums"><div style="display:flex;align-items:center;gap:.5rem;justify-content:flex-end"><div style="width:70px;height:6px;background:var(--ifm-color-emphasis-200);border-radius:3px;overflow:hidden"><div style="width:94.92091791738602%;height:100%;background:var(--ifm-color-warning-contrast-foreground)"></div></div><span style="font-variant-numeric:tabular-nums;min-width:3.5rem;text-align:right">99.0%</span></div></td><td style="text-align:right;font-variant-numeric:tabular-nums">62.1%</td><td style="text-align:right;font-variant-numeric:tabular-nums">73.1%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="text-align:right;font-variant-numeric:tabular-nums">3.8s</td></tr></tbody></table></div></div><h2 style="font-size:1.35rem;margin-top:2.6rem;margin-bottom:.4rem">Where the losses are</h2><p style="color:var(--ifm-color-emphasis-700);max-width:72ch;line-height:1.6">A percentage with no example under it cannot be acted on. Each converter’s worst documents are listed with the words that did not survive.</p><details style="border:1px solid var(--ifm-color-emphasis-300);border-radius:8px;padding:1.1rem 1.3rem;margin-top:1rem;background:var(--ifm-background-surface-color)"><summary><strong>kapi</strong>: the documents it lost the most on</summary><p style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">prints the content kapi read into its model; the read half of a round trip</p><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">kapi kcat <file></code><div style="overflow-x:auto;margin-top:.8rem"><table style="width:100%;border-collapse:collapse;font-size:.88rem"><thead><tr><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">document</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">kept</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">words</th><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">what went missing</th></tr></thead><tbody><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-5.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-5.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1433-text-for-masking.xlsx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="font-size:.82rem"></td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">859.xlsx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">5</td><td style="font-size:.82rem">cell ×3, 1a, 2b</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">Document-with-tabs-2.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">after, before</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">Document-with-tabs.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">after, before</td></tr></tbody></table></div></details><details style="border:1px solid var(--ifm-color-emphasis-300);border-radius:8px;padding:1.1rem 1.3rem;margin-top:1rem;background:var(--ifm-background-surface-color)"><summary><strong>libreoffice</strong>: the documents it lost the most on</summary><p style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">a full office suite rendering to text; its txt targets are Writer and Calc, and Impress has none</p><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">soffice --headless --convert-to <filter> --outdir <dir> <file></code><div style="overflow-x:auto;margin-top:.8rem"><table style="width:100%;border-collapse:collapse;font-size:.88rem"><thead><tr><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">document</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">kept</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">words</th><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">what went missing</th></tr></thead><tbody><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-5.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-5.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1433-text-for-masking.xlsx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="font-size:.82rem"></td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">AlternateContent.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">6</td><td style="font-size:.82rem">one ×2, three ×2, two ×2</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">Out1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">Outneverendingloop.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td><td style="font-size:.82rem"></td></tr></tbody></table></div></details><details style="border:1px solid var(--ifm-color-emphasis-300);border-radius:8px;padding:1.1rem 1.3rem;margin-top:1rem;background:var(--ifm-background-surface-color)"><summary><strong>pandoc</strong>: the documents it lost the most on</summary><p style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">a document converter; text is one of many targets</p><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">pandoc -t plain <file></code><div style="overflow-x:auto;margin-top:.8rem"><table style="width:100%;border-collapse:collapse;font-size:.88rem"><thead><tr><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">document</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">kept</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">words</th><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">what went missing</th></tr></thead><tbody><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-5.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-5.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">847-1.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">3</td><td style="font-size:.82rem">added, after, deletion</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">Endpara.pptx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">8</td><td style="font-size:.82rem">okapi ×2, com, framework, http, opentag, team, the</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">Out1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">Out1341-textbox-with-a-hyperlink.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">1</td><td style="font-size:.82rem">okapiframework</td></tr></tbody></table></div></details><details style="border:1px solid var(--ifm-color-emphasis-300);border-radius:8px;padding:1.1rem 1.3rem;margin-top:1rem;background:var(--ifm-background-surface-color)"><summary><strong>textutil</strong>: the documents it lost the most on</summary><p style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">the macOS text-extraction utility; Word documents only</p><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">textutil -convert txt -stdout <file></code><div style="overflow-x:auto;margin-top:.8rem"><table style="width:100%;border-collapse:collapse;font-size:.88rem"><thead><tr><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">document</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">kept</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">words</th><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">what went missing</th></tr></thead><tbody><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-5.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">1200-5.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">858.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">8</td><td style="font-size:.82rem">2013, as, in, ms, office, ooxml, saving, strict</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">859.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">16</td><td style="font-size:.82rem">text ×2, 2013, as, box, changes, for, hyperlink, in, ms, new, office, ooxml</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">Out1200-4.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">2</td><td style="font-size:.82rem">one, واحد</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><code style="font-family:var(--ifm-font-family-monospace);font-size:.8rem;background:var(--ifm-color-emphasis-100);padding:.15rem .35rem;border-radius:4px">Out858.docx</code></td><td style="text-align:right;font-variant-numeric:tabular-nums">0.0%</td><td style="text-align:right;font-variant-numeric:tabular-nums">8</td><td style="font-size:.82rem">2013, as, in, ms, office, ooxml, saving, strict</td></tr></tbody></table></div></details><h2 style="font-size:1.35rem;margin-top:2.6rem;margin-bottom:.4rem">Across everything each tool accepted</h2><p style="color:var(--ifm-color-emphasis-700);max-width:72ch;line-height:1.6">Not a ranking. The tools read different file sets: textutil takes Word documents only, LibreOffice has no text target for Impress, pandoc does not read spreadsheets. So these numbers are computed over different documents and the column cannot be compared top to bottom.</p><div style="border:1px solid var(--ifm-color-emphasis-300);border-radius:8px;padding:1.1rem 1.3rem;margin-top:1rem;background:var(--ifm-background-surface-color);overflow-x:auto"><table style="width:100%;border-collapse:collapse;font-size:.88rem"><thead><tr><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">converter</th><th style="text-align:left;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">reads</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">documents</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">words kept</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">lost nothing</th><th style="text-align:right;font-size:.76rem;text-transform:uppercase;letter-spacing:.05em">failed</th></tr></thead><tbody><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>kapi</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">kapi v1.2.0-rc28-17-g2a5d76a88 (beta, commit: 2a5d76a88, built: 2026-08-27T09:44:05Z)</span></td><td style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">.docx .pptx .xlsx</td><td style="text-align:right;font-variant-numeric:tabular-nums">1090</td><td style="text-align:right;font-variant-numeric:tabular-nums">100.0%<!-- --> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">of <!-- -->4,805,004</span></td><td style="text-align:right;font-variant-numeric:tabular-nums">863<!-- -->/<!-- -->1090</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>libreoffice</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">26.2.5.2</span></td><td style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">.docx .xlsx</td><td style="text-align:right;font-variant-numeric:tabular-nums">848</td><td style="text-align:right;font-variant-numeric:tabular-nums">98.9%<!-- --> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">of <!-- -->4,794,002</span></td><td style="text-align:right;font-variant-numeric:tabular-nums">620<!-- -->/<!-- -->848</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>pandoc</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">3.10.1</span></td><td style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">.docx .pptx</td><td style="text-align:right;font-variant-numeric:tabular-nums">841</td><td style="text-align:right;font-variant-numeric:tabular-nums">98.8%<!-- --> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">of <!-- -->286,471</span></td><td style="text-align:right;font-variant-numeric:tabular-nums">661<!-- -->/<!-- -->841</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td></tr><tr style="border-top:1px solid var(--ifm-color-emphasis-200)"><td><strong>textutil</strong> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">macos</span></td><td style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">.docx</td><td style="text-align:right;font-variant-numeric:tabular-nums">599</td><td style="text-align:right;font-variant-numeric:tabular-nums">99.2%<!-- --> <span style="font-size:.8rem;color:var(--ifm-color-emphasis-600)">of <!-- -->275,469</span></td><td style="text-align:right;font-variant-numeric:tabular-nums">461<!-- -->/<!-- -->599</td><td style="text-align:right;font-variant-numeric:tabular-nums">0</td></tr></tbody></table></div><h2 style="font-size:1.35rem;margin-top:2.6rem;margin-bottom:.4rem">How it is scored</h2><div style="border-left:4px solid var(--ifm-color-emphasis-400);background:var(--ifm-color-emphasis-100);padding:.85rem 1.1rem;border-radius:0 6px 6px 0;margin-top:1rem;line-height:1.6;max-width:72ch">Multiset word recall against the text nodes each document's own parts declare, per the OOXML spec. Words of one character are dropped from both sides. The headline is word-weighted across the corpus, not an average of per-file scores: this corpus holds two-word fixtures, and giving those the same weight as a full report is how the first version of this table got its numbers. Recall only — a converter that emits extra text is doing something different from one that loses it, and this measures loss.</div><div style="border-left:4px solid var(--ifm-color-emphasis-400);background:var(--ifm-color-emphasis-100);padding:.85rem 1.1rem;border-radius:0 6px 6px 0;margin-top:1rem;line-height:1.6;max-width:72ch"><strong>What this does not establish.</strong> <!-- -->Structure and ordering are not compared, so a converter that flattens every heading scores the same as one that keeps the outline. Headers, footers, footnotes, comments and speaker notes are excluded, because converters disagree about whether those belong in the output and counting them would score that disagreement. The four tools are not the same kind of thing — see each row's note.</div></main></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/kapi/get-started/quickstart">Get started</a></li><li class="footer__item"><a class="footer__link-item" href="/kapi/overview">Kapi</a></li><li class="footer__item"><a class="footer__link-item" href="/framework/architecture">Framework</a></li><li class="footer__item"><a class="footer__link-item" href="/kapi/cli">Kapi CLI</a></li><li class="footer__item"><a class="footer__link-item" href="/toolbox/overview">CLI tools</a></li><li class="footer__item"><a class="footer__link-item" href="/react/introduction">neokapi-i18n</a></li><li class="footer__item"><a class="footer__link-item" href="/reference">Reference</a></li><li class="footer__item"><a class="footer__link-item" href="/formats">Format Reference</a></li><li class="footer__item"><a class="footer__link-item" href="/evals">Tests & Evals</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://github.com/neokapi/neokapi" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_RkRR"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/neokapi/homebrew-tap" target="_blank" rel="noopener noreferrer" class="footer__link-item">Homebrew Tap<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_RkRR"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2026 neokapi contributors. Built with Docusaurus. · built 2026-08-31 17:54 UTC · 861f227</div></div></div></footer></div>
</body>
</html>