md-vs-docx

Des notes au sujet de l'indexation pour la thèse - retour accueil

git clone git://bebou.netlib.re/md-vs-docx

Log | Files | Refs |

readme.md (17674B)


      1 # Des notes au sujet de markdown vs office
      2 
      3 Côté thèse on a identifié la question de l'indexation des documents de travail
      4 et les recherches qui suivent comme un sujet potentiellement intéressant. Se
      5 pose la question de la pertinence d'une indexation centralisée au niveau du
      6 serveur vs une indexation en local, en particulier si plusieurs postes indexent
      7 les mêmes fichiers.
      8 
      9 Côté Commown il est préssenti qu'utiliser majoritairement du markdown pour les CR et
     10 les prises de notes augmenterait la productivité (ou plutôt ferait baisser la
     11 frustration ?). De plus certains ordinateurs dans les bureaux n'ont que 8Go de
     12 RAM et commencent à galérer. Le passage à plus de markdown pourrait être un moyen
     13 d'éviter un upgrade en RAM ?
     14 
     15 Côté Légicoop le besoin de faire de la recherche plein texte est importante.
     16 Un passage vers du markdown, même comme simple intermédiaire pour la recherche,
     17 pourrait être pratique.
     18 
     19 Il semblerait donc que la combinaison de ces trois sujets est pertinente à
     20 creuser.
     21 
     22 Les hypothèse que j'émets sur le sujet :
     23 
     24   * L'écriture, la lecture et le traitement de fichiers texte au format markdown
     25     nécessite moins de puissance de calcul, moins de stockage, des logiciels
     26     moins complexes
     27   * Si c'est effectivement le cas cela peut participer à concrètement faire
     28     baisser le besoin d'augmenter/renouveller le matériel dans les bureaux de
     29     Commown
     30   * `tracker` n'est peut-être pas une super solution : perf douteuses dans
     31     certains cas, très intégré à GNOME, possiblement "inutile" si on utilise
     32     surtout des fichiers textes etc).
     33   * La recherche en plein texte sur des fichiers texte pourrait possiblement
     34     être faite via une combinaison relativement simple d'outils relativement
     35     simples (voir les travaux de Paul).
     36   * L'utilisation de markdown pourrait faciliter la production de documents
     37     "finis" type pdf.
     38   * Il y a consensus à Commown sur la volonté de ne pas administrer d'instance
     39     Nextcloud + Onlyoffice dans le cadre de l'infogérance mais proposer un
     40     éditeur de markdown léger et le stockage associé serait gérable
     41 
     42 La comparaison de l'indexation centralisée et déportée vs en local n'est pas
     43 triviale, je n'ai pas d'hypothèse à ce sujet. J'anticipe cependant qu'elle
     44 mettrait à jour des critères n'étant pas techniques tel que le besoin d'avoir
     45 accès aux résultats de recherche en étant hors-ligne.
     46 
     47 Le sujet de la production de document est un souhait à long terme de Légicoop
     48 et porurait faire l'objet d'une collaboration avec Antoine Fauchié.
     49 
     50 La variable humaine sera probablement importante dans la conduite d'un éventuel
     51 changement. A ce titre là le sujet peut être l'occasion de se faire la main sur
     52 des méthodes de recherche qualitatives type entretiens. L'enjeux étant de savoir
     53 si tout cela serait pertinent à proposer aux clients du service d'infogérance,
     54 quelles en seraient les limites humaines, dans quelle mesure il faudra composer
     55 avec l'existant et négocier.
     56 
     57 ## La situation chez Commown
     58 
     59 Chez Commown les documents de travail sont principalement stockés dans un
     60 nextcloud hébergé par IndieHosters. On y trouve environ 50Go de données. Des
     61 fichiers texte, des tableurs, des gros zip pour flasher des téléphones, des
     62 photos et des vidéos pour l'équipe com, des pdfs. Il serait peut-être utile
     63 d'avoir des stats sur les extensions. Ces documents sont souvent lus et édité
     64 via la suite OnlyOffice adossée au Nextcloud, parfois en local dans libreoffice
     65 après synchronisation.
     66 
     67 Une partie de la documentation destinée à l'atelier est aujourd'hui sous format
     68 docx mais est destinée à être migrée en markdown dans un futur assez proche.
     69 
     70 Aujourd'hui les besoins identifiés à Commown sont :
     71 
     72   * La prise de notes collaboratives
     73   * La production collaborative de compte-rendu de réunion
     74 
     75 La production de pdf et la recherche plein texte n'ont pas été remontés en tant
     76 que besoin mais très peu de personnes ont été consultées.
     77 
     78 Il est anticipé que le plus difficile sera l'accompagnement au changement.
     79 L'éventuelle mise en évidence d'un bénéfice environnementale et d'une meilleure
     80 maitrise des données pourrait être mobilisé pour faciliter cet accompagnement.
     81 
     82 ## La situation chez Légicoop
     83 
     84 Légicoop ont plus de 80Go de documents, en grande partie des docx et des pdfs,
     85 stockés dans un Nextcloud hébergé par Worteks. La totalité des membres de
     86 Légicoop synchronisent en local la totalité des fichiers de Nextcloud. La
     87 culture du travail en local y est développée et les personnes ont une bonne
     88 maîtrise de leur arboresence de fichiers. Les documents sont lus et édités dans
     89 Microsoft Word, Libreoffice writer ou la suite Onlyoffice en ligne.
     90 
     91 Du fait de la gestion de très nombreux fichiers l'enjeux de la recherche est
     92 important. Il est habituel à Légicoop de faire de la recherche plein texte ou
     93 sur les méta-données des fichiers notamment la date de dernière modification.
     94 
     95 GNOME, et donc les PCs que Commown loue à Légicoop, embarque un logiciel
     96 anciennement nommé tracker et dorénavant nommé
     97 [tinySPARQL](https://tracker.gnome.org/). Il indexe les fichiers du système, y
     98 compris sur ces méta-données (type artiste d'un fichier de musique) puis les
     99 rend accessible aux applications de l'écosystème GNOME. Légicoop ont fait état
    100 d'instabilité dans Nautilus, l'explorateur de fichier de GNOME, et de
    101 l'incapacité de faire des recherches sur certains propriétés. L'outil ne semble
    102 pas être très populaire, une recherche sur "tracker" donne en second résultat
    103 une question stackoverflow "Comment désactiver tracker ?".  Florent a émit des
    104 doutes sur l'incapacité de Nautilus à faire des recherches avancés sur certains
    105 critères. Si effectivement le combo tinySPARQL + Nautilus fait l'affaire et ne
    106 nécessite "que" de la formation alors le passage à du markdown pourrait avoir
    107 une utilité marginale pour la recherche.
    108 
    109 À Légicoop la plupart des documents manipulés ont pour vocation de générer du
    110 pdf. Le souhait des co-fondateurs serait d'avoir un jour la possibilité de
    111 générer des documents "très beaux" via LaTeX. L'usage du markdown combiné à un
    112 traducteur markdown -> LaTeX et des templates LaTeX pourrait leur permettre
    113 de s'affranchir largement d'une suite Office.
    114 
    115 ## Quelques tests techniques
    116 
    117 Parce qu'amorcer des vrais tests avec de vraies personnes c'est long et
    118 difficile j'ai d'abord entrepris de faire quelques tests rapides dans mon coin.
    119 
    120 ### La migration d'un existant
    121 
    122 J'ai imaginé (keyword imaginé) que l'existence d'un gros corpus documentaire en
    123 docx ou odt pourrait être un frein conséquent à l'adoption du markdown. Il
    124 existe plusieurs outils pour convertir du docx en markdown. J'ai pour le moment
    125 testé [markitdown](https://github.com/microsoft/markitdown), logiciel
    126 open-source de Microsoft - merci à eux - en python. Ça a les désavantages du
    127 python - installation fastidieuse, assez lent au démarrage - mais l'avantage de
    128 bien fonctionner pour des docx, des pdf, dex pptx et même des xlsx. Le readme
    129 précise tout de même que la qualité du markdown de sortie n'est pas
    130 nécessairement au niveau pour une lecture tel quel par des humains.
    131 
    132 Dans les tests que j'ai fait sur des docx et pdfs aléatoirement piochés dans le
    133 Nextcloud de Commown j'obtiens tout de même de très bons résultats. Voir les
    134 résultats dans ce dépôt. Si le but est d'extraire le texte uniquement pour faire
    135 de la recherche et non pas pour ensuite travailler sur le fichier markdown alors
    136 la sémantique du markdown n'est peut-être pas nécessaire et `pdftotext` peut
    137 faire l'affaire. Il est par ailleurs considérablement plus rapide. Sur ma
    138 machine et un pdf de 7Mo et 1500 pages (la bible) :
    139 
    140     markitdown kjv.pdf > kvj.md   101.31s user 0.30s system 99% cpu 1:41.77 total
    141     pdftotext kjv.pdf - > kvj.txt 3.38s user 0.06s system 99% cpu 3.445 total
    142 
    143 Convertir les 86 docx des dossiers que j'ai synchros sur mon PC prend pas mal
    144 de temps
    145 
    146     find -name '*.docx'  0.01s user 0.01s system 95% cpu 0.021 total
    147     xargs -n1 sh -c  --  165.47s user 12.76s system 121% cpu 2:26.83 total
    148 
    149 Et parallelisé :
    150 
    151     xargs -P4 -n1 sh -c  -- 230.06s user 17.51s system 341% cpu 1:12.58 total
    152 
    153 On est donc pas sur quelque chose de trivial en puissance de calcul mais
    154 jouable si l'on migre un existant un bonne fois pour toute. Si l'on fait la
    155 conversion uniquement pour la recherche il faudrait le faire à chaque modif de
    156 fichier. En prenant le fichier `brainstorm.docx` comme fichier d'exemple[^1], en
    157 ayant en tête qu'il est assez long et complexe :
    158 
    159     markitdown brainstorm.docx > /dev/null  4.23s user 0.21s system 109% cpu 4.050 total
    160 
    161 La complexité du document semble avoir une incidence puisqu'avec un docx de 100
    162 pages mais très simple :
    163 
    164     markitdown exemple.docx > /dev/null  1.59s user 0.14s system 127% cpu 1.353 total
    165 
    166 Avec l'option `--keep-data-uris` la conversion des docx conserve les images et
    167 les encode en base64 dans une balise image. Si l'on voulait migrer proprement
    168 il faudrait extraire les base64 du markdown.
    169 
    170 ### Produire des PDF depuis du markdown
    171 
    172 Je crois que la plupart des personnes utilisent pandoc + LaTeX. Sans vraiment de template
    173 cela produit des documents propres mais au style très LaTeX. Voir `2025-06-03.(md|pdf)`.
    174 Je suppose qu'il y aurait peu d'entreprises satisfaites par un rendu comme
    175 celui-ci. Il alors de créer des templates LaTeX personnalisé ce qui n'est pas
    176 une mince affaire.
    177 
    178 Les perfs de `pandoc` et `LaTeX` sont pas folles mais à mettre en perspective
    179 en fonction du besoin :
    180 
    181     pandoc 2025-06-03.md -t pdf  0.99s user 0.14s system 99% cpu 1.141 total
    182 
    183 Avec le combo `lowdown` + `roff` :
    184 
    185     $ lowdown -tms 2025-06-03.md | preconv | groff -Tpdf -ms | zathura -
    186     lowdown -tms 2025-06-03.md  0.00s user 0.01s system 82% cpu 0.016 total
    187     preconv  0.00s user 0.01s system 81% cpu 0.018 total
    188     groff -Tpdf -ms  0.20s user 0.04s system 136% cpu 0.175 total
    189 
    190 mais le rendu est encore plus éloigné de ce qu'on s'imagine être un document
    191 d'entreprise. On dépend de la sortie roff ms de `lowdown` et l'on a donc accès
    192 uniquement aux éléments markdown implémentés par cet outil. Cela dit cette
    193 piste pourrait être creusée avec Antoine Fauchié.
    194 
    195 Se pose la question du lieu, du moment et de la fréquence de la génération de
    196 ces PDF. Est-ce que c'est une opération qui a lieu en local et à la demande sur
    197 la machine des personnes à l'aide d'un outil qui leur est mis à disposition ?
    198 Est-ce que c'est quelque chose qui a lieu à distance une fois tous les soirs -
    199 quid de "j'ai besoin de l'envoyer maintenant" ?
    200 
    201 ### Faire de la recherche plein texte
    202 
    203 Pour faciliter la lecture et la recherche dans l'existant du dossier
    204 infogérance du Nextcloud de Commown j'ai préalablement modifié tous les noms de
    205 fichiers pour en retirer les caractères qui pourraient poser des soucis dans
    206 les scripts :
    207 
    208     detox -r ./dossier-a-traier/*
    209 
    210 Puis j'ai créé une version markdown de tous les docx et pdf tout en conservant
    211 le mtime :
    212 
    213     find -name '*.docx' | xargs -P4 -n1 sh -c 'echo "$1";markitdown "$1" > "${1%.docx}.md";touch --date="@$(stat -c "%Y" "$1")" "${1%.docx}.md"' --
    214     find -name '*.pdf' | xargs -P4 -n1 sh -c 'echo "$1";markitdown "$1" > "${1%.pdf}.md";touch --date="@$(stat -c "%Y" "$1")" "${1%.pdf}.md"' --
    215 
    216 Ce qui permet ensuite de faire une recherche plein texte un peu brut de
    217 décoffrage comme ceci - avec `fzy` comme dépendance :
    218 
    219     find -name '*.md' |
    220         xargs grep -H '.' |
    221         fzy -l 100 |
    222         cut -d: -f1 |
    223         xargs ${EDITOR:-vim}
    224 
    225 Evidemment si l'on est dans une situation où les fichiers `markdown` ne servent
    226 qu'à la recherche alors il faut quelque chose d'un peu plus avancé dans le
    227 style de :
    228 
    229     file=$(find -name '*.md' |
    230         xargs grep -H '.' |
    231         fzy -l 100 |
    232         cut -d: -f1 |
    233         sed 's/\.md$//')
    234     for ext in docx odt pdf;do
    235         test -f $file.$ext && libreoffice $file.$ext
    236     done
    237 
    238 En terme de performance c'est parfait sur mon ordi avec 132 documents markdown
    239 et 89 227 lignes.
    240 
    241 Je trouve ça chouette mais je doute que cela convienne à grand monde. Plusieurs
    242 questions se posent :
    243 
    244   * Est-ce qu'il faut de la formation ?
    245   * Est-ce que c'est vraiment inenvisageable si c'est embarqué dans une TUI un
    246     peu plus jolie accessible en double cliquent sur un `.desktop` ?
    247   * Est-ce que c'est quelque chose avec lequel on peut intéragir via une page
    248     web assez simple ?
    249   * Est-ce que ça tient la charge sur de très gros corpus ?
    250   * Est-ce que c'est pas ce que Paul avait déjà fait @Florent ?
    251 
    252 ### La taille des documents
    253 
    254 L'impact que la conversion de docx et de pdf en markdown a sur la taille des
    255 documents n'est pas trivial.
    256 
    257 ls -larth | awk '{print $5,$9}' | sort -k2 | column -ts ' '
    258 
    259 Elle a grandement réduit la taille de ce pdf type formulaire :
    260 
    261     9.1K  affiliation.md
    262     3.2K  affiliation.md.gz
    263     563K  affiliation.pdf
    264     8.8K  affiliation.txt
    265 
    266 Et bien réduit la taille de ce document complexe avec du suivi de changement
    267 etc :
    268 
    269     93K   brainstorm.docx
    270     54K   brainstorm.md
    271     21K   brainstorm.md.gz
    272 
    273 Mais considérablement augmenter la taille de ce document ne contenant que du
    274 texte très redondant pour peu que l'on ne compresse pas la sortie :
    275 
    276     8.6K  exemple.docx
    277     286K  exemple.md
    278     3.1K  exemple.md.gz
    279 
    280 Même histoire pour un document avec une image non compressée mais moins
    281 dramatique :
    282 
    283     74K   exemple-image.docx
    284     109K  exemple-image.md
    285     70K   exemple-image.md.gz
    286 
    287 Si le docx contient une image elle est intégrée en base64 dans le markdown.
    288 
    289 Si le but est de continuer à travailler sur du docx et d'utiliser le markdon
    290 pour faire des recherches la conversion ne fera que faire grossir le stockage.
    291 Si l'on substitut un document par un autre il est difficile de dire si l'on
    292 économisera du stockage ou pas.
    293 
    294 ## Un éditeur
    295 
    296 On peut distinguer trois grands types d'éditeurs :
    297 
    298   1. Editeur de texte classique (vim, emacs, vscode...)
    299   2. Editeur de markdown, en local, avec rendu (obsidian, zettlr...)
    300   3. Editeur de markdown, en ligne, avec rendu et collaboration en temps réel
    301      (notion, codiMD, etherpad...)
    302 
    303 On peut noter des avantages et inconvénients à la va vite :
    304 
    305   1. Toujours disponible en local. Fonctionnalités d'édition de texte
    306      potentiellement les plus puissantes. Pléthore de choix, y compris qui
    307      fonctionne sur des machines très peu puissantes. Migration d'un éditeur à
    308      un autre techniquement immédiate.
    309   2. Intègre du rendu pour les personnes pas à l'aise et/ou travaillant sur des
    310      documents complexes. Intègrent parfois des exports PDF (via pandoc pour
    311      zettlr par ex). Obsidian a pleins de plugins, y compris un plugin git pour
    312      de l'éventuelle collaboration qui ne repose pas sur un service entièrement
    313      en ligne ou un nextcloud. Obsidian n'est pas libre, Zettlr l'est mais est
    314      plus orienté recherche. Migration d'un éditeur à un autre techniquement
    315      immédiate.
    316   3. A priori collaboration la plus "naturelle". Nécessite une connexion et un
    317      navigateur. Potentiellement un peu (beaucoup) gourmand en ressource.
    318      Nécessite d'héberger un service sur un serveur, à voir la complexité.
    319      Migration d'un éditeur à un autre nécessite l'installation d'un nouveau
    320      service, peut-être la migration de données.
    321 
    322 Les options 1. et 2. ne sont pas exclusives. La 3. peut l'être en fonction de
    323 la manière dont sont stockées les données. Par exemple codiMD utilise une base
    324 postgres et donc, par défaut, semble ne pas pouvoir simplement se synchro avec
    325 un système de fichier local pour éditer avec un éditeur local.
    326 
    327 ## Merci les LLM ?
    328 
    329 Il est suggéré dans le README de `markitdown` que la motiviation première de la
    330 conversion vers du markdown est de pouvoir entrainer des LLM dessus. Pour les
    331 PDF c'est également la motivation affichée par
    332 [pyMuPDF](https://pymupdf.readthedocs.io/en/latest/pymupdf4llm/index.html). Je
    333 trouve ça super ironique. Microsoft a fait plein d'argent en poussant du Word
    334 partout, y compris lorsque du texte suffisait, rendant une part significative
    335 des documents produits par l'humanité difficile à lire pour pleins d'humains. Ce
    336 n'est qu'une fois qu'il a fallu rendre les documents Word lisibles par des
    337 machines qu'ils ont développé un outil permettant de rendre tous les docx
    338 existants lisibles par tous les humains. Et en effet de bord on en profite.
    339 
    340 L'extraction du texte des docx et des pdf ne sert pas qu'à entrainer des modèles
    341 de LLM mais aussi à alimenter des RAG, une technique permettant à un LLM
    342 de modifier sa réponse en s'alimentant depuis un corpus documentaire existant.
    343 C'est ce qui permet à certaines entreprises de promettre qu'en mettant tous les
    344 documents de leurs clients dans une base de donnée leur LLM saura répondre à des
    345 questions qui leur sont spécifiques comme : "Retrouve moi le compte-rendu de la
    346 réunion du projet Machin et dit moi ce que l'on avait prévu comme date de fin".
    347 Ce que je trouve à nouveau assez ironique puisque le fait que l'information soit
    348 prisonnière dans des PDF ou des docx est l'une des raisons pour laquelle il est
    349 difficile de chercher dedans. Les technologies développées pour faire
    350 fonctionner des RAG qui permettent de faire des recherches plus facilement
    351 permettent aussi de revenir à une situation dans laquelle il n'est pas ou moins
    352 nécessaire d'avoir recours à des RAG pour faire des recherches plus facilement.
    353 C'est assez fascinant.
    354 
    355 [^1]: il n'est aps dans le dépôt parce qu'il contient des informations
    356     potentiellement confidentielles de Commown