Come convertire file PDF e Word in testo per l’IA: MarkItDown di Microsoft
MarkdownRecensione approfondita: come convertire file PDF e Word in testo per l’IA: MarkItDown di Microsoft.
Leggi l’articolo completo
Punti chiave
MarkItDown è un'utilità gratuita di Microsoft che trasforma documenti Word, fogli Excel, presentazioni e PDF in testo strutturato per l'IA. Analizza i file Office in modo pulito in una frazione di secondo. Trasforma i PDF con layout complessi in un pasticcio e restituisce un file vuoto con codice di uscita zero quando riceve una scansione. Di seguito trovi un comando d'installazione funzionante, misurazioni su documenti contenenti testo cirillico e una regola per capire quando usare un altro strumento.
Altre istruzioni sono disponibili nella documentazione di Ailoot.
Che cos'è MarkItDown e a cosa serve?
Punti chiave
MarkItDown è un'utilità Python di Microsoft che legge un file e ne restituisce il contenuto come testo strutturato. I titoli diventano titoli e le tabelle diventano tabelle. Si trova in un repository GitHub aperto con licenza MIT, si installa con un solo comando ed esegue tutta l'elaborazione sulla tua macchina. Ha un solo compito: preparare un documento affinché un'IA possa vedere non solo le parole, ma anche la struttura.
Invii a un'IA un contratto, un rapporto o un'esportazione contabile e ottieni una risposta che non ha nulla a che fare con il documento. Di solito la causa non è il modello. Il file contiene un formato: Word è un archivio con markup, Excel è un foglio di calcolo con collegamenti tra le celle e PDF è un insieme di caratteri con coordinate sulla pagina. Il modello lavora con il testo e qualcuno deve estrarlo.
È questo che fa MarkItDown. Il repository si trova su github.com/microsoft/markitdown, con licenza MIT, quindi puoi usarlo senza restrizioni. Al 18 agosto 2026, ha 174,412 stelle e 12,756 fork; l'ultima release, 0.1.7, è uscita il 29 luglio. Il progetto è attivo, anche se il suo orientamento è passato dallo sviluppo alla manutenzione: ha 481 pull request aperte, contro 183 unite nell'intera storia del progetto.
Gli sviluppatori ne descrivono così lo scopo:
MarkItDown è un'utilità Python leggera per convertire file di vari formati in Markdown da usare con i modelli linguistici di grandi dimensioni e le pipeline correlate di analisi del testo.
La frase successiva della descrizione spiega metà delle lamentele che si sentono sullo strumento:
Anche se spesso il risultato è abbastanza curato e facile da leggere per le persone, è pensato per essere usato da strumenti di analisi del testo e potrebbe non essere la scelta migliore per convertire fedelmente documenti destinati alla lettura umana.
Il risultato è materiale grezzo per un modello. Non sarà un documento bello da vedere, e il progetto lo dice chiaramente fin dalla prima sezione.
La descrizione spiega direttamente perché viene usato Markdown: i modelli più avanzati «parlano» già questo markup e lo includono nelle risposte senza che venga richiesto, perché ne hanno visti enormi volumi durante l'addestramento. Il markup è anche compatto: tre cancelleti per un titolo invece di una dozzina di righe di metadati.
In cosa MarkItDown è diverso da un convertitore normale?
Punti chiave
Convertitori come pandoc traducono un linguaggio di markup in un altro e preservano il layout per le persone. pandoc non accetta affatto PDF come input. MarkItDown risolve il problema opposto: estrae il contenuto da un file Office e lo organizza in modo che un modello possa capirlo subito senza sprecare token. Preservare il layout visivo non è il suo obiettivo, ed è tutta qui la differenza.
La differenza si vede chiaramente in un esempio. Prendi una cartella con venti PDF e prova a elaborarli con pandoc. Non funzionerà: pandoc può produrre PDF come output, ma non può leggerli come input. Ed è proprio questa la situazione più comune: «Ho una pila di documenti; passali al modello».
Gli autori di MarkItDown lo confrontano con textract, una libreria che estrae semplicemente il testo da qualsiasi fonte. La differenza è che MarkItDown cerca di preservare la struttura: titoli, elenchi, tabelle e collegamenti.
| Funzionalità | pandoc | MarkItDown |
|---|---|---|
| Legge PDF | no | sì, con riserve |
| Legge Word, Excel, presentazioni | parzialmente | sì |
| Destinatari dell'output | persone | modelli |
| Valore principale | fedeltà del layout | struttura e numero ridotto di caratteri |
| Installazione | programma autonomo | un comando Python |
La conclusione pratica è semplice. Se devi convertire un articolo in un layout da pubblicare, usa pandoc. Se vuoi che un'IA comprenda venti contratti, usa MarkItDown.
Come si installa MarkItDown evitando che venga installata la prima release?
Punti chiave
Con la release 0.1.8, il comando riportato nella descrizione del progetto installa la versione più recente su Python 3.14 e 3.12; questo è stato ricontrollato in otto ambienti puliti. Su Python 3.15, sui Mac Intel con 3.14 e sui Mac con versioni meno recenti di macOS che usano 3.13 e 3.14, si verifica ancora un downgrade silenzioso a 0.0.2, la seconda release nella storia del progetto. In questi casi, il programma d'installazione segnala che tutto è riuscito. Perciò usa Python 3.12, specifica per nome i formati che ti servono e controlla subito il numero di versione.
Prima il comando giusto; poi, perché è quello giusto.
Controlla la versione di Python
Python 3.12 è la scelta più affidabile: in ogni ambiente testato su questa versione si installa la release più recente di MarkItDown. Il comando
python3 --versionmostra la versione disponibile. Sui Mac Intel o sui Mac con una versione meno recente di macOS, Python 3.13 e 3.14 possono provocare un downgrade silenzioso; Python 3.15 non è ancora supportato, come spiegato più avanti.Installa specificando i formati
Esegui
pip install 'markitdown[pdf,docx,xlsx,pptx]'. Le virgolette sono necessarie, altrimenti la shell interpreterà le parentesi quadre. Su un Mac Intel, aggiungi il flag--prefer-binarydopoinstall.Controlla subito che l'installazione sia riuscita
Esegui
markitdown --version. La risposta dovrebbe esseremarkitdown 0.1.8o successiva. Un numero inferiore indica che l'installazione ha eseguito un downgrade; in questa sezione viene spiegato il motivo.
pip install 'markitdown[pdf,docx,xlsx,pptx]'
markitdown --version
La descrizione del progetto indica pip install 'markitdown[all]' come comando principale, per installare tutto in una volta. Il 28 settembre 2026, una settimana dopo l'uscita della versione 0.1.8, sono state eseguite quattro varianti in ambienti puliti su un Mac con Apple Silicon e Python 3.14.6 e 3.12.12:
| Comando | Installato su Python 3.14 | Installato su Python 3.12 |
|---|---|---|
pip install markitdown | 0.1.8 | 0.1.8 |
pip install 'markitdown[pdf,docx,xlsx,pptx]' | 0.1.8 | 0.1.8 |
pip install 'markitdown[all]' | 0.1.8 | 0.1.8 |
pip install 'markitdown[all]==0.1.8' | 0.1.8 | 0.1.8 |
Tutte e otto le installazioni si sono concluse con «Successfully installed» e markitdown --version ha restituito 0.1.8 in ogni caso. Ad agosto, quando la release più recente era la 0.1.7, il terzo comando su Python 3.14 installava la 0.0.2, pubblicata l'8 marzo 2025, la seconda release nella storia del progetto. Ora ci sono undici release stabili, dalla 0.0.1 alla 0.1.8, e ventisei incluse le pre-release.
La causa era la catena di dipendenze. Nella versione 0.1.7, l'extra [all] include una libreria per i sottotitoli di YouTube appartenente a una specifica serie di release, tutte dichiarate incompatibili con Python 3.14. Il programma d'installazione le rifiuta e, poiché nessuna versione è bloccata, risale tra le versioni di MarkItDown finché non ne trova una installabile. Trova la 0.0.2 e la installa, mettendo sulla tua macchina una release vecchia di un anno e mezzo. Nella versione 0.1.8, il requisito della libreria per i sottotitoli è stato portato a una serie compatibile con la 3.14 e il downgrade si è fermato.
Il meccanismo è ancora presente. Se il programma d'installazione non riesce a trovare uno dei componenti richiesti per il tuo sistema, torna silenziosamente alla 0.0.2 nello stesso modo. Nelle versioni recenti, il componente in questione è il motore onnxruntime usato dal rilevatore di tipo di file. Su Mac, viene compilato così: per Python 3.12, macOS 11 e successivi; per la 3.13, macOS 13; per la 3.14, solo Apple Silicon con macOS 14 o successivo. Se il tuo Mac non soddisfa questi requisiti, anche il comando essenziale pip install markitdown installa la 0.0.2. Un test su un Mac Intel con Python 3.14 tramite Rosetta ha prodotto esattamente questo risultato: «Successfully installed», nessun avviso e la versione 0.0.2 installata.
I Mac Intel hanno un'altra complicazione. Da giugno 2026, la libreria cryptography richiesta per leggere i PDF viene rilasciata senza una versione precompilata per questo processore, quindi il programma d'installazione cerca di compilarla dai sorgenti. Aggiungi al comando il flag --prefer-binary e verrà usata la versione precedente con un pacchetto precompilato. Nei test con Python 3.13 su Intel, così è stata installata la versione 0.1.8 e il PDF si è aperto. Il flag installa cryptography 48.0.1, che presenta tre vulnerabilità note: nella decifratura PKCS#7 e nella verifica della catena di certificati. MarkItDown la usa solo per decifrare PDF protetti e la lettura dei documenti non raggiunge quelle parti.
Con Python 3.15, il downgrade si verifica per due motivi. La versione 0.1.8 dichiara il supporto solo dalla 3.10 alla 3.14 e non esiste ancora un motore per la 3.15. La risoluzione delle dipendenze del programma d'installazione per la 3.15 lo conferma: sia il comando essenziale sia quello con i formati installano la stessa versione 0.0.2.
Un avviso di downgrade si presenta così, una riga per ogni extra specificato nel comando:
WARNING: markitdown 0.0.2 does not provide the extra 'all'
La riga si perde tra decine di righe di download e non dice nulla sulla versione sostitutiva. Con un comando essenziale senza extra, non compare nemmeno un avviso. Il rapporto finale è rassicurante: «Successfully installed».
Installare senza extra non è una soluzione. Il pacchetto essenziale si installa, ma non può aprire i PDF:
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]'
È lo stesso strumento a consigliare [all] e, con la versione 0.1.8, quel consiglio funziona di nuovo su Python 3.14 e 3.12. È comunque meglio specificare i formati per nome: [all] aggiunge una quindicina di pacchetti e circa 55 megabyte, compresa una libreria Azure in pre-release e proprio la catena di dipendenze YouTube che aveva già interrotto l'installazione una volta.
Il programma d'installazione gestisce da solo la pre-release di Azure. Normalmente pip ignora le pre-release, ma in questo caso il requisito indica esplicitamente una pre-release, quindi la installa. Sono state testate quattro versioni di pip, dalla 23.2 alla 26.2, su Python 3.12; tutte selezionano la versione 0.1.8.
Attenzione
Subito dopo l'installazione, esegui markitdown --version. Ci vogliono cinque secondi ed è l'unico modo per sapere se hai installato ciò che avevi richiesto. In questo caso, il messaggio di successo non significa nulla.
Ad agosto, reinstallando in un altro ambiente pulito, si è ottenuto lo stesso risultato: 0.0.2 e la parola «Successfully».
È utile conoscere in anticipo alcuni dettagli pratici.
È piuttosto pesante: un'installazione essenziale occupa 143 megabyte; con quattro formati, 303. Il componente più pesante, 81 megabyte, è il rilevatore di tipo di file, incluso persino nell'installazione di base. Su un laptop non è un problema, ma lo è per una funzione cloud soggetta a un limite di dimensione.
Non contare sui mirror come soluzione di riserva. Un mirror testato forniva un indice e conteneva i file di MarkItDown, ma mancava una dipendenza richiesta, quindi l'installazione non è riuscita né con Python 3.14 né con 3.12.
L'installazione è un problema secondario rispetto a quello principale. Molto più spesso, un'IA produce risultati senza senso perché nel suo contesto entra la cosa sbagliata, o una rappresentazione sbagliata. La capacità di decidere cosa fornire a un modello prima di assegnargli un compito si chiama context engineering, e la preparazione dei documenti ne fa parte.
Come si converte il primo documento in testo?
Punti chiave
Basta un comando nel terminale: il nome del programma e il percorso del file. Per impostazione predefinita, il risultato viene stampato direttamente nella finestra, quindi puoi salvarlo subito in un file. Ci sono tre metodi: inviare il risultato alla console, scriverlo con un flag oppure passare il file come flusso. Per integrarlo nei tuoi script, c'è un wrapper Python di tre righe, che accetta anche URL.
L'opzione più breve:
markitdown dogovor.docx
Il testo viene stampato nel terminale. Per salvarlo in un file, ci sono due modi:
markitdown dogovor.docx -o dogovor.md
markitdown dogovor.docx > dogovor.md
Su Mac e Linux la differenza è trascurabile, ma su Windows è importante: la redirezione con > può mandare in crash il programma quando l'output contiene testo cirillico.
Puoi passare un file come flusso; in quel caso è utile specificare l'estensione:
cat dogovor.docx | markitdown -x docx
Ecco i flag principali dell'help della versione 0.1.8:
| Flag | Funzione |
|---|---|
-o, --output | scrive il risultato in un file invece di stamparlo nella finestra |
-x, --extension | suggerisce l'estensione quando il file viene passato come flusso |
-m, --mime-type | suggerisce il tipo di contenuto |
-c, --charset | suggerisce la codifica dei caratteri |
-d, --use-docintel | elabora il file tramite il servizio cloud a pagamento di Microsoft |
-v, --version | mostra la versione |
Lo stesso help elenca altri tre flag utili, ciascuno testato: --list-plugins mostra i plugin installati, -p li abilita per una determinata esecuzione e --keep-data-uris mantiene nell'output le immagini incorporate nel documento, che per impostazione predefinita vengono ritagliate. Gli altri flag configurano i servizi cloud di Microsoft.
Il wrapper Python richiede tre righe:
from markitdown import MarkItDown
md = MarkItDown()
print(md.convert("ostatki.xlsx").text_content)
La stessa chiamata accetta un URL. Una pagina semplice ha restituito testo pulito di 167 caratteri, incluso un titolo e un collegamento, senza il menu e il piè di pagina:
r = md.convert("https://example.com")
Quali formati riconosce MarkItDown e cosa significa davvero?
Punti chiave
La descrizione del progetto elenca un'ampia gamma di formati: file Office, PDF, immagini, audio, archivi, link YouTube ed ebook. Tre elementi non funzionano come ci si potrebbe aspettare. La versione gratuita non riconosce affatto il testo nelle immagini. L'audio viene inviato a un motore in lingua inglese. I file che non possono essere analizzati scompaiono dagli archivi senza avviso.
Una tabella riassume ciò che viene dichiarato e cosa succede in pratica.
| Formato | Dichiarato | Cosa succede davvero |
|---|---|---|
| Word, Excel, presentazioni | sì | funziona bene; è il suo punto di forza |
| CSV, JSON, XML, HTML | sì | funziona, ma CSV presenta un problema con i delimitatori |
| sì | dipende dal layout: una colonna viene ricomposta, due colonne vanno in pezzi | |
| Immagini | «metadati e riconoscimento» | nessun riconoscimento, solo metadati o un modello di visione a pagamento |
| Audio | «trascrizione del parlato» | viene inviato al motore in lingua inglese di Google |
| Archivi ZIP | «esamina il contenuto» | tutto ciò che non riesce ad analizzare scompare senza avviso |
| Link YouTube | sì | solo link completi del tipo '<OFFICIAL_URL>'?... |
| Ebook EPUB | sì | funziona |
Tre elementi più nel dettaglio.
Immagini. La descrizione include la parola OCR, quindi ci si aspetta che il programma legga il testo in una foto. Non lo fa. Legge i metadati con un programma separato, exiftool e, se colleghi un modello di visione con una tua chiave, può inviargli l'immagine per farla descrivere.
Audio. La trascrizione del parlato è disponibile, ma la lingua non viene specificata e per impostazione predefinita il motore si aspetta l'inglese. Inoltre, viene contattato l'endpoint gratuito non ufficiale di Google, limitato a circa cinquanta richieste al giorno per chiave.
Archivi. Il programma decomprime i file ZIP ed esamina quelli al loro interno, concatenando i risultati. Se non riesce ad analizzare un file, l'errore viene intercettato e ignorato. Il file semplicemente non compare nel risultato e tu non lo saprai.
Cosa succede con i documenti che contengono testo cirillico?
Punti chiave
Sono stati elaborati con la versione più recente tre file contenenti testo cirillico: un contratto Word, un foglio Excel con l'inventario e una presentazione. Il testo cirillico e il numero sono rimasti intatti in tutti e tre. Ci sono problemi in tre casi: file CSV che usano il punto e virgola, formattazione della valuta nelle celle Excel e output della console di Windows. Per tutti e tre esistono soluzioni alternative.
I file seguenti sono stati creati appositamente per il test; i loro dati sono inventati.
Il foglio Excel con l'inventario è stato convertito altrettanto bene, con il nome del foglio trasformato in un titolo:
## Stock
| Item | In stock | Reserved | Available |
| --- | --- | --- | --- |
| Coffee beans, kg | 420 | 38 | 382 |
| Loose-leaf tea, kg | 180 | 52 | 128 |
La presentazione è diventata testo, con i numeri delle diapositive riportati come annotazioni e i titoli delle diapositive trasformati in titoli. Anche qui il testo cirillico è intatto. L'affermazione generica «MarkItDown non capisce il cirillico» è falsa.
Vediamo ora i tre casi in cui qualcosa si rompe.
CSV con punto e virgola. Per fare un confronto, sono stati elaborati due export identici di fatture. Quello con le virgole ha prodotto una tabella corretta a quattro colonne. Con il punto e virgola, l'intera riga finisce in una sola cella.
L'intera riga è finita in una sola cella. La codifica è stata riconosciuta correttamente e non si è verificato alcun errore; il flag -c non aiuta. Il modello riceverà questa tabella e non capirà quale valore sia l'importo e quale lo stato. Esporta di nuovo il file specificando la virgola come delimitatore e la codifica corretta, conservando l’originale invariato. Non sostituire globalmente i punti e virgola: separatori nel testo tra virgolette e virgole decimali possono appartenere ai valori. Se non puoi riesportare, leggi l’originale con il suo delimitatore effettivo e scrivi un nuovo CSV con uno strumento che conservi virgolette e valori delle celle. Prima dell’analisi confronta numero di colonne, righe e totali di controllo con l’esportazione di origine.
Formattazione della valuta in Excel. Il simbolo di valuta è memorizzato nelle impostazioni di visualizzazione della cella e non fa parte del valore. I responsabili del progetto hanno confermato la causa. Per un listino prezzi o una fattura, questo è importante: il modello vedrà i numeri senza sapere a quale valuta si riferiscono.
Console di Windows. Con file che contengono caratteri non latini, il programma può andare in crash.
La traccia dell'errore mostra la codifica cp1251, cioè la console di Windows. Il documento viene analizzato correttamente; è la stampa del risultato nella finestra del terminale a non funzionare. Ecco quindi due soluzioni alternative:
markitdown dogovor.docx -o dogovor.md
$env:PYTHONUTF8 = "1"; markitdown dogovor.docx > dogovor.md
La prima evita del tutto la console; la seconda fa scrivere Python in UTF-8. Sono state proposte correzioni al problema nello strumento stesso almeno sei volte: alcune proposte sono state chiuse senza essere unite, mentre le altre sono ancora aperte. Quindi bisogna ricorrere a una soluzione alternativa.
Un quarto sintomo compare nei PDF: sequenze come (cid:1090) al posto delle lettere. Significa che il file usa una tabella dei font non standard e i caratteri non sono stati decodificati. Non ha senso elaborare un documento del genere con MarkItDown: serve un altro strumento.
Perché il risultato di un PDF è un pasticcio?
Punti chiave
Un PDF non contiene una struttura, solo caratteri con coordinate sulla pagina. Il testo a colonna singola viene ricomposto abbastanza bene. Due colonne diventano un pasticcio: le righe vengono unite tra le colonne, le parole si fondono e il layout si trasforma in tabelle che non erano presenti nel documento. Lo strumento non individua affatto i titoli nei PDF, come mostrano chiaramente sia il codice sorgente sia le misurazioni indipendenti.
Per il test, è stato elaborato un articolo scientifico a due colonne di 2.16 megabyte. Il codice di uscita era zero; dopo 0.9 secondi, l'output conteneva 88,000 caratteri, quasi tutti senza senso. Ottantottomila caratteri danno l'impressione che tutto abbia funzionato. Almeno finché non apri il file:
| | Hybrid | | OCR-LLM | | Framework |
| --- | ------ | -------- | ----------- | --- | ---------- |
...
Informationextractionfromcopy-heavydoc-
5202 tcO 11 ]LC.sc[ 1v83101.0152:viXra
Sono andate storte tre cose contemporaneamente. Il layout a due colonne è diventato un insieme di tabelle che non esistono nell'articolo. Le parole si sono unite senza spazi. L'ultima riga è una barra laterale verticale della pagina, estratta al contrario.
Poi è arrivata la parte divertente. L'articolo usato per il test si è rivelato essere proprio il lavoro che misurava MarkItDown e lo confrontava con altri strumenti. Lo strumento ha trasformato così il paragrafo che riportava le sue stesse misurazioni:
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-
Le colonne sinistra e destra vengono unite riga per riga. Un modello che ricevesse questo testo leggerebbe metà frase di un paragrafo e metà di un altro.
La causa è tecnica e semplice. Word memorizza esplicitamente «questo è un titolo» e «questa è una cella di tabella». Un PDF memorizza «questo è un carattere» e «queste sono le sue coordinate sulla pagina». Ricostruire la struttura a partire dalle coordinate è un compito distinto e difficile, e MarkItDown ci prova a malapena. Il codice sorgente per l'analisi dei PDF non rileva i titoli: se una pagina non viene riconosciuta come modulo o tabella, l'intero documento passa attraverso un'estrazione di testo di base.
Gli utenti lo segnalano regolarmente nel repository del progetto, anche per articoli scientifici e tabelle.
Lo strumento non trova nemmeno un titolo nei PDF, esattamente come mostra il codice sorgente.
Online circola il dato «MarkItDown raggiunge una precisione dell'82%» senza alcuna metodologia. Cercare la fonte originale non porta a nulla: la catena di link termina in una pagina che non si carica. Non può essere considerato una misurazione.
Cosa succede con un contratto scansionato?
Punti chiave
Niente. Il file viene elaborato, il programma segnala che l'operazione è riuscita e l'output contiene zero caratteri. Nessun errore, nessun avviso. È stato testato due volte su un PDF creato da un'immagine e separatamente sull'immagine stessa: il risultato è stato identico. Lo strumento estrae il testo già memorizzato come testo nel file; la versione gratuita non ha capacità di riconoscimento.
Questo comportamento è più pericoloso degli altri perché non sembra un errore.
Per il test, è stato creato da un'immagine contenente testo un PDF, proprio come quello che si ottiene fotografando o scansionando un contratto. L'esecuzione è stata ripetuta per escludere il caso fortuito:
| Input | Codice di uscita | Caratteri nell'output | Messaggio di errore |
|---|---|---|---|
| PDF da immagine, esecuzione 1 | 0 | 0 | nessuno |
| PDF da immagine, esecuzione 2 | 0 | 0 | nessuno |
| Immagine PNG direttamente | 0 | 1 (interruzione di riga) | nessuno |
Zero caratteri e zero errori, due volte di seguito. Un codice di uscita zero significa «tutto è andato bene» e qualsiasi script che verifichi il successo tramite il codice di uscita considererà il documento elaborato. Poi l'output vuoto viene passato al modello, il modello non vede nulla e comincia a inventare una risposta dal nulla.
Attenzione
Se elabori documenti in batch, controlla la lunghezza dell'output. Il codice di uscita non ti dirà nulla: una scansione produce un file vuoto con codice di uscita zero.
Ci sono due soluzioni alternative, entrambe a pagamento. La prima è il flag -d, che invia il documento al servizio cloud di riconoscimento di Microsoft; il testo di aiuto del flag specifica esplicitamente che è necessario un endpoint di servizio valido. La seconda è un pacchetto aggiuntivo separato che invia le pagine a un modello di visione usando la tua chiave, quindi paghi il fornitore del modello per ogni pagina. Da aprile 2026, in una discussione aperta sul secondo metodo è stato segnalato che viene elaborata solo la prima pagina di una scansione multipagina.
Puoi anche eseguire un modello di riconoscimento sulla tua macchina, ma è un progetto a parte.
Per un singolo documento, è più facile aprirlo e copiare il testo manualmente. Per un flusso continuo di scansioni, serve uno strumento con riconoscimento integrato.
Si può semplicemente caricare il file in un convertitore online?
Punti chiave
Tecnicamente sì; esistono molti domini con questo nome. Ma nessuno è affiliato a Microsoft. L'affermazione «il file non lascia mai il browser» si può verificare con un clic, e non è sempre vera. Prima di caricare un contratto o un'esportazione con i nomi delle persone, controlla tu stesso dove viene inviato il file.
«MarkItDown online» è uno dei suggerimenti di ricerca più comuni e ci sono siti che lo offrono. Lo strumento originale di Microsoft non ha alcun sito web: è disponibile solo come programma da installare autonomamente. Qualsiasi prodotto con un nome simile che si apre nel browser è stato creato da qualcun altro.
Puoi controllare un servizio del genere in un minuto: apri gli strumenti per sviluppatori nella scheda delle richieste di rete, carica un file innocuo e verifica se viene inviato a un server. Se sì, l'affermazione sull'elaborazione nel browser è falsa, per quanto la FAQ la presenti con sicurezza.
Attenzione
Un contratto, una fattura o un'esportazione con i nomi dei dipendenti contiene dati personali. Se invii un file del genere a un sito di terze parti, sei tu a trasmetterlo. Un'utilità locale evita il problema: il file non lascia la tua macchina.
Ecco perché MarkItDown è apprezzato nei contesti in cui i documenti non possono uscire dall'organizzazione. In una discussione, una persona ha descritto la propria situazione: sul laptop aziendale erano vietati programmi arbitrari, ma erano consentite le librerie Python, e l'utilità locale si è rivelata l'unica opzione disponibile.
Quanto fa risparmiare davvero MarkItDown?
Punti chiave
Il vantaggio principale è che il modello riesce a comprendere il documento. C'è anche una differenza nelle dimensioni: confrontando il peso del markup nei file Office con le dimensioni del testo estratto, si osserva una riduzione da cinque a sette volte. Viene inoltre eliminato tutto ciò che il modello non deve leggere: descrizioni dei font, margini e colori delle celle.
Un file Office è strutturato come un archivio che contiene markup. Se decomprimi i tre file di test e confronti le dimensioni della parte che contiene il testo con quelle dell'output, ottieni questi valori:
| File | Markup interno | Testo estratto | Volte più piccolo |
|---|---|---|---|
| Contratto Word | 3,701 byte | 711 byte | 5.2 |
| Foglio Excel | 1,561 byte | 262 byte | 6.0 |
| Presentazione | 2,203 byte | 296 byte | 7.4 |
I file sono piccoli; le proporzioni cambieranno con quelli più grandi e non esiste un'unica cifra di risparmio. Quando gli articoli di confronto riportano numeri tondi, chiedi quale metodologia hanno usato.
Anche gli sviluppatori parlano del risparmio: la descrizione del progetto afferma esplicitamente che le convenzioni di Markdown sono molto economiche in termini di caratteri. È vero, ma non dovrebbe essere il principale argomento di vendita. La differenza tra «il modello ha ricevuto tremila caratteri invece di quindicimila» e «il modello ha ricevuto una struttura chiara invece di un miscuglio» è di un altro ordine di grandezza. La prima fa risparmiare denaro; la seconda determina se la risposta avrà senso.
Se ti interessa l'uso del contesto, ne parliamo a parte: Dove finiscono i token in Claude e quanti ne sono inclusi in ogni piano.
Come collegare MarkItDown all’agente AI Claude Code tramite MCP?
Punti chiave
Il progetto ha un pacchetto separato che avvia un server MCP con un solo comando: fornisci il percorso di un file e ottieni il testo. A settembre 2026, il pacchetto è stato finalmente aggiornato alla versione 0.0.1a7, ma la build è ancora una pre-release e invia telemetria a Microsoft per impostazione predefinita. Il comando qui sotto lo collega tramite uv, blocca la versione, usa Python 3.12 e disabilita la telemetria. Non c'è autenticazione e, secondo la documentazione stessa, il server può leggere qualsiasi file accessibile all'utente che lo ha avviato.
MCP è un modo per dare a un'IA uno strumento esterno che può usare autonomamente. Per una panoramica del meccanismo e di altri server, consulta la recensione dei server MCP per Claude Code.
Il server MarkItDown espone un solo strumento: convertire un documento in testo. Accetta un percorso di file locale, l'URL di una pagina o dati incorporati direttamente nella richiesta.
Si collega a Claude Code con un solo comando, bloccando la versione del server. Serve il gestore di pacchetti 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
La risposta al secondo comando dovrebbe mostrare «Connected» per markitdown. Al primo avvio vengono scaricati circa settanta pacchetti e ci vuole fino a un minuto; poi il server si avvia in uno o un secondo e mezzo.
Ecco le limitazioni, verificate manualmente.
La build 0.0.1a7 è stata rilasciata il 14 settembre 2026. Prima di allora, per oltre un anno il server era fermo alla versione 0.0.1a4 di maggio 2025. Il numero di versione più recente indica ancora una pre-release.
Non si installa su tutti i sistemi con una versione recente di Python. Il motore onnxruntime da cui dipende è disponibile per Python 3.14 su Mac solo per Apple Silicon con macOS 14 o successivo, quindi l'installazione non riesce sui Mac Intel e su macOS 13 o precedente con Python 3.14. Su un Mac con Apple Silicon, il server è stato eseguito con Python 3.14, 3.13 e 3.12 e si è installato in tutti e tre i casi. Il comando usa UV_PYTHON=3.12: sono disponibili pacchetti precompilati per la 3.12 su Windows, Linux e Mac con Apple Silicon, e se non hai questa versione di Python uv la scaricherà. Anche qui c'è una limitazione per i Mac Intel: uv compilerà la libreria cryptography dai sorgenti perché da giugno 2026 non esistono pacchetti precompilati per Intel. L'installazione richiede più tempo e potrebbe non riuscire.
La versione di MarkItDown installata internamente dipende dalla versione di uv. A partire da MarkItDown 0.1.6, l'extra [all] richiede una libreria Azure in pre-release: uv 0.12 e successivi la installano insieme all'ultima versione di MarkItDown, la 0.1.8, mentre le versioni meno recenti di uv fanno il downgrade alla 0.1.5. Controlla la versione di uv con uv --version.
Due elementi vengono inviati fuori dalla macchina. Il primo è la telemetria: su Mac e Linux, il motore onnxruntime all'interno del server la invia a Microsoft per impostazione predefinita. La variabile ORT_DISABLE_TELEMETRY=1 nel comando la disabilita. Nel test, senza questa variabile il server si è collegato agli endpoint di telemetria di Microsoft. Con la variabile impostata, durante l'elaborazione dei file dal disco non ci sono state connessioni.
Il secondo elemento è l'audio. Il server invia file WAV, MP3, M4A e MP4 al servizio di riconoscimento vocale di Google per la trascrizione tramite HTTP normale, senza crittografia. È meglio non inviargli registrazioni di conversazioni con i clienti.
Un documento grande non riuscirà a passare. Una discussione aperta descrive una risposta del server da 51,000 token che ha raggiunto un limite di 25,000 token; lo strumento non suddivide i file in parti.
E poi c'è la sicurezza. La documentazione del pacchetto dichiara chiaramente:
Il server non supporta l'autenticazione e viene eseguito con i permessi dell'utente che lo ha avviato. Lo strumento di conversione può essere usato per leggere qualsiasi file accessibile all'utente del server e qualsiasi dato presente sulla rete.
In altre parole, un agente dotato di questo strumento può leggere tutto ciò che puoi leggere tu. È accettabile lavorare sulla propria macchina. Non devi esporre il server pubblicamente né affidarlo a un agente non attendibile.
Attenzione
La documentazione del progetto non include una configurazione specifica per Claude Code: descrive solo Claude Desktop e l'avvio tramite container. Se trovi online una configurazione pronta descritta come «tratta dalla documentazione ufficiale» per Claude Code, sappi che nel repository non esiste una configurazione del genere.
Per il lavoro normale, è più facile richiamare il programma con un comando e mettere il testo risultante nel progetto. Il file si troverà così accanto agli altri materiali, dove il modello può consultarlo autonomamente.
Quando è più corretto usare un altro strumento?
Punti chiave
La regola è semplice: se la struttura è già registrata nel file, usa MarkItDown: è il più veloce ed è gratuito. Se la struttura deve essere ricostruita da un'immagine della pagina, usa uno strumento con modelli di layout. Docling gestisce tabelle e layout complessi, MinerU formule e colonne multiple, mentre i servizi cloud a pagamento aiutano quando non c'è tempo per armeggiare.
Un confronto basato sulle attività; le stelle di GitHub non c'entrano:
| Strumento | Punto di forza | Costo |
|---|---|---|
| MarkItDown | file Office, velocità, gratuità | non gestisce PDF complessi o scansioni |
| Docling | tabelle e layout con modelli specializzati | decine di secondi per documento |
| MinerU | colonne multiple, formule, tabelle dense | installazione più difficile |
| Marker | alta precisione, formule, illustrazioni | richiede una scheda grafica e la sua licenza limita i ricavi |
| unstructured | restituisce la struttura del documento in blocchi con descrizioni | output più difficile da usare |
| Analizzatori cloud | nessuna configurazione | costi e invio del documento fuori dalla tua macchina |
C'è un dettaglio su Marker che gli articoli di confronto omettono. Da luglio 2026, il codice è distribuito con una licenza permissiva, mentre i pesi del modello hanno una licenza separata con una soglia: l'utilizzo è gratuito se l'azienda non ha superato cinque milioni di dollari di ricavi e la stessa cifra di finanziamenti raccolti nell'anno precedente. Un'altra clausola vieta l'utilizzo a chiunque sviluppi un prodotto concorrente. Per la maggior parte dei lettori non è rilevante, ma un'azienda in crescita dovrebbe leggere la licenza prima di adottarlo.
Ne deriva un flusso di lavoro pratico in quattro passaggi:
- Elabora tutto con MarkItDown: è gratuito e immediato.
- Apri il risultato e controllane le dimensioni.
- Se il testo ha senso, il compito è concluso: non serve altro.
- Se l'output è un pasticcio o è vuoto, elabora quel file specifico con uno strumento più potente.
In questo modo, paghi in tempo e complessità solo per i documenti che ne hanno bisogno.
Come integrare MarkItDown nel flusso di lavoro?
Punti chiave
La stessa Anthropic dichiara la regola nelle descrizioni delle sue skill: usa questo strumento per leggere un documento. Non pianificare modifiche sulla sua base. Ecco tre scenari in cui è utile fin dal primo utilizzo: analizzare un gruppo di documenti simili, aggiungere una volta per tutte materiali di riferimento a un progetto di IA e preparare per l'analisi un'esportazione da un sistema contabile.
Anthropic usa MarkItDown nelle proprie skill già pronte per lavorare con i file Office e queste indicano chiaramente il limite da rispettare:
Esamina rapidamente un foglio: markitdown file.xlsx. Le coordinate delle celle non sono disponibili, quindi non pianificare modifiche sulla base di questo.
Nel testo si perdono i riferimenti alle celle e alle pagine, quindi non puoi usarlo per modificare il file di origine. Ecco tre scenari.
Un gruppo di documenti simili: verbali, fatture, moduli, domande. Mettili in una cartella ed elaborali con una riga:
for f in dokumenty/*.docx; do markitdown "$f" -o "text/$(basename "$f" .docx).md"; done
Poi fornisci al modello la cartella dei file di testo e chiedigli di compilare le informazioni pertinenti in una tabella. Funziona con i file digitali; le scansioni non riusciranno e potrai individuarle subito dalle dimensioni nulle.
Materiali di progetto di riferimento, come listini prezzi, modelli di contratto, norme e descrizioni di servizi. Convertiteli una volta in testo e metteteli accanto al progetto. Il modello potrà leggerli a ogni richiesta, così non dovrai allegare i file alla conversazione ogni volta. L'articolo sul caricamento di file in Claude spiega in cosa differisce dal caricamento di un file in chat.
Un'esportazione da un sistema contabile. Un export Excel di un software contabile o di un conto bancario diventa una tabella in un terzo di secondo e il modello può farci calcoli senza passaggi intermedi. Controlla che il CSV sia esportato o letto con delimitatore effettivo, virgolette e codifica corretti, e confronta righe, colonne e totali di controllo prima di passarlo al modello. Non normalizzare i separatori con una sostituzione testuale. Indica anche esplicitamente la valuta: un simbolo presente soltanto nella formattazione della cella Excel non sopravvive all’estrazione.
L'elaborazione di grandi PDF nel terminale non rientra in questo elenco. È un problema a parte, relativo all'uso del contesto, trattato nell'articolo sui PDF in Claude Code senza perdere token. Se stai configurando il tuo ambiente di lavoro, inizia da installare Claude Code.
Per iniziare subito, esegui pip install 'markitdown[pdf,docx,xlsx,pptx]', elabora il primo contratto Word che trovi e controlla le dimensioni del risultato. In mezzo minuto saprai se funziona con i tuoi file.
Domande frequenti
MarkItDown è gratuito?
Sì. Ha una licenza MIT, senza restrizioni sull'uso commerciale. Si paga solo per due metodi opzionali: il riconoscimento cloud di Microsoft tramite il flag -d e le descrizioni delle immagini generate da un modello di visione con una tua chiave. Tutto il resto funziona gratis sulla tua macchina.
I dati vengono inviati a un server?
Per la conversione ordinaria di file Office e PDF, no: tutta l'elaborazione avviene localmente. Ci sono tre eccezioni: la trascrizione audio passa dal servizio di Google, il flag -d invia il documento al cloud di Microsoft e le descrizioni delle immagini vengono inviate a un modello usando la tua chiave. Nessuno di questi metodi è attivo automaticamente.
Perché non trovo il comando markitdown dopo l'installazione?
Il più delle volte, il programma è stato installato in un ambiente che non si trova nel percorso di ricerca. Controlla il percorso completo del file nell'ambiente. Un altro caso comune è averlo installato per una versione di Python diversa da quella usata per eseguirlo. C'è un'altra trappola: su versioni di Python precedenti alla 3.10 viene installato un pacchetto vuoto senza alcun errore d'installazione.
Cosa devo fare se vedo stringhe come (cid:1090) invece delle lettere?
Si tratta di una tabella dei font non decodificata all'interno del PDF. Le impostazioni non risolveranno il problema: devi elaborare il file con un altro strumento, come Docling o MinerU. Per un singolo documento, è più veloce copiare manualmente il testo da un visualizzatore.
Posso elaborare un'intera cartella di file in una volta?
Non c'è una modalità separata per le cartelle, ma puoi farlo con un ciclo di terminale su una riga: for f in papka/*.docx; do markitdown "$f" -o "$f.md"; done. Un'altra opzione è inserire tutto in uno ZIP e fornire l'archivio: il programma ne elaborerà il contenuto, ma i file che non riesce ad analizzare scompariranno senza avviso.
In cosa l'output è diverso dal copiare il testo a mano?
Preserva la struttura. La copia produce testo semplice, in cui un titolo è indistinguibile da un paragrafo e una tabella si sfalda. MarkItDown preserva titoli, elenchi e tabelle, così il modello può distinguere gli elementi. Per un breve documento la differenza è ridotta, ma diventa decisiva con venti documenti.
MarkItDown può aprire documenti protetti da password?
No. Un file protetto da password non si apre e non puoi passare la password al programma. Devi rimuovere prima la protezione con l'applicazione che l'ha applicata.
Fonti
- MarkItDown - repository del progetto su GitHub
- MarkItDown su PyPI - versioni e date di rilascio
- markitdown-mcp - descrizione del server MCP
- Anthropic Skills - utilizzo di MarkItDown per le tabelle
- Docling - analisi dei documenti con modelli di layout
- MinerU - analisi di layout complessi nei PDF
- Marker - licenza dei pesi del modello
- pandoc - convertitore di markup
Quando sei pronto, scopri Ailoot.
Maggiori dettagli
Domande frequenti
Posso correggere un CSV sostituendo tutti i punti e virgola con virgole?
No. Testo tra virgolette e formati decimali possono contenere quei caratteri. Riesporta con il delimitatore previsto oppure usa lettore e scrittore CSV con delimitatore, codifica e gestione delle virgolette espliciti. Verifica colonne, righe e totali di controllo rispetto all’originale.
Un codice di uscita zero significa che il PDF è stato convertito utilmente?
No. L’esempio di scansione nell’articolo ha prodotto un output vuoto senza errore; un PDF complesso ha dato testo illeggibile. Apri il risultato, controllane lunghezza e struttura e usa uno strumento per layout o riconoscimento quando il testo è vuoto o corrotto.