Программа принимает папку с документами, извлекает из них текст и метаданные и строит каталог: краткое описание, тезисы и ключевые слова для каждого файла плюс поиск по всему собранному. Ядро: - extract: PDF, DJVU, DOC(X), RTF, ODT, CHM, EPUB, FB2, PPT(X), XLS(X), TXT; PDF передаётся MuPDF потоком в память (работают длинные пути) и ограничен по времени — повреждённый файл иначе чинится минутами; - summarize: экстрактивное реферирование по TF-IDF, посчитанному на самой библиотеке, с лёгким стеммером для русского и английского; - db: SQLite с полнотекстовым индексом FTS5, морфологический поиск с BM25; - scanner: инкрементальный многопоточный обход, счётчик попыток защищает от файла, обрывающего разбор; - report: автономный HTML с поиском, Markdown, JSON, CSV. Интерфейс: - окно PySide6 в тёмной теме: вкладки разбора и поиска, фоновый поток, карточка документа, правка своих ключевых слов; - командная строка: build, scan, analyze, report, search, show, tag, stats; - у каждой папки свой каталог, последняя обработанная запоминается. Сборка: scripts/build_exe.py даёт Catalogizer.exe в Windows и Catalogizer.app в macOS, иконки .ico и .icns рисуются кодом. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
52 lines
1.8 KiB
Bash
Executable File
52 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build a standalone Catalogizer.app on macOS: double-click this file in Finder.
|
|
# Any arguments are passed to scripts/build_exe.py (--console, --cli).
|
|
# --setup create .venv and install PySide6 + pymupdf + PyInstaller first
|
|
#
|
|
# PyInstaller cannot cross-compile: run this on the Mac itself.
|
|
set -u
|
|
|
|
MODULE_ROOT="$(cd "$(dirname "$0")" && pwd)"
|
|
VENV_PYTHON="$MODULE_ROOT/.venv/bin/python3"
|
|
BUILD_SCRIPT="$MODULE_ROOT/scripts/build_exe.py"
|
|
PACKED_APP="$MODULE_ROOT/dist/Catalogizer.app"
|
|
PACKAGES="PySide6 pymupdf pyinstaller"
|
|
|
|
setup() {
|
|
echo "Preparing the build environment in .venv - this takes a few minutes."
|
|
if [ ! -x "$VENV_PYTHON" ]; then
|
|
python3 -m venv "$MODULE_ROOT/.venv" || {
|
|
echo "Failed to create .venv. Is python3 installed?"; exit 1; }
|
|
fi
|
|
"$VENV_PYTHON" -m pip install --upgrade pip
|
|
"$VENV_PYTHON" -m pip install $PACKAGES || {
|
|
echo "Failed to install $PACKAGES."; exit 1; }
|
|
}
|
|
|
|
if [ "${1:-}" = "--setup" ]; then
|
|
setup
|
|
shift
|
|
elif [ ! -x "$VENV_PYTHON" ]; then
|
|
echo "Local .venv is missing. Starting the one-time setup."
|
|
setup
|
|
fi
|
|
|
|
# A running build keeps its own files locked and PyInstaller fails halfway.
|
|
if pgrep -x Catalogizer >/dev/null 2>&1; then
|
|
echo "Catalogizer is running and cannot be overwritten."
|
|
echo "Quit the application and start the build again."
|
|
exit 1
|
|
fi
|
|
|
|
"$VENV_PYTHON" "$BUILD_SCRIPT" "$@" || {
|
|
echo; echo "Build failed. See README.md, section about the app."; exit 1; }
|
|
|
|
# Self-check: the packed build has no console to show a traceback.
|
|
if [ -d "$PACKED_APP" ]; then
|
|
"$PACKED_APP/Contents/MacOS/Catalogizer" --check || {
|
|
echo; echo "The build starts but the main window is broken."; exit 1; }
|
|
fi
|
|
|
|
echo
|
|
echo "Done. Start it with CATALOG.command or open dist/Catalogizer.app."
|