Blogg

Slik gjør du PDF- og Word-filer om til tekst for AI: Microsofts MarkItDown

Markdown

Grundig gjennomgang: Slik gjør du PDF- og Word-filer om til tekst for AI: Microsofts MarkItDown.

Les hele artikkelen

Hovedpoeng

MarkItDown er et gratis Microsoft-verktøy som gjør Word-, Excel-, presentasjons- og PDF-filer om til strukturert tekst for AI. Det tolker Office-filer ryddig på en brøkdel av et sekund. Det gjør PDF-filer med kompliserte oppsett til et rot, og returnerer en tom fil med avslutningskode null for en skanning. Nedenfor finner du en installasjonskommando som virker, målinger på dokumenter med kyrillisk tekst og en regel for når du bør bruke et annet verktøy.

Flere instruksjoner finnes i Ailoot-dokumentasjonen.

Hva er MarkItDown, og hva brukes det til?

Hovedpoeng

MarkItDown er et Python-verktøy fra Microsoft som leser en fil og returnerer innholdet som strukturert tekst. Overskrifter blir overskrifter, og tabeller blir tabeller. Det ligger i et åpent GitHub-repositorium under MIT-lisensen, installeres med én kommando og utfører all behandling på maskinen din. Det har én oppgave: å klargjøre et dokument slik at en AI ikke bare ser ordene, men også strukturen.

Du sender en AI en kontrakt, en rapport eller en regnskapseksport og får et svar som ikke har noe med dokumentet å gjøre. Årsaken er vanligvis ikke modellen. Filen har et format: Word er et arkiv med oppmerking, Excel er et regneark med koblinger mellom celler, og PDF er et sett med tegn med koordinater på en side. Modellen arbeider med tekst, og noen må hente ut teksten.

Det er det MarkItDown gjør. Repositoriet ligger på github.com/microsoft/markitdown, under MIT-lisensen, så du kan bruke det uten begrensninger. Per 18. august 2026 har det 174,412 stjerner og 12,756 forker; den nyeste utgivelsen, 0.1.7, kom 29. juli. Prosjektet er aktivt, men fokuset har skiftet fra utvikling til vedlikehold: det har 481 åpne pull-forespørsler, mot 183 som er slått sammen gjennom hele historikken.

Utviklerne beskriver formålet slik:

MarkItDown er et lettvekts Python-verktøy for å konvertere filer i ulike formater til Markdown for bruk med store språkmodeller og relaterte tekstanalysesystemer.

— Microsoft, prosjektbeskrivelse (oversatt), https://github.com/microsoft/markitdown

Den neste setningen i beskrivelsen forklarer halvparten av klagene folk har på verktøyet:

Selv om resultatet ofte ser ganske bra og brukervennlig ut, er det ment for bruk av tekstanalyseverktøy og er kanskje ikke det beste valget for konvertering med høy nøyaktighet av dokumenter som skal leses av mennesker.

— Microsoft, prosjektbeskrivelse (oversatt), https://github.com/microsoft/markitdown

Resultatet er råmateriale for en modell. Det blir ikke et vakkert dokument, og prosjektet sier det tydelig rett i den første delen.

Beskrivelsen svarer direkte på hvorfor det bruker Markdown: ledende modeller «snakker» allerede dette oppmerkingsspråket og tar det med i svarene sine uten å bli bedt om det, fordi de så enorme mengder av det under treningen. Oppmerkingen er også kompakt: tre firkanttegn for en overskrift i stedet for et dusin linjer med metadata.

Hvordan skiller MarkItDown seg fra en vanlig konverterer?

Hovedpoeng

Konverterere som pandoc oversetter ett oppmerkingsspråk til et annet og bevarer oppsettet for mennesker. pandoc godtar ikke PDF som inndata i det hele tatt. MarkItDown løser det motsatte problemet: trekke ut innhold fra en Office-fil og ordne det slik at en modell kan forstå det med en gang uten å sløse med tokener. Å bevare det visuelle oppsettet er ikke målet, og det er hele forskjellen.

Forskjellen blir tydelig med ett eksempel. Ta en mappe med tjue PDF-filer og prøv å kjøre dem gjennom pandoc. Det fungerer ikke: pandoc kan lage PDF-filer som utdata, men kan ikke lese dem som inndata. Og denne situasjonen – «Jeg har en bunke dokumenter; gi dem til modellen» – er den vanligste.

Forfatterne av MarkItDown sammenligner seg med textract, et bibliotek som ganske enkelt trekker ut tekst hvor som helst fra. Forskjellen er at MarkItDown prøver å bevare strukturen: overskrifter, lister, tabeller og lenker.

FunksjonpandocMarkItDown
Leser PDF-filerneija, med forbehold
Leser Word, Excel, presentasjonerdelvisja
Tiltenkt målgruppe for utdatamenneskermodeller
Viktigste verditrofasthet mot oppsettetstruktur og lavt tegntall
Installasjonfrittstående programén Python-kommando

Den praktiske konklusjonen er enkel. Hvis du må konvertere en artikkel til et oppsett for publisering, bruker du pandoc. Hvis du trenger at en AI skal forstå tjue kontrakter, bruker du MarkItDown.

Hvordan installerer du MarkItDown uten å få den første utgivelsen?

Hovedpoeng

