Skip to content

solvek/Indexer

Repository files navigation

Індексатор архівних документів

Програма проходить папку зі сканами (фото сторінок метричних книг, актів тощо), відправляє їх у Google Gemini і зберігає знайдені прізвища, імена та роки в локальну базу на вашому комп’ютері. Є готові файли під Windows, Linux і macOS.


Що знадобиться

  1. Папка зі сканами на диску (звичайні зображення: JPG, PNG тощо).
  2. Ключ Gemini APIяк отримати безкоштовно (потрібний обліковий запис Google).
  3. Хвилина часу, щоб завантажити програму і створити маленький текстовий файл з ключем.

Зазвичай справи з архівів спочатку скачують через браузерне розширення «Справна Качка», розпаковують у папки на диску — і вже цю папку вказують у команді запуску (нижче). Одну й ту саму програму можна запускати багато разів для різних папок.


Крок 1. Завантажити програму

  1. Відкрийте сторінку Releases (останній випуск).
  2. Завантажте один файл, який підходить вашій системі:
    • у назві є linux — для більшості дистрибутивів Linux;
    • windows — для Windows (файл із розширенням .exe);
    • macos — для Mac.
  3. Створіть окрему папку (наприклад Indexer на Робочому столі) і покладіть туди лише цей завантажений файл. Далі всі дії робимо з цієї папки.

Далі в командах використовуйте точну назву вашого файлу зі сторінки Release, наприклад:

  • Linux: ./indexer-v0.2-linux-x86_64
  • macOS: ./indexer-v0.2-macos
  • Windows: .\indexer-v0.2-windows-x86_64.exe у PowerShell (у cmd можна без .\ на початку)

На Linux і Mac один раз дайте право на запуск (у терміналі, уже в папці з програмою):

chmod +x ./indexer-v0.2-linux-x86_64

(замініть ім’я файлу на своє.)


Крок 2. Файл .env із ключем

У тій самій папці, де лежить програма, має з’явитися текстовий файл .env із вашим ключем.

Якщо ви не клонували репозиторій, найпростіше завантажити готовий шаблон і потім відкрити його в Блокноті чи іншому редакторі:

Linux або Mac (Термінал):

cd /шлях/до/вашої/папки/Indexer
curl -fsSL -o .env https://raw.githubusercontent.com/solvek/Indexer/main/sample.env

Windows (PowerShell) — відкрийте PowerShell, перейдіть у папку з .exe:

cd $HOME\Desktop\Indexer
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/solvek/Indexer/main/sample.env" -OutFile .env

Далі відкрийте файл .env і в рядку GEMINI_API_KEY= після знака = вставте свій ключ (без лапок і пробілів). Решту рядків для першого разу можна не змінювати.

Якщо ви вже склонували цей репозиторій, достатньо: cp sample.env .env і так само вписати ключ.


Крок 3. Перший запуск

Відкрийте термінал у папці з програмою:

  • Windows: у Провіднику відкрийте папку → адресний рядок → введіть powershell і Enter.
  • Mac: програма «Термінал» → команда cd і перетягніть папку в вікно, Enter.

Команда завжди будує так: ім’я програми, потім назва бази, потім шлях до папки зі сканами.

  • Назва бази — довільне коротке ім’я (латиниця без пробілів зручніше), наприклад lutsk. Програма створить файл бази в підпапці data поруч із собою.
  • Шлях до папки — там, де лежать ваші зображення (можна з підпапками).

Приклад (Linux):

cd ~/Desktop/Indexer
./indexer-v0.2-linux-x86_64 lutsk /home/я/Документи/Метрика_1860

Приклад (Mac) — те саме, але ім’я файлу з macos, наприклад ./indexer-v0.2-macos.

Приклад (Windows, PowerShell):

cd $HOME\Desktop\Indexer
.\indexer-v0.2-windows-x86_64.exe lutsk C:\Users\Я\Documents\Метрика_1860

Якщо все добре, у терміналі з’являться повідомлення про обробку файлів; у папці з’явиться data/lutsk.db (або подібне ім’я).

Якщо Mac «не дає відкрити» програму

Це буває у файлів без підпису Apple: Системні параметри → Конфіденційність і безпека — дозволити запуск, або правою кнопкою по файлу → Відкрити → підтвердити.


Приклади з параметрами

Нижче для Linux і Mac використано приклад імені ./indexer-v0.2-linux-x86_64підставте свою назву зі сторінки Release (на Mac це буде файл з macos у назві). Для Windows показано окремий рядок з .exe.

Обробити не більше 20 нових сканів (зручно для проби):

./indexer-v0.2-linux-x86_64 my_project /шлях/до/сканів --limit 20
.\indexer-v0.2-windows-x86_64.exe my_project "C:\шлях\до\сканів" --limit 20

Дати моделі розширений промпт (регіон, тип книги):

./indexer-v0.2-linux-x86_64 my_project /шлях/до/сканів --extended-prompt "Волинь, метричні книги"

Лише один файл у підпапці:

./indexer-v0.2-linux-x86_64 my_project /шлях/до/сканів --files "Справа_12/scan_001.jpg"

Після обробки додати дані в CSV (формат файлу):

./indexer-v0.2-linux-x86_64 my_project /шлях/до/сканів --csv

Кілька опцій разом:

./indexer-v0.2-linux-x86_64 my_project /шлях/до/сканів --limit 10 --csv --verbose

Докладніші повідомлення в терміналі:

./indexer-v0.2-linux-x86_64 my_project /шлях/до/сканів --verbose

На Windows у всіх цих прикладах замініть початок рядка на .\indexer-v0.2-windows-x86_64.exe (свою версію з Release) і шлях до папки пишіть як C:\....


Довідка: усі параметри

Що вводите За замовчуванням Що робить
Перший аргумент після програми (dbname) Ім’я або шлях до SQLite; коротке ім’я зазвичай потрапляє в папку data/ поруч із програмою
Другий аргумент (source) Папка зі сканами на диску; можна також URL папки Google Drive — докладніше
--files усі файли рекурсивно Обмежити список: один файл, або Папка/, або Папка/**
--limit без обмеження Скільки сканів обробити за цей запуск
--rewrite / --no-rewrite без перезапису Чи переобробляти вже збережені у базі файли
--extended-prompt Розширений промпт для моделі (регіон, тип документів або ім’я файлу з prompts/)
--model з .env Інша модель Gemini, ніж у .env
--temperature 0.1 «Креативність» відповіді моделі від 0 до 1
--csv вимкнено Експорт у CSV — опис
--request-delay 0 Пауза в секундах після кожного звернення до моделі (рідко потрібно при великій кількості сканів)
--verbose вимкнено Більше повідомлень у термінал

Базовий і розширений промпти — опис у docs/prompts.md; короткі приклади CLI — usage.

Змінні Google Drive у файлі .env потрібні лише якщо другим аргументом ви вказуєте посилання на папку в Drive, а не локальний шлях.


Зразки запитів до бази даних

SELECT s.folder, s.number, p.surname, p.name, json_extract(p.meta, '$.father') AS father, json_extract(p.meta, '$.yob') AS yob,
      p.meta, s.file, s.meta
FROM persons p JOIN scans s ON s.id = p.scan_id
ORDER BY p.surname
SELECT surname, name, json_extract(meta, '$.father') AS father, json_extract(meta, '$.yob') AS yob
FROM persons
ORDER BY surname

Де читати далі

About

Автоматичний індексатор людей з архівних документів

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages