Il s'agit d'une application Flask permettant de lire et de rechercher des notes à partir d'une base de connaissances personnelle. Ici, la base de connaissances désigne une collection de blocs-notes Jupyter avec des cellules Markdown qui peuvent avoir des balises et contenir des liens les uns vers les autres. L’approche ressemble donc à celle de Zettelkasten.
Les fonctionnalités du système de recherche incluent :
Le référentiel peut être utilisé soit dans son ensemble (avec des notes écrites par moi), soit en tant que package Python fournissant une interface à vos notes.
La partie la plus précieuse de ce projet n'est pas un logiciel. Ce sont les notes elles-mêmes. Lorsque je les rédige, j'essaie d'expliquer les choses compliquées de manière à permettre une compréhension efficace avec le moins d'ambiguïté possible. J'écris principalement sur l'apprentissage automatique, mais de nouveaux sujets arrivent. Hélas, il existe un problème potentiel : pour l’instant, les notes sont uniquement en russe. Si cela ne vous convient pas, veuillez passer à la section suivante.
Pour commencer, vous devez cloner le référentiel sur votre ordinateur local et installer le package readingbricks
. Cela peut être fait en exécutant les commandes ci-dessous à partir d'un terminal :
cd /your/path/
git clone https://github.com/Nikolay-Lysenko/readingbricks
cd readingbricks
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -e .
Chaque fois que vous souhaitez démarrer une application Flask, exécutez ces commandes :
cd /your/path/readingbricks
source venv/bin/activate
python -m readingbricks
La dernière commande lance un serveur local. Une fois qu'il est prêt, ouvrez votre navigateur Web et accédez à 127.0.0.1:5000
. Voir le guide de l'interface pour plus de détails.
Pour rendre votre propre base de connaissances compatible avec l'application, elle doit être représentée comme suit :
notes_directory
├── field_one
│ ├── notebook_one.ipynb
│ ├── ...
│ └── notebook_n.ipynb
├── ...
└── field_k
├── notebook_one.ipynb
├── ...
└── notebook_m.ipynb
Ici, les champs représentent des domaines indépendants (par exemple, l'apprentissage automatique, la chimie, la théorie musicale, etc.). Dans un champ particulier, la répartition des notes entre les notebooks Jupyter peut être arbitraire. Par exemple, vous pouvez simplement conserver toutes les notes dans un seul bloc-notes.
Toutes les cellules d'un bloc-notes doivent être des cellules Markdown commençant par ## {title}
. Pour baliser une note, activez les fonctions de balisage avec « Affichage -> Barre d'outils de cellule -> Balises ». Pour ajouter un lien d'une note à une autre note, des modèles spéciaux __root_url__/{field}/notes/{note_title}
et __home_url__/notes/{note_title}
peuvent être utilisés. Bien que ce dernier soit moins verbeux, seul le premier prend en charge les liens entre champs.
Jusqu'ici, tout va bien. La base de connaissances est prête, mais l'application doit être configurée pour l'utiliser. Créez un fichier JSON quelque part qui ressemble à ceci :
{
"LANGUAGE" : " en " ,
"FIELDS" : [ " field_one " , " field_two " ],
"FIELD_TO_ALIAS" : { "field_one" : " Field #1 " , "field_two" : " Field #2 " },
"FIELD_TO_SEARCH_PROMPT" : { "field_one" : " the_most_popular_tag " , "field_two" : " the_most_popular_tag " },
"NOTES_DIR" : " /absolute/path/to/notes_directory " ,
"RESOURCES_DIR" : " /any/directory/for/storing/internal/files "
}
Maintenant, installons le package Python :
source /your/path/venv/bin/activate
pip install readingbricks
Il ne reste plus qu'à lancer l'application :
python -m readingbricks -c /absolute/path/to/config.json
Comme dans la section précédente, accédez à 127.0.0.1:5000
.
L'interface Web est assez explicite.
Le seul élément de contrôle non trivial est la barre de recherche située sur les pages d'accueil des champs. Il peut fonctionner selon trois modes :
transformers in recommender systems
) ;tags:
sont requises (par exemple, tags: transformers AND recommender_systems
);tags:
forment une requête en langage naturel et les symboles après forment une expression de balise (par exemple, transformers tags: recommender_systems
).Si au moins une partie d'une requête est en langage naturel, les résultats sont triés par TF-IDF. Sinon, l'ordre des résultats dépend des positions lexicographiques de leurs cahiers dans leur répertoire de champs et de la position des cellules à l'intérieur des cahiers.
Bonne lecture !