# If needed, install chunknorris
%pip install chunknorris -q
Note: you may need to restart the kernel to use updated packages.
# imported the required chunknorris components
from chunknorris.parsers import MarkdownParser
from chunknorris.chunkers import MarkdownChunker
from chunknorris.pipelines import BasePipeline
3 components are needed to chunk a markdown file :
MarkdownParser
: this parser ensures the formatting of the markdown file. In particular, it will :- ensure that the headers are in ATX format
- detect tables, code blocks, metadata, ... to make sur they are not splitted across multiple chunks
It returns a
MarkdownDoc
containing all informationMarkdownChunker
: the chunker takes as input aMarkdownDoc
and performs chunking in multipleChunks
objects.BasePipeline
: this pipline is pretty basic (you would have guessed considering its name... 😅). It just plugs together the parser and the chunker so that the output of the parser in fed to the chunker. Other pipelines, such asPdfPipeline
handle more complex mechanics.
# instanciate
parser = MarkdownParser()
chunker = MarkdownChunker()
pipeline = BasePipeline(parser, chunker)
# Get those chunks !
path_to_md_file = "../../tests/test_files/file.md"
chunks = pipeline.chunk_file(path_to_md_file)
print(f"Got {len(chunks)} chunks !")
2024-12-17 09:59:ChunkNorris:INFO:Function "chunk" took 0.0068 seconds
Got 17 chunks !
View the chunks¶
# Let's look at the chunks
for i, chunk in enumerate(chunks[:3]): # we only look at the 3 first chunks
print(f"\n------------- chunk {i} ----------------\n")
print(chunk.get_text())
------------- chunk 0 ---------------- # Jardin Un [jardin japonais](https://fr.wikipedia.org/wiki/Jardin_japonais "Jardin japonais"). Une femme de 87 ans en train de cultiver son jardin. [Comté de Harju](https://fr.wikipedia.org/wiki/Comt%C3%A9_de_Harju "Comté de Harju"), Estonie, juin 2016\. Un **jardin** est un lieu durablement et hypothétiquement aménagé où l'on cultive de façon ordonnée des [plantes](https://fr.wikipedia.org/wiki/Plante "Plante") domestiquées ou sélectionnées. Il est le produit de la technique du [jardinage](https://fr.wikipedia.org/wiki/Jardinage "Jardinage") et, comme elle, il remonte au moins à l'Antiquité. Les différentes cultures humaines dans le monde, au fil des époques, ont inventé de nombreux types et styles de jardins. Lieux d'agrément, de repos, de rêverie solitaire ou partagée, les jardins ont aussi été revêtus dès l'Antiquité d'une valeur symbolique. Ils apparaissent dans les mythologies et les religions, et ils ont été fréquemment évoqués dans les arts. ------------- chunk 1 ---------------- # Jardin ## Étymologie\[[modifier](https://fr.wikipedia.org/w/index.php?title=Jardin&veaction=edit§ion=1 "Modifier la section : Étymologie") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Jardin&action=edit§ion=1 "Modifier le code source de la section : Étymologie")] Le terme *jardin* est attesté au [XIIe siècle](https://fr.wikipedia.org/wiki/XIIe_si%C3%A8cle "XIIe siècle") au sens de « terrain, généralement clos, où l'on cultive des végétaux utiles ou d'agrément » (Grand mal fit Adam, éd. H. Suchier, 88\). Il remonte à un gallo\-roman *\*hortus gardinus* (autrement \*HORTU GARDINU, *gardinium* étant attesté au IXe siècle en [latin médiéval](https://fr.wikipedia.org/wiki/Latin_m%C3%A9di%C3%A9val "Latin médiéval")), ce qui signifie littéralement « jardin entouré d'une clôture », composé du latin *hortus* « jardin » et du [vieux bas francique](https://fr.wikipedia.org/wiki/Vieux-francique "Vieux-francique") *\*gart* ou *\*gardo* « clôture » (d'où l'ancien français *jart, gart* « jardin » et le russe город, *gorot*)[\[1]](https://fr.wikipedia.org/wiki/Jardin#cite_note-%C3%A9tym_CNRTL-1). Le terme vieux bas francique, langue non attestée, est reconstitué d'après le [vieux haut allemand](https://fr.wikipedia.org/wiki/Vieux_haut_allemand "Vieux haut allemand") *gart, garto* « jardin », l'ancien néerlandais *gaert* et le gotique *garda*[\[1]](https://fr.wikipedia.org/wiki/Jardin#cite_note-%C3%A9tym_CNRTL-1). Cette étymologie suggère que le jardin se doit d'être clos pour être protégé de l'extérieur et bien entretenu à l'intérieur. Le mot s'est diffusé dans les autres langues romanes à partir du français *jardin*, ainsi qu'en anglais (*garden*) via le normand *gardin*, semblable au picard *gardin*[\[1]](https://fr.wikipedia.org/wiki/Jardin#cite_note-%C3%A9tym_CNRTL-1). ------------- chunk 2 ---------------- # Jardin ## Définition\[[modifier](https://fr.wikipedia.org/w/index.php?title=Jardin&veaction=edit§ion=2 "Modifier la section : Définition") \| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Jardin&action=edit§ion=2 "Modifier le code source de la section : Définition")] Au sens actuel un jardin comprend 3 composantes qui sont simultanément présentes : 1. la notion d'aménagement durable de l'espace : dans, proche ou extérieur à l'habitation, clos ou délimité, aménagé d'équipements hydrauliques, d'entretien, d'aides à la végétation comme les pots horticoles, de circulations, de meubles, d'objets d'art, de constructions fonctionnelles ou décoratives. L'aménagement a généralement un caractère pérenne car les jardins sont spécialement destinés à cultiver des plantes vivaces, des arbres, qui sont durablement présents, mais les jardins peuvent aussi être saisonniers dans les pays à saisons marquées, ou fugaces. 2. la notion de culture des végétaux signifie que les végétaux ont pour le moins été sélectionnés intentionnellement, naturalisés, ou plus communément sont des plantes qui ont subi une [domestication](https://fr.wikipedia.org/wiki/Domestication "Domestication"), l'objet de nombreux jardins est l'étude, la conservation ou la production de végétaux ou de sous produits végétaux. Ces végétaux peuvent être des [fleurs](https://fr.wikipedia.org/wiki/Fleur "Fleur"), des [légumes](https://fr.wikipedia.org/wiki/Plante_potag%C3%A8re "Plante potagère"), des [arbres fruitiers](https://fr.wikipedia.org/wiki/Arbre_fruitier "Arbre fruitier") ou d’[ornement](https://fr.wikipedia.org/wiki/Arboretum "Arboretum"), des plantes médicinales ou utilitaires. Le terme jardin est également accepté pour un espace clos constituant un décor entièrement minéral typique du [jardin japonais](https://fr.wikipedia.org/wiki/Jardin_japonais "Jardin japonais"), où la notion de culture des végétaux est repoussée à l'environnement. 3. la notion d'ordonnance qui signifie qu'un jardin est toujours organisé. Philippe Descola, observant les Indiens Achuar, définit le jardin comme une « anti\-forêt », exhibant la « maîtrise dans la destruction du naturel »[\[2]](https://fr.wikipedia.org/wiki/Jardin#cite_note-2). Les jardins sont attestés dans toutes les zones de domestication des plantes où ils sont des lieux plus sophistiqués que les champs ou les prés. La question du lien entre jardin et sédentarisation est complexe, il existe des formes rudimentaires de jardins chez les nomades... alors de nombreux sédentaires ne jardinent pas et bétonnent leur jardinets. La règle esthétique quasi unique des jardins de climat méditerranéen était, depuis les origines, l'alignement. Elle est restée inchangée jusqu'au XIXe siècle dans les jardins perses. La règle des jardins chinois est l'évocation. L'ordonnance des vergers et potagers en planches ou carrés est justifiée par les besoins d'entretien, sanitaire et de production. Une [friche](https://fr.wikipedia.org/wiki/Friche "Friche") n'est pas un jardin, même si elle est un ancien jardin à l'abandon. La notion de jardin suppose un minimum d'attention, y compris pour ce qu'il est convenu d'appeler jardin sauvage ou naturel qui sont des jardins où on laisse pousser des plantes spontanées.
You may want to remove the links in a chunk by using Chunk.get_text(remove_links=True)
.
The Chunk.get_text()
method allows to to directly concatenate the headers of all top-level sections with the chunk's content. If you want to customize this behavior, you may use the Chunk.headers
and Chunk.content
attributes. Both contain MarkdownLine
objects, which represent a markdown line of the file and its metadata.
# Let's see a chunk in details (chunk number 10 for example)
for line in chunks[10].headers:
print(line)
print("=======================")
for line in chunks[10].content:
print(line)
{'text': '# Jardin', 'line_idx': 0, 'isin_code_block': False, 'page': None} {'text': '## Les jardins en France\\[[modifier](https://fr.wikipedia.org/w/index.php?title=Jardin&veaction=edit§ion=10 "Modifier la section\u202f: Les jardins en France") \\| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Jardin&action=edit§ion=10 "Modifier le code source de la section : Les jardins en France")]', 'line_idx': 99, 'isin_code_block': False, 'page': None} {'text': '### Protection à titre patrimonial de certains parcs et jardins\\[[modifier](https://fr.wikipedia.org/w/index.php?title=Jardin&veaction=edit§ion=11 "Modifier la section\u202f: Protection à titre patrimonial de certains parcs et jardins") \\| [modifier le code](https://fr.wikipedia.org/w/index.php?title=Jardin&action=edit§ion=11 "Modifier le code source de la section : Protection à titre patrimonial de certains parcs et jardins")]', 'line_idx': 113, 'isin_code_block': False, 'page': None} ======================= {'text': '', 'line_idx': 114, 'isin_code_block': False, 'page': None} {'text': '', 'line_idx': 115, 'isin_code_block': False, 'page': None} {'text': 'Grotte dans le parc du vicomte de Bona\\-Dona (époque style [baroque](https://fr.wikipedia.org/wiki/Baroque "Baroque")), en région Champagne\\-Ardenne (France).', 'line_idx': 116, 'isin_code_block': False, 'page': None} {'text': '', 'line_idx': 117, 'isin_code_block': False, 'page': None} {'text': '', 'line_idx': 118, 'isin_code_block': False, 'page': None} {'text': 'Fin 2007[\\[9]](https://fr.wikipedia.org/wiki/Jardin#cite_note-9), 2\xa0034 parcs et jardins étaient protégés (dont 579 classés et 1\xa0455 inscrits) au titre de la loi du 31 décembre 1913 des [monuments historiques](https://fr.wikipedia.org/wiki/Monument_historique_(France) "Monument historique (France)"). Les propriétaires (quoique les jardins puissent faire l’objet de propriétés multiples) sont surtout privés. La campagne «\xa0Visitez un jardin en France\xa0» a été l’occasion de découvrir des jardins privés ou publics, historiques ou contemporains, parcs floraux ou botaniques. Le souci d’une meilleure connaissance des jardins et celui de leur caractère historique se sont révélés beaucoup plus tard que celui des éléments plus «\xa0classiques\xa0» du patrimoine\xa0: monuments, objets d’art. Le terme de jardin n’apparaît pratiquement pas dans les arrêtés de protection du XIXe\xa0siècle et très peu avant 1920\\. C’est même plus généralement des années 1930 que datent beaucoup d’arrêtés de protection de parcs ou de jardins. Ils sont alors identifiés, nommés, mais rarement décrits.', 'line_idx': 119, 'isin_code_block': False, 'page': None} {'text': '', 'line_idx': 120, 'isin_code_block': False, 'page': None} {'text': '', 'line_idx': 121, 'isin_code_block': False, 'page': None} {'text': 'En complément de la protection au titre des "Monuments Historiques", le Ministère de la Culture et de la Communication a créé en 2004, sur la proposition du Comité national des Parcs et Jardins un label "Jardin remarquable"[\\[10]](https://fr.wikipedia.org/wiki/Jardin#cite_note-10) dont l’objet est de distinguer des jardins et des parcs, publics ou privés, présentant un intérêt culturel, esthétique, historique ou encore botanique. Ces jardins et parcs doivent être ouverts au public au moins 40 jours par an. Ce label, gage de qualité, est attribué pour 5 ans. En 2017, 407 parcs et jardins revendiquent ce label, en France et dans les DOM.', 'line_idx': 122, 'isin_code_block': False, 'page': None} {'text': '', 'line_idx': 123, 'isin_code_block': False, 'page': None} {'text': '', 'line_idx': 124, 'isin_code_block': False, 'page': None} {'text': 'Chaque premier week\\-end de [juin](https://fr.wikipedia.org/wiki/Juin "Juin") depuis [2003](https://fr.wikipedia.org/wiki/2003 "2003"), le [Ministère français de la Culture et de la Communication](https://fr.wikipedia.org/wiki/Minist%C3%A8re_de_la_Culture_(France) "Ministère de la Culture (France)") organise un événement à l\'échelle nationale\xa0: [Rendez\\-vous aux jardins](https://fr.wikipedia.org/wiki/Rendez-vous_aux_jardins "Rendez-vous aux jardins"), durant lequel de nombreux jardins sont ouverts au public.', 'line_idx': 125, 'isin_code_block': False, 'page': None} {'text': '', 'line_idx': 126, 'isin_code_block': False, 'page': None} {'text': '', 'line_idx': 127, 'isin_code_block': False, 'page': None}
Save the chunks¶
The pipeline as a method to save the chunks and their attributes as a json file. Here is how to use it.
# Let's save the chunks. We can just pass the chunks we obtain and the filename we want
pipeline.save_chunks(chunks, "mychunk.json")