Med utgivelse 0.1.8 installerer kommandoen i prosjektbeskrivelsen den nyeste versjonen på Python 3.14 og 3.12; dette er kontrollert på nytt i åtte rene miljøer. En stille nedgradering til 0.0.2, den andre utgivelsen i prosjektets historie, skjer fortsatt på Python 3.15, på Intel-Macer med 3.14 og på Macer med eldre macOS-versjoner som kjører 3.13 og 3.14. I disse tilfellene melder installasjonsprogrammet at det lyktes. Bruk derfor Python 3.12, oppgi formatene du trenger ved navn, og kontroller versjonsnummeret med en gang.

Først den riktige kommandoen, deretter hvorfor den er riktig.

  1. Kontroller Python-versjonen

    Python 3.12 er mest pålitelig: den nyeste MarkItDown installeres i alle miljøene som er testet med den. Kommandoen python3 --version viser hvilken versjon du har. På Intel-Macer eller Macer med en eldre macOS-versjon kan Python 3.13 og 3.14 stille nedgradere; Python 3.15 støttes ennå ikke, som forklart nedenfor.

  2. Installer med formatene oppgitt

    Kjør pip install 'markitdown[pdf,docx,xlsx,pptx]'. Anførselstegnene er nødvendige, ellers tolker skallet hakeparentesene. På en Intel-Mac legger du til flagget --prefer-binary etter install.

  3. Kontroller straks at det ble installert

    Kjør markitdown --version. Svaret skal være markitdown 0.1.8 eller nyere. Et lavere nummer betyr at installasjonen ble nedgradert; denne delen forklarer hvorfor.

pip install 'markitdown[pdf,docx,xlsx,pptx]'
markitdown --version

Prosjektbeskrivelsen oppgir pip install 'markitdown[all]' som hovedkommandoen for å installere alt på én gang. 28. september 2026, en uke etter at 0.1.8 kom ut, ble fire varianter kjørt i rene miljøer på en Apple Silicon-Mac med Python 3.14.6 og 3.12.12:

KommandoInstallert på Python 3.14Installert på Python 3.12
pip install markitdown0.1.80.1.8
pip install 'markitdown[pdf,docx,xlsx,pptx]'0.1.80.1.8
pip install 'markitdown[all]'0.1.80.1.8
pip install 'markitdown[all]==0.1.8'0.1.80.1.8

Alle åtte installasjonene endte med «Successfully installed», og markitdown --version returnerte 0.1.8 i hvert tilfelle. I august, da 0.1.7 var den nyeste utgivelsen, installerte den tredje kommandoen 0.0.2 på Python 3.14, utgitt 8. mars 2025 – den andre utgivelsen i prosjektets historie. Nå har det elleve stabile utgivelser, fra 0.0.1 til 0.1.8, og tjueseks inkludert forhåndsutgivelser.

Årsaken var avhengighetskjeden. I 0.1.7 henter ekstratilvalget [all] inn et bibliotek for YouTube-undertekster fra en bestemt utgivelsesserie, og alle utgivelsene i den serien oppgir at de ikke fungerer på Python 3.14. Installasjonsprogrammet avviser dem, og fordi ingen versjon er låst, går det bakover gjennom MarkItDown-versjonene til det finner en som kan installeres. Det finner 0.0.2 og installerer den, slik at du får en utgivelse fra halvannet år tidligere på maskinen. I 0.1.8 ble kravet til undertekstbiblioteket hevet til en serie som fungerer på 3.14, og nedgraderingen stoppet der.

Mekanismen finnes fortsatt. Hvis installasjonsprogrammet ikke finner én nødvendig komponent for systemet ditt, går det stille tilbake til 0.0.2 på samme måte. I nyere versjoner er denne komponenten onnxruntime-motoren som brukes av filtypedetektoren. På Mac bygges den slik: for Python 3.12, macOS 11 og nyere; for 3.13, macOS 13; for 3.14, bare Apple Silicon med macOS 14 eller nyere. Hvis Macen din ikke oppfyller disse kravene, installerer selv den enkle kommandoen pip install markitdown 0.0.2. En test på en Intel-Mac med Python 3.14 gjennom Rosetta ga nøyaktig dette: «Successfully installed», ingen advarsler og 0.0.2 installert.

Intel-Macer har en annen komplikasjon. Siden juni 2026 har kryptografibiblioteket som hentes inn for lesing av PDF-filer, blitt utgitt uten en forhåndsbygd versjon for denne prosessoren, så installasjonsprogrammet prøver å bygge det fra kildekode. Legg til flagget --prefer-binary i kommandoen, så bruker det den forrige versjonen med en forhåndsbygd pakke. I testing på Python 3.13 for Intel installerte dette 0.1.8, og PDF-filen åpnet seg. Flagget installerer cryptography 48.0.1, som har tre kjente sårbarheter: i PKCS#7-dekryptering og verifisering av sertifikatkjeder. MarkItDown bruker det bare til å dekryptere krypterte PDF-filer, og dokumentlesing kommer ikke innom disse delene.

Med Python 3.15 skjer nedgraderingen av to grunner. Versjon 0.1.8 oppgir bare støtte fra 3.10 til 3.14, og det finnes ennå ingen motor for 3.15. Løsningen installasjonsprogrammet finner for 3.15, bekrefter dette: både den enkle kommandoen og kommandoen med formater installerer den samme 0.0.2.

En nedgraderingsadvarsel ser slik ut, én linje for hvert ekstratilvalg i kommandoen:

WARNING: markitdown 0.0.2 does not provide the extra 'all'

Linjen forsvinner blant dusinvis av nedlastingslinjer, og den sier ingenting om versjonen som settes inn i stedet. Med en enkel kommando uten ekstratilvalg kommer det ikke engang en advarsel. Sluttrapporten er munter: «Successfully installed.»

