Это приложение Flask для чтения и поиска заметок в личной базе знаний. Здесь база знаний означает коллекцию блокнотов Jupyter с ячейками Markdown, которые могут иметь теги и могут содержать ссылки друг на друга. Итак, подход напоминает Зеттелькастен.
К особенностям поисковой системы относятся:
Репозиторий можно использовать либо целиком (с написанными мной примечаниями), либо как пакет Python, предоставляющий интерфейс для ваших заметок.
Самая ценная часть этого проекта — не программное обеспечение. Это сами ноты. При их написании я стараюсь объяснить сложные вещи таким образом, чтобы обеспечить эффективное понимание и как можно меньше двусмысленности. Я пишу в основном о машинном обучении, но появляются и новые темы. Увы, есть потенциальный нарушитель соглашения — на данный момент заметки доступны только на русском языке. Если он вас не устраивает, перейдите в следующий раздел.
Для начала вам необходимо клонировать репозиторий на свой локальный компьютер и установить пакет readingbricks
. Это можно сделать, выполнив следующие команды из терминала:
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 .
Каждый раз, когда вы хотите запустить приложение Flask, запускайте следующие команды:
cd /your/path/readingbricks
source venv/bin/activate
python -m readingbricks
Последняя команда запускает локальный сервер. После того, как все будет готово, откройте веб-браузер и перейдите по адресу 127.0.0.1:5000
. Дополнительную информацию см. в руководстве по интерфейсу.
Чтобы ваша собственная база знаний была совместима с приложением, ее необходимо представить следующим образом:
notes_directory
├── field_one
│ ├── notebook_one.ipynb
│ ├── ...
│ └── notebook_n.ipynb
├── ...
└── field_k
├── notebook_one.ipynb
├── ...
└── notebook_m.ipynb
Здесь поля обозначают независимые области (скажем, машинное обучение, химию, теорию музыки и т. д.). В пределах конкретного поля распределение заметок среди блокнотов Jupyter может быть произвольным. Например, вы можете просто хранить все записи в одном блокноте.
Все ячейки блокнота должны быть ячейками Markdown, начинающимися с ## {title}
. Чтобы пометить заметку, активируйте возможности пометки с помощью «Вид -> Панель инструментов ячейки -> Теги». Чтобы добавить ссылку из одной заметки на другую, можно использовать специальные шаблоны __root_url__/{field}/notes/{note_title}
и __home_url__/notes/{note_title}
. Хотя последний менее многословен, только первый поддерживает межполевые ссылки.
Все идет нормально. База знаний готова, но приложение необходимо настроить для ее использования. Создайте файл JSON где-нибудь, который выглядит следующим образом:
{
"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 "
}
Теперь давайте установим пакет Python:
source /your/path/venv/bin/activate
pip install readingbricks
Остается только запустить приложение:
python -m readingbricks -c /absolute/path/to/config.json
Как и в предыдущем разделе, перейдите по адресу 127.0.0.1:5000
.
Веб-интерфейс вполне понятен.
Единственный нетривиальный элемент управления — это панель поиска, расположенная на главных страницах полей. Он может работать в трёх режимах:
transformers in recommender systems
);tags:
ключевых слов (например, tags: transformers AND recommender_systems
);tags:
формируют запрос на естественном языке, а символы после него образуют выражение тега (например, transformers tags: recommender_systems
).Если хотя бы часть запроса написана на естественном языке, результаты сортируются по TF-IDF. В противном случае порядок результатов зависит от лексикографического положения их записных книжек внутри их полевого каталога и от положения ячеек внутри записных книжек.
Приятного чтения!