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