Det er heller ingen løsning å installere uten ekstratilvalg. Grunnpakken installeres, men den kan ikke åpne PDF-filer:

PdfConverter recognized the input as a potential .pdf file, but the
dependencies needed to read .pdf files have not been installed. To resolve
this error, include the optional dependency [pdf] or [all] when installing
MarkItDown. For example:

* pip install 'markitdown[pdf]'
* pip install 'markitdown[all]'

Selve verktøyet anbefaler [all], og med 0.1.8 fungerer det rådet igjen på Python 3.14 og 3.12. Likevel er det bedre å oppgi formatene ved navn: [all] legger til rundt femten pakker og omtrent 55 megabyte, inkludert et forhåndsutgitt Azure-bibliotek og nettopp YouTube-avhengighetskjeden som allerede har ødelagt installasjonen én gang.

Installasjonsprogrammet håndterer Azure-forhåndsutgivelsen selv. Vanligvis hopper pip over forhåndsutgivelser, men her navngir kravet uttrykkelig en forhåndsutgivelse, så den installeres. Fire pip-versjoner, fra 23.2 til 26.2, ble testet på Python 3.12; alle velger 0.1.8.

Advarsel

Kjør markitdown --version rett etter installasjonen. Det tar fem sekunder, og det er den eneste måten å vite at du installerte det du ba om. Meldingen om at installasjonen lyktes, betyr ingenting her.

I august ga reinstallasjon i et annet rent miljø samme resultat: 0.0.2 og ordet «Successfully».

Det er lurt å kjenne til noen praktiske detaljer på forhånd.

Det tar ganske stor plass: en grunninstallasjon tar 143 megabyte; med fire formater, 303. Den tyngste komponenten, på 81 megabyte, er filtypedetektoren, som trekkes inn selv ved grunninstallasjonen. Det betyr ikke noe for en bærbar datamaskin, men det gjør det for en skyfunksjon med en størrelsesgrense.

Ikke regn med speil som reserve. Et testet speil hadde en indeks, og MarkItDown-filene var til stede, men én nødvendig avhengighet manglet, så installasjonen mislyktes både på Python 3.14 og 3.12.

Installasjonen er et mindre problem enn hovedproblemet. Mye oftere produserer en AI tøv fordi feil ting, eller feil representasjon av den, kom inn i kontekstvinduet. Evnen til å avgjøre hva man skal gi en modell før en oppgave, kalles kontekstutforming, og dokumentklargjøring er en del av det.

Hvordan gjør du det første dokumentet ditt om til tekst?

Hovedpoeng

Én kommando i terminalen: programnavnet og filstien. Som standard skrives resultatet rett i vinduet, så du kan lagre det direkte til en fil. Det finnes tre metoder: utdata til konsollen, skrive med et flagg eller sende filen som en strøm. For å bygge det inn i dine egne skript finnes det en Python-innpakning på tre linjer, som også godtar URL-er.

Det korteste alternativet:

markitdown dogovor.docx

Teksten skrives ut i terminalen. Du kan lagre den til en fil på to måter:

markitdown dogovor.docx -o dogovor.md
markitdown dogovor.docx > dogovor.md

Forskjellen er ubetydelig på Mac og Linux, men den betyr noe på Windows: omdirigering med > kan få programmet til å krasje når utdataene inneholder kyrillisk tekst.

Du kan sende en fil som en strøm; da er utvidelseshintet nyttig:

cat dogovor.docx | markitdown -x docx

Her er de viktigste flaggene fra hjelpeteksten i 0.1.8:

FlaggHva det gjør
-o, --outputskriver resultatet til en fil i stedet for å skrive det ut i vinduet
-x, --extensionutvidelseshint når filen sendes som en strøm
-m, --mime-typehint om innholdstype
-c, --charsethint om tegnkoding
-d, --use-docintelbehandling gjennom Microsofts betalte skytjeneste
-v, --versionviser versjonen

Den samme hjelpeteksten viser tre nyttige flagg til, og alle er testet: --list-plugins viser installerte programtillegg, -p aktiverer dem for en bestemt kjøring, og --keep-data-uris beholder bilder som er innebygd i dokumentet i utdataene (de beskjæres som standard). Resten er innstillinger for Microsofts skytjenester.

Python-innpakningen tar tre linjer:

from markitdown import MarkItDown

md = MarkItDown()
print(md.convert("ostatki.xlsx").text_content)

Det samme kallet godtar en URL. En enkel side returnerte ryddig tekst på 167 tegn, inkludert en overskrift og en lenke, uten menyen og bunnteksten:

r = md.convert("https://example.com")

Hvilke formater forstår MarkItDown, og hva betyr det egentlig?

Hovedpoeng

Prosjektbeskrivelsen nevner et bredt utvalg: Office-filer, PDF-er, bilder, lyd, arkiver, YouTube-lenker og e-bøker. Tre ting fungerer ikke slik de høres ut. Gratisversjonen har ingen tekstgjenkjenning for bilder overhodet. Tale sendes til en engelskspråklig motor. Filer som ikke kunne tolkes, forsvinner fra arkiver uten varsel.

En oppsummeringstabell over det som loves, og hva det betyr i praksis.

FormatOppgittHva som faktisk skjer
Word, Excel, presentasjonerjafungerer ryddig; dette er styrken
CSV, JSON, XML, HTMLjafungerer, men CSV har en skilletegnfelle
PDFjaavhenger av oppsettet: én kolonne settes sammen, to kolonner faller fra hverandre
Bilder«metadata og gjenkjenning»ingen gjenkjenning, bare metadata eller en betalt synsmodell
Lyd«tale transkribering»sendes til Googles engelskspråklige motor
ZIP-arkiver«går gjennom innholdet»alt det ikke kan tolke, forsvinner i stillhet
YouTube-lenkerjabare fullstendige lenker av formen '<OFFICIAL_URL>'?...
EPUB-e-bøkerjafungerer

