Skip to main content

Flask app for reading and searching notes from a personal knowledge base

Project description

Build Status codecov Maintainability PyPI version

ReadingBricks

Overview

It is a Flask app for reading and searching notes from a personal knowledge base. Here, knowledge base means a collection of Jupyter notebooks with Markdown cells which may have tags and may contain links to each other. So, the approach resembles Zettelkasten.

Features of the search system include:

  • Separate spaces for fields of knowledge
  • Search by single tag
  • Search by expressions consisting of tags, logical operators, and parentheses
  • Full-text search with TF-IDF
  • Search within kNN-index built on vector representations of notes

The repository can be used either as a whole (with notes written by me) or as a Python package providing an interface to your notes.

Usage as existing knowledge base

The most valuable part of this project is not a software. It is the notes itself. When writing them, I try to explain complicated things in a way that allows efficient grasping with as less ambiguity as possible. I write mostly on machine learning, but new topics are coming. Alas, there is a potential dealbreaker — as of now, the notes are in Russian only. If it does not suit you, please go to the next section.

To start with, you need to clone the repository to your local machine and install readingbricks package. This can be done by running the below commands from a 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 .

Every time you want to start a Flask application, run these commands:

cd /your/path/readingbricks
source venv/bin/activate
python -m readingbricks

The last command launches a local server. After it is ready, open your web browser and go to 127.0.0.1:5000. See interface guide for further details.

Usage as an interface

To make your own knowledge base compatible with the app, it must be represented as follows:

notes_directory
├── field_one
│   ├── notebook_one.ipynb
│   ├── ...
│   └── notebook_n.ipynb
├── ...
└── field_k
    ├── notebook_one.ipynb
    ├── ...
    └── notebook_m.ipynb

Here, fields stand for independent domains (say, machine learning, chemistry, music theory, etc.). Within a particular field, distribution of notes among Jupyter notebooks can be arbitrary. For example, you may simply keep all notes in a single notebook.

All cells of a notebook must be Markdown cells starting with ## {title}. To tag a note, activate tagging facilities with 'View -> Cell Toolbar -> Tags'. To add link from one note to an other note, special patterns __root_url__/{field}/notes/{note_title} and __home_url__/notes/{note_title} can be used. While the latter is less verbose, only the former supports cross-field links.

So far so good. The knowledge base is ready, but the app must be configured to use it. Create somewhere a JSON file that looks like this:

{
  "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"
}

Now, let us install the Python package:

source /your/path/venv/bin/activate
pip install readingbricks

All that remains is to launch the app:

python -m readingbricks -c /absolute/path/to/config.json

As in the previous section, go to 127.0.0.1:5000. Known bug is that some minor interface elements are in Russian regardless of notes language. I am still seeking an elegant and maintainable solution to this problem.

Interface guide

The web interface is quite self-explanatory.

The only non-trivial control element is search bar which is located at home pages of fields. It can operate in three modes:

  • query in natural language (e.g., transformers in recommender systems);
  • query as expression consisting of tags, logical operators, and parentheses — special keyword tags: is required (e.g. tags: transformers AND recommender_systems);
  • combination of above options — symbols before tags: form natural language query and symbols after it form tag expression (e.g., transformers tags: recommender_systems).

If at least part of a query is in natural language, results are sorted by TF-IDF. Else, order of results depends on lexicographic positions of their notebooks inside their field directory and on positions of cells inside notebooks.

Enjoy reading!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

readingbricks-0.2.0.tar.gz (24.2 kB view details)

Uploaded Source

Built Distribution

readingbricks-0.2.0-py3-none-any.whl (24.6 kB view details)

Uploaded Python 3

File details

Details for the file readingbricks-0.2.0.tar.gz.

File metadata

  • Download URL: readingbricks-0.2.0.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.12

File hashes

Hashes for readingbricks-0.2.0.tar.gz
Algorithm Hash digest
SHA256 76e098d47443438e1c0cbd8f97244ef58e7100529f67bbb596510ad4a211123b
MD5 c0a37e229d8a05572ecc0d845dd0079d
BLAKE2b-256 2141cff80a42ca829d8e87063d32bc8cf17a932d5101c6d6d651c23294add910

See more details on using hashes here.

File details

Details for the file readingbricks-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for readingbricks-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4f42c8b26e582514671ffcfd219e8aa9882ba6c5c3431f4af09853cb3a15b250
MD5 d48f51d8ed12e5d0f83f5094dad5f694
BLAKE2b-256 72dfd0fb8cc75fb22a875a3bcdf08e49132bfc31aa10bfcd12a2b21d1e63acca

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page