Tre ting i mer detalj.

Bilder. Beskrivelsen inneholder ordet OCR, så folk forventer at programmet kan lese tekst fra et foto. Det kan det ikke. Det leser metadata ved hjelp av et eget program, exiftool, og kan sende bildet til en synsmodell for beskrivelse hvis du kobler til en modell med din egen nøkkel.

Lyd. Tale transkriberes, men språket oppgis ikke, og motoren forventer engelsk som standard. Den bruker også Googles uoffisielle, gratis endepunkt, som er begrenset til rundt femti forespørsler om dagen per nøkkel.

Arkiver. Programmet pakker ut ZIP-filer og går gjennom filene inni, før resultatene settes sammen. Hvis det ikke kan tolke en fil, fanges feilen opp og undertrykkes. Filen vises rett og slett ikke i resultatet, og du får ikke vite om det.

Hva skjer med dokumenter som inneholder kyrillisk tekst?

Hovedpoeng

Tre filer med kyrillisk tekst – en Word-kontrakt, et Excel-lagerark og en presentasjon – ble kjørt gjennom den nyeste versjonen. Den kyrilliske teksten og tallet var intakte i alle tre. Ting svikter tre steder: CSV-filer som bruker semikolon, valutaformatering i Excel-celler og utdata i Windows-konsollen. Alle tre kan omgås.

Filene nedenfor ble laget spesielt for testing; dataene er oppdiktet.

Excel-lagerarket kom ut like ryddig, med arknavnet gjort om til en overskrift:

## Stock
| Item | In stock | Reserved | Available |
| --- | --- | --- | --- |
| Coffee beans, kg | 420 | 38 | 382 |
| Loose-leaf tea, kg | 180 | 52 | 128 |

Presentasjonen ble til tekst, med lysbildenumre vist som merknader og lysbildetitler gjort om til overskrifter. Den kyrilliske teksten er også intakt her. Den generelle påstanden om at «MarkItDown ikke forstår kyrillisk», er feil.

Nå til de tre stedene der ting faktisk svikter.

CSV med semikolon. To identiske fakturaeksporter ble kjørt for sammenligning. Den som brukte komma, ga en ordentlig tabell med fire kolonner. Med semikolon havner hele linjen i én celle.

Hele linjen havnet i én celle. Kodingen ble gjenkjent riktig, og det kom ingen feil; flagget -c hjelper ikke. Modellen får denne tabellen og forstår ikke hvilken verdi som er beløpet, og hvilken som er statusen. Eksporter filen på nytt med eksplisitt komma som skilletegn og riktig tegnkoding, og behold originalen uendret. Ikke erstatt semikolon globalt: Tegn inne i sitert tekst og desimalkomma kan være del av en verdi. Kan du ikke eksportere på nytt, leser du originalen med det faktiske skilletegnet og skriver en ny CSV med et CSV-verktøy som bevarer sitering og celleverdier. Sammenlign kolonneantall, radantall og kontrollsummer med kildeeksporten før analyse.

Valutaformatering i Excel. Valutasymbolet lagres i cellens visningsinnstillinger og kommer ikke med i selve verdien. Prosjektets vedlikeholdere har bekreftet årsaken. For en prisliste eller en faktura betyr dette noe: Modellen ser tall uten å vite hvilken valuta de representerer.

Windows-konsoll. Programmet kan krasje med filer som inneholder ikke-latinske tegn.

Feilsporet viser kodingen cp1251, altså Windows-konsollen. Selve dokumentet tolkes riktig; det er utskriften av resultatet i terminalvinduet som svikter. Det finnes derfor to løsninger:

markitdown dogovor.docx -o dogovor.md
$env:PYTHONUTF8 = "1"; markitdown dogovor.docx > dogovor.md

Den første omgår konsollen helt; den andre får Python til å skrive i UTF-8. Folk har sendt inn rettelser for problemet i selve verktøyet minst seks ganger: noen forslag ble lukket uten å bli slått sammen, mens resten fortsatt er åpne. Så du må omgå problemet.

Et fjerde symptom viser seg i PDF-filer: sekvenser som (cid:1090) i stedet for bokstaver. Det betyr at filen har en skrifttabell som ikke følger standarden, og at tegnene ikke kunne dekodes. Det er ingen vits i å behandle et slikt dokument med MarkItDown; du trenger et annet verktøy.

Hvorfor blir en PDF til et rot?

Hovedpoeng

En PDF inneholder ingen struktur, bare tegn med koordinater på siden. Tekst med én kolonne settes sammen ganske greit. To kolonner blir et rot: linjer kobles sammen på tvers av kolonnene, ord flyter sammen, og oppsettet blir til tabeller som aldri var i dokumentet. Verktøyet identifiserer ikke overskrifter i PDF-filer i det hele tatt – dette fremgår tydelig både av kildekoden og uavhengige målinger.

Til testing ble en vitenskapelig artikkel på 2.16 megabyte med to kolonner behandlet. Avslutningskoden var null; etter 0.9 sekunder inneholdt utdataene 88,000 tegn, nesten bare tøv. 88,000 tegn gir inntrykk av at alt fungerte. Helt til du åpner filen:

|     | Hybrid |          | OCR-LLM     |     | Framework  |
| --- | ------ | -------- | ----------- | --- | ---------- |
...
Informationextractionfromcopy-heavydoc-
5202 tcO 11  ]LC.sc[  1v83101.0152:viXra

Tre ting gikk galt samtidig. Oppsettet med to kolonner ble til tabeller som ikke finnes i artikkelen. Ord ble slått sammen uten mellomrom. Den siste linjen er en vertikal sidestolpe på siden, hentet ut baklengs.

Så kom den morsomme delen. Testartikkelen viste seg å være nettopp arbeidet som målte MarkItDown og sammenlignet det med andre verktøy. Verktøyet gjorde avsnittet som rapporterte dets egne målinger, om til dette:

cues. This name-matching error could be miti-  OCRpreprocessingoverhead(0.056s),whileDo-
gatedthroughpromptengineeringtoprovidemore  clingandMinerUadoptmorecomputationallyin-
explicit matching instructions or fine-tuning the  tensive strategies with OCR latencies of approxi-

Venstre og høyre kolonne er slått sammen linje for linje. En modell som får dette, vil lese halve setningen fra ett avsnitt og halve setningen fra et annet.

Årsaken er teknisk og enkel. Word lagrer uttrykkelig «dette er en overskrift» og «dette er en tabellcelle». En PDF lagrer «dette er et tegn» og «dette er koordinatene det har på siden». Å rekonstruere strukturen fra koordinater er en egen, vanskelig oppgave, og MarkItDown prøver knapt på det. Kildekoden for PDF-tolkingen inneholder ingen overskriftsgjenkjenning: hvis en side ikke gjenkjennes som et skjema eller en tabell, behandles hele dokumentet med enkel tekstanalyse.

Brukere rapporterer dette jevnlig i prosjektets repository, også for vitenskapelige artikler og tabeller.

Verktøyet finner ikke én eneste overskrift i PDF-filer, akkurat slik kildekoden viser.

Påstanden «MarkItDown oppnår 82 % nøyaktighet» sirkulerer på nettet uten noen metodebeskrivelse. Sporing tilbake til originalkilden fører ingen steder: lenkekjeden ender på en side som ikke lastes inn. Det kan ikke behandles som en måling.

Hva skjer med en skannet kontrakt?

Hovedpoeng

Ingenting. Filen behandles, programmet melder at det lyktes, og utdataene inneholder null tegn. Ingen feil, ingen advarsel. Dette ble testet to ganger på en PDF laget fra et bilde, og separat på selve bildet – resultatet var det samme. Verktøyet trekker ut tekst som allerede er lagret som tekst i filen; gratisversjonen har ingen gjenkjenningsfunksjon.

Denne oppførselen er farligere enn de andre fordi den ikke ser ut som en feil.

Til testing ble det laget en PDF fra et bilde med tekst – altså nøyaktig det du får når en kontrakt fotograferes eller skannes. Kjøringen ble gjentatt for å utelukke tilfeldigheter:

InndataAvslutningskodeTegn i utdataeneFeilmelding
PDF fra bilde, kjøring 100ingen
PDF fra bilde, kjøring 200ingen
PNG-bilde direkte01 (linjeskift)ingen

Null tegn og null feil, to ganger på rad. En avslutningskode på null betyr «alt gikk bra», og ethvert skript som kontrollerer om noe lyktes ved hjelp av avslutningskoden, vil regne dokumentet som behandlet. Deretter sendes de tomme utdataene til modellen, modellen ser ingenting og begynner å finne på et svar ut av løse luften.

Advarsel

Hvis du behandler dokumenter i grupper, må du kontrollere lengden på utdataene. Avslutningskoden forteller deg ingenting: en tom fil med avslutningskode null er det en skanning ser ut som.

Det finnes to løsninger, og begge koster penger. Den første er flagget -d, som sender dokumentet til Microsofts skytjeneste for gjenkjenning; hjelpeteksten for flagget sier uttrykkelig at et gyldig tjenesteendepunkt kreves. Den andre er en egen tilleggspakke som sender sider til en synsmodell med nøkkelen din, slik at du betaler modelltilbyderen for hver side. Siden april 2026 har en åpen diskusjon om den andre metoden meldt at bare den første siden av en skanning på flere sider behandles.

Du kan også kjøre en gjenkjenningsmodell på din egen maskin, men det er et eget prosjekt.

For et enkeltstående dokument er det enklere å åpne det og kopiere teksten manuelt. For en jevn strøm av skanninger trenger du et verktøy med innebygd gjenkjenning.

Kan du bare laste opp filen til en nettbasert konverterer?

Hovedpoeng

Teknisk sett, ja; det finnes mange domener med dette navnet. Men ingen av dem er tilknyttet Microsoft. Påstanden «filen forlater aldri nettleseren din» kan kontrolleres med ett klikk, og stemmer ikke alltid. Før du laster opp en kontrakt eller en eksport med folks navn, bør du selv se hvor filen sendes.

«MarkItDown på nett» er et av de vanligste søkeforslagene, og det finnes nettsteder som tilbyr det. Microsofts originalverktøy har ikke noe nettsted i det hele tatt; det finnes bare som et program du installerer selv. Alt med et lignende navn som åpnes i en nettleser, er laget av noen andre.

Du kan kontrollere en slik tjeneste på ett minutt: åpne utviklerverktøyene på fanen for nettverksforespørsler, last opp en ufarlig fil og se om den sendes til en server. Hvis den gjør det, er påstanden om behandling i nettleseren feil, uansett hvor overbevisende den presenteres i vanlige spørsmål.

Advarsel

En kontrakt, en faktura eller en eksport som inneholder ansattes navn, inneholder personopplysninger. Hvis du sender en slik fil til et tredjepartsnettsted, er det du som overfører den. Et lokalt verktøy unngår dette problemet: filen forlater ikke maskinen din.

Det er derfor MarkItDown verdsettes der dokumenter ikke kan sendes utenfor organisasjonen. I en diskusjon beskrev noen situasjonen sin: vilkårlige programmer var forbudt på jobb-PC-en, men Python-biblioteker var tillatt, og det lokale verktøyet viste seg å være det eneste tilgjengelige alternativet.

Hvor mye sparer MarkItDown egentlig?

Hovedpoeng

Den største fordelen er at modellen i det hele tatt kan forstå dokumentet. Det er også en forskjell i størrelse: sammenligning av størrelsen på oppmerkingen i Office-filer med størrelsen på den uttrukne teksten viser en reduksjon på fem til sju ganger. Den fjerner også alt modellen ikke trenger å lese: beskrivelser av skrifttyper, marger og cellefarger.

En Office-fil er strukturert som et arkiv med oppmerking. Hvis du pakker ut de tre testfilene og sammenligner størrelsen på delen som inneholder innholdet, med størrelsen på resultatet, får du dette:

FilOppmerking inniUttrukket tekstGanger mindre
Word-kontrakt3,701 byte711 byte5.2
Excel-regneark1,561 byte262 byte6.0
Presentasjon2,203 byte296 byte7.4

Filene er små; proporsjonene vil være annerledes for større filer, og det finnes ikke ett enkelt besparelsestall. Når runde tall dukker opp i sammenligningsartikler, bør du spørre etter metoden.

Utviklerne snakker også selv om besparelser: prosjektbeskrivelsen sier uttrykkelig at Markdown-konvensjoner er svært økonomiske med tanke på antall tegn. Det stemmer, men bør ikke være det viktigste salgsargumentet. Forskjellen mellom «modellen fikk tre tusen tegn i stedet for femten tusen» og «modellen fikk en tydelig struktur i stedet for et virvar» er av en helt annen størrelsesorden. Det første sparer penger; det andre avgjør om svaret gir mening.

Hvis du er bekymret for kontekstbruk, er det omtalt separat: Hvor tokenene går i Claude og hvor mange som er inkludert i hver plan.

Hvordan kobler du MarkItDown til Claude gjennom MCP?

Hovedpoeng

Prosjektet har en egen pakke som kjører en MCP-server med én kommando: oppgi en filsti, få tekst tilbake. I september 2026 ble pakken endelig oppdatert til 0.0.1a7, men bygget er fortsatt en forhåndsutgivelse og sender som standard telemetri til Microsoft. Kommandoen nedenfor kobler den til gjennom uv, låser versjonen, bruker Python 3.12 og deaktiverer telemetri. Det finnes ingen autentisering, og ifølge dokumentasjonen kan serveren lese alle filer som er tilgjengelige for brukeren som startet den.

MCP er en måte å gi en AI et eksternt verktøy som den kan bruke selv. Du finner en oversikt over mekanismen og andre servere i gjennomgangen av MCP-servere for Claude Code.

MarkItDown-serveren tilbyr nøyaktig ett verktøy: å konvertere et dokument til tekst. Den godtar en lokal filsti, en URL til en nettside eller data som er innebygd direkte i forespørselen.

Den kobles til Claude Code med én kommando, med serverversjonen låst. Du trenger pakkebehandleren uv:

claude mcp add --scope user --env 'ORT_DISABLE_TELEMETRY=1' --env 'UV_PYTHON=3.12' --transport stdio markitdown -- uvx markitdown-mcp@0.0.1a7
claude mcp list

Svaret på den andre kommandoen skal vise «Connected» for markitdown. Den første oppstarten laster ned rundt sytti pakker og tar opptil ett minutt; etter det starter serveren på ett til halvannet sekund.

Her er forbeholdene, alle kontrollert manuelt.

Bygg 0.0.1a7 ble utgitt 14. september 2026. Før det hadde serveren stått fast på 0.0.1a4 fra mai 2025 i over ett år. Det nyeste versjonsnummeret betegner fortsatt en forhåndsutgivelse.

Den installeres ikke på alle systemer med en nyere versjon av Python. onnxruntime-motoren den er avhengig av, finnes for Python 3.14 på Mac bare for Apple Silicon med macOS 14 eller nyere, så installasjonen mislykkes på Intel-Macer og på macOS 13 eller eldre med Python 3.14. På en Apple Silicon-Mac ble serveren kjørt med Python 3.14, 3.13 og 3.12, og installert med alle tre. Kommandoen bruker UV_PYTHON=3.12: forhåndsbygde pakker for 3.12 finnes for Windows, Linux og Apple Silicon-Macer, og hvis du ikke har den Python-versjonen, laster uv den ned. Her er det også et forbehold for Intel-Macer: uv bygger kryptografibiblioteket fra kildekode fordi det ikke har eksistert noen forhåndsbygd pakke for Intel siden juni 2026. Installasjonen tar lengre tid og kan mislykkes.

Versjonen av MarkItDown som installeres inni, avhenger av uv-versjonen. Fra og med MarkItDown 0.1.6 krever ekstratilvalget [all] et forhåndsutgitt Azure-bibliotek: uv 0.12 og nyere installerer det og den nyeste MarkItDown 0.1.8, mens eldre uv-versjoner nedgraderer til 0.1.5. Kontroller uv-versjonen med uv --version.

To ting sendes ut av maskinen. Det første er telemetri: på Mac og Linux sender onnxruntime-motoren inne i serveren den som standard til Microsoft. Variabelen ORT_DISABLE_TELEMETRY=1 i kommandoen deaktiverer den. I testen koblet serveren seg til Microsofts telemetriendepunkter uten den. Med variabelen satt, var det ingen forbindelser i det hele tatt mens filer ble behandlet fra disk.

Det andre er lyd. Serveren sender WAV-, MP3-, M4A- og MP4-filer til Googles talegjenkjenningstjeneste for transkribering over vanlig HTTP, uten kryptering. Det er bedre å ikke sende opptak av samtaler med kunder gjennom den.

Et stort dokument får ikke plass gjennom den. En åpen diskusjon beskriver et serversvar på 51,000 tokener som traff en grense på 25,000 tokener, og verktøyet deler ikke filer opp i deler.

Og sikkerhet. Pakkens egen dokumentasjon sier det rett ut:

Serveren støtter ikke autentisering og kjører med rettighetene til brukeren som startet den. Konverteringsverktøyet kan brukes til å lese enhver fil som er tilgjengelig for serverbrukeren, eller alle data på nettverket.

— Microsoft, beskrivelse av markitdown-mcp-pakken (oversatt), https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp

Med andre ord kan en agent med dette verktøyet lese alt du kan lese. Det er greit ved arbeid på din egen maskin. Du må ikke eksponere serveren offentlig eller gi den til en agent du ikke stoler på.

Advarsel

Prosjektets dokumentasjon inneholder ikke et eget oppsett for Claude Code – den beskriver bare Claude Desktop og oppstart gjennom en container. Hvis du finner et ferdig oppsett på nettet som omtales som «fra den offisielle dokumentasjonen» for Claude Code, bør du vite at det ikke finnes noe slikt oppsett i repositoriet.

Til vanlig arbeid er det enklere å kjøre programmet med en kommando og legge den resulterende teksten i prosjektet. Filen ligger da sammen med de andre materialene, der modellen kan bruke den på egen hånd.

Når er det mer ærlig å bruke et annet verktøy?

Hovedpoeng

Regelen er enkel: Hvis strukturen allerede er registrert i filen, bruker du MarkItDown – det er raskest og gratis. Hvis strukturen må rekonstrueres fra et bilde av siden, bruker du et verktøy med oppsettmodeller. Docling håndterer tabeller og kompliserte oppsett, MinerU håndterer formler og flere kolonner, og betalte skytjenester hjelper når det ikke er tid til å knote med det.

En oppgavebasert sammenligning; GitHub-stjerner har ingenting med saken å gjøre:

VerktøyStyrkeHva du betaler med
MarkItDownOffice-filer, hastighet, gratiskan ikke håndtere kompliserte PDF-filer eller skanninger
Doclingtabeller og oppsett gjennom spesialiserte modellertitalls sekunder per dokument
MinerUflere kolonner, formler, tette tabellervanskeligere å installere
Markerhøy nøyaktighet, formler, illustrasjonerkrever et grafikkort, og lisensen begrenser inntekter
unstructuredreturnerer dokumentstrukturen i deler med beskrivelserutdataene er vanskeligere å bruke
Skytolkerkrever ikke oppsettpenger og sending av dokumentet ut av maskinen din

Det er en detalj om Marker som sammenligningsartikler utelater. Siden juli 2026 har selve koden hatt en tillatende lisens, mens modellvektene er underlagt en egen lisens med en grense: bruken er gratis hvis selskapet ditt ikke oversteg fem millioner dollar i inntekter og samme beløp i innhentet finansiering året før. En egen klausul forbyr bruk for alle som bygger et konkurrerende produkt. Dette betyr ikke noe for de fleste lesere, men er en grunn til at en voksende bedrift bør lese lisensen før den tar verktøyet i bruk.

Det gir en praktisk arbeidsflyt i fire trinn:

  1. Kjør alt gjennom MarkItDown – det er gratis og umiddelbart.
  2. Åpne resultatet og kontroller størrelsen.
  3. Hvis teksten gir mening, er oppgaven ferdig; du trenger ikke noe mer.
  4. Hvis utdataene er et rot eller tomme, kjører du den bestemte filen gjennom et tyngre verktøy.

Slik betaler du bare tids- og kompleksitetskostnaden for dokumentene som trenger det.

Hvordan gjør du MarkItDown til en del av arbeidsflyten din?

Hovedpoeng

Anthropic selv oppgir regelen i beskrivelsene av ferdighetene sine: bruk dette verktøyet til å lese et dokument. Ikke planlegg redigeringer basert på det. Her er tre situasjoner der det lønner seg fra første kjøring: å tolke en gruppe lignende dokumenter, legge til faste referansematerialer i et AI-prosjekt én gang og klargjøre en eksport fra et regnskapssystem for analyse.

Anthropic bruker selv MarkItDown i sine ferdige ferdigheter for arbeid med Office-filer, og disse ferdighetene beskriver grensen du bør følge i sin helhet:

Undersøk raskt et ark: markitdown file.xlsx. Cellekoordinater er ikke tilgjengelige, så ikke planlegg redigeringer basert på dette.

— Anthropic, beskrivelse av ferdigheten for arbeid med tabeller (oversatt), https://github.com/anthropics/skills/blob/main/skills/xlsx/SKILL.md

Celle- og sidehenvisninger går tapt i teksten, så du kan ikke bruke den til å gjøre endringer i kildefilen. Her er tre situasjoner.

En gruppe lignende dokumenter – attester, fakturaer, skjemaer, søknader. Legg dem i en mappe og kjør dem med én linje:

for f in dokumenty/*.docx; do markitdown "$f" -o "text/$(basename "$f" .docx).md"; done

Gi deretter modellen mappen med tekstfiler, og be den samle den relevante informasjonen i en tabell. Dette fungerer med digitale filer; skanninger vil mislykkes, og du oppdager dem straks på grunn av størrelsen null.

Faste prosjektmaterialer – prislister, kontraktsmaler, retningslinjer, tjenestebeskrivelser. Konverter dem til tekst én gang og legg dem ved siden av prosjektet. Da kan modellen lese dem for hver forespørsel, slik at du ikke trenger å legge ved filene i samtalen hver gang. Artikkelen om opplasting av filer til Claude forklarer forskjellen mellom dette og å laste opp en fil i chatten.

En eksport fra et regnskapssystem. En Excel-eksport fra regnskapsprogramvare eller en bankkonto blir til en tabell på en tredjedels sekund, og modellen kan regne på den uten noe ekstra mellomarbeid. Kontroller at CSV-en eksporteres eller leses med sitt faktiske skilletegn, sitering og tegnkoding. Sammenlign rader, kolonner og kontrollsummer før modellen får filen. Ikke normaliser skilletegn med søk og erstatt. Registrer valutaen uttrykkelig; et symbol som bare finnes i Excel-cellens formatering, overlever ikke tekstuttrekket.

Behandling av store PDF-filer i terminalen står ikke på denne listen. Det er et eget spørsmål som gjelder kontekstbruk, omtalt i artikkelen om PDF-filer i Claude Code uten å miste tokener. Hvis du nettopp setter opp arbeidsområdet ditt, begynner du med å installere Claude Code.

For å komme i gang med en gang kan du kjøre pip install 'markitdown[pdf,docx,xlsx,pptx]', behandle den første Word-kontrakten du finner og kontrollere størrelsen på resultatet. På et halvt minutt vet du om det fungerer med filene dine.

Ofte stilte spørsmål

Er MarkItDown gratis?

Ja. Det har en MIT-lisens uten begrensninger på kommersiell bruk. Du betaler bare for to valgfrie metoder: skybasert gjenkjenning fra Microsoft gjennom flagget -d, og bildebeskrivelser fra en synsmodell med din egen nøkkel. Alt annet kjører gratis på maskinen din.

Sendes data til en server?

Ved vanlig konvertering av Office-filer og PDF-filer, nei – alt behandles lokalt. Det finnes tre unntak: lydtranskribering går gjennom Googles tjeneste, flagget -d sender dokumentet til Microsofts sky, og bildebeskrivelser går til en modell ved hjelp av nøkkelen din. Ingen av disse metodene er aktivert automatisk.

Hvorfor finner jeg ikke kommandoen markitdown etter installasjonen?

Som oftest ble programmet installert i et miljø som ikke ligger i søkestien din. Kontroller hele stien til filen i miljøet. Et annet vanlig tilfelle er at du installerte programmet for én Python-versjon, men kaller det med en annen. En felle til: På Python-versjoner under 3.10 installeres en tom pakke uten installasjonsfeil.

Hva skal jeg gjøre hvis jeg ser (cid:1090) og lignende strenger i stedet for bokstaver?

Dette er en dekodet skrifttabell inne i PDF-filen. Innstillinger løser det ikke; du må kjøre filen gjennom et annet verktøy, som Docling eller MinerU. For et enkeltstående dokument går det raskere å kopiere teksten manuelt fra et visningsprogram.

Kan jeg behandle en hel mappe med filer på én gang?

Det finnes ingen egen mappemodus, men du kan gjøre det med en énløkkes terminalsløyfe: for f in papka/*.docx; do markitdown "$f" -o "$f.md"; done. Et annet alternativ er å legge alt i en ZIP-fil og oppgi arkivet: programmet behandler innholdet, men filer det ikke kan tolke, forsvinner uten varsel.

Hvordan skiller utdataene seg fra å kopiere teksten for hånd?

Strukturen bevares. Kopiering gir deg flat tekst der en overskrift ikke kan skilles fra et avsnitt, og en tabell faller fra hverandre. MarkItDown bevarer overskrifter, lister og tabeller, slik at modellen kan se hva som er hva. Forskjellen er liten for ett kort dokument, men avgjørende for tjue.

Kan MarkItDown åpne passordbeskyttede dokumenter?

Nei. En passordbeskyttet fil kan ikke åpnes, og du kan ikke sende passordet til programmet. Du må fjerne beskyttelsen på forhånd i programmet som la den på.

Når du er klar, møt Ailoot.

Flere detaljer

Spørsmål om denne veiledningen: Slik gjør du PDF- og Word-filer om til tekst for AI: Microsofts MarkItDown

Kan jeg rette en CSV med semikolon ved å erstatte hvert semikolon med komma?

Nei. Sitert tekst og desimalformater kan inneholde disse tegnene. Eksporter på nytt med ønsket skilletegn, eller bruk en CSV-leser og -skriver med eksplisitt skilletegn, koding og sitering. Kontroller kolonner, rader og kontrollsummer mot originalen.

Betyr avslutningskode null at en PDF ble nyttig konvertert?

Nei. Skanningseksemplet i artikkelen ga tomme utdata uten feil, og en kompleks PDF ga uleselig tekst. Åpne resultatet, kontroller lengde og struktur, og bruk et layout- eller gjenkjenningsverktøy hvis teksten er tom eller ødelagt.

Alle artikler