Skip to content

terratensor/common_library_parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Парсер общей библиотеки docx/postgres/manticore

Минимальные требования системы 2 CPU 2Gb MEM

  • Обязательное ПО для запуска Docker, Git
  • Необязательные программы Postman, DBEeaver, HeidiSQL

Пример файла конфигурации подсмстемы wsl .wslconfig

# Settings apply across all Linux distros running on WSL 2
[wsl2]
memory=2GB 
processors=2
swap=2GB

Предполагаем, что стабильных результатов можно достичь и на системах с более низкими параметрами, но именно на вышеуказнной конфигурации были получены успешные результаты тестирования работы парсера docx файлов и работы indexer Manticoresearch

Тест проводился на наборе docx файлов общей библиотеки

  • Количествао файлов — 7733 шт.
  • Общий размер docx файлов 3,08 Гб
  • Размер volume БД postgres после обработки файлов — 13,1 Гб
  • Размер volume поискового индекса мантикоры — 22,7 Гб

Итого для теста, после установки всех необходимых программ, необходимо иметь на диске не менее 39 Гб свободного места

Скриншоты тестового запуска, состояния параметров системы

2023-07-08_13-45-11 2023-07-08_13-45-23

Подготовка к запуску

  1. Установить Docker для Windows https://docs.docker.com/desktop/install/windows-install/

  2. Установить git для windows https://git-scm.com/downloads При установке можно оставить все по умолчанию

  3. Установить программу Postman https://www.postman.com/downloads/

  4. Установить программу DBeaver Community, необходима для просмотра данные postgres БД в графическом интерфейсе https://dbeaver.io/
    Вместо DBeaver можно использовать HeidiSQL https://www.heidisql.com/ работает только на Windows

После установки необходимых программ, нажмите меню пуск, найдите git консоль Git CMD, запустите Git CMD

Выберите или создайте папку с проектами, например c:\terratensor,

Для создания папки наберите в Git CMD консоли:

mkdir ./terratensor

Выберите созданную папку, наберите в Git CMD консоли:

cd ./terratensor

Для клонирования репозитория terratensor/common_library_parser, наберите в Git CMD консоли:

git clone https://github.com/terratensor/common_library_parser.git

Увидите сообщение в консоли об успешном клонировании:

Cloning into 'common_library_parser'...
fatal: helper error (-1): User cancelled dialog.
Username for 'https://github.com':
c:\terratensor>git clone https://github.com/terratensor/common_library_parser.git
Cloning into 'common_library_parser'...
remote: Enumerating objects: 20, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (15/15), done.
Receiving objects: 100% (20/20), 6.48 KiB | 6.48 MiB/s, done.
Resolving deltas: 100% (4/4), done.

После наберите в Git CMD консоли:

cd ./common_library_parser

Затем наберите в консоли

ls -la

Увидите следующую структуру папки:

total 32
drwxrwx---+ 1 username Domain Users    0 Jun 22 13:30 .
drwxrwx---+ 1 username Domain Users    0 Jun 22 13:30 ..
drwxrwx---+ 1 username Domain Users    0 Jun 22 13:30 .git
-rwxrwx---+ 1 username Domain Users 8880 Jun 22 13:30 README.md
drwxrwx---+ 1 username Domain Users    0 Jun 22 13:30 docker
-rwxrwx---+ 1 username Domain Users  957 Jun 22 13:30 docker-compose.yml
drwxrwx---+ 1 username Domain Users    0 Jun 22 13:30 process

Скачайте последнюю версию парсера book-parser-common.exe. Ссылка на файл находится в секции Assets страницы описания релиза

https://github.com/terratensor/book-parser/releases/latest

Сохраните book-parser-common.exe в папке с проектом ./common_library_parser

Далее запустите Windows Docker (через меню пуск)

После запуска необходимо проверить, что нет запущенных контейнеров с manticoresearch (меню containers), если есть остановить их или удалить, иначе будет конфликт доступа к портам.

В консоли Git CMD, где ранее создали папку и клонировали репозиторий для запуска контейнера с парсером common_library_parser набрать:

docker-compose down --remove-orphans
docker compose up --build -d

запустится база данных postgres и manticore search

  • Будет создана локальная БД с именем common-library
  • Имя пользователя app
  • Пароль secret
  • Порт для подключения к БД 54322

Эти настройки можно увидеть или изменить в файле docker-compose.yml

    environment:
      APP_ENV: dev
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: common-library

Скопируйте в папку process docx файлы для обработки (7733).

Папка по умолчанию, где должны быть размещены docx для обработки файлов — process, с помощью параметра -o можно указать любой другой путь к нужной папке, в конце пути обязательно поставить слэш

Запустите book-parser-common.exe, если файлы скопированы в папку process:

book-parser-common.exe

Или запустите book-parser-common.exe с параметром -o и укажите нужную папку, где расположены файлы для обработки, например, для другой своей папки /militera/mt/:

book-parser-common.exe -o ./militera/mt/

Так же при необходимости можно указать опцию для склейки параграфов до минимальной границы и изменить значение по умолчанию. По умолчанию парсер склеивает параграфы до границы 1200 символов, это соответствует записи -m 1200. Для изменения значения, например до 1000 символов, наберите в консоли:

book-parser-common.exe -m 1000

Если указать значение 0 для опции -m, то склейка параграфов производиться не будет:

book-parser-common.exe -m 0

Внимание! Со значением опции -m 0, в базе данных вероятно будет очень много мелких параграфов. Например, без опции склейки параграфов в дата сете 7733 книги было получено более 22 миллионов параграфов, а при применении значения по умолчанию -m 1200, в базе уже было около 4 миллионов параграфов.

Будет произведена обработка docx файлов и запись их в таблицы БД:

db_pg_books
    id, name, filename, created_at, updated_at, deleted_at

db_pg_paragraphs
    id, uuid, book_id, book_name, text, position, length, created_at, updated_at, deleted_at 

При обработке файлов в консоли после каждой успешно обработанной книги будет появляться сообщение с наименованием и номером файла:

2023/06/22 11:11:52 Яроцкий. На всех фронтах.docx #8469 done
2023/06/22 11:11:52 Ярошенко. Повторение пройденного.docx #8470 done

Иногда в процессе на экран могут вылетать большие «портянки» текста с параграфами — это лог медленного запроса, который выполнялся в БД более 200 мс, не обращайте на это внимание, это информационное сообщение, книга и параграфы в этом случае все равно сохранены в БД.

book-parser/common/db/sql/pgGormStore/paragraph_store.go:83 ←[33mSLOW SQL >= 200ms
←[0m←[31;1m[293.917ms] ←[33m[rows:856]←[35m INSERT INTO "db_pg_paragraphs" ("book_id","book_name","text","position","length","created_at","updated_at","deleted_at") VALUES (6664,'Дёниц К. Десять лет и двадцать дней','<p>Вначале все шло по плану. 24 мая 1943 года «U-441» была атакована «Сандерлендом», который был довольно быстро сбит. Однако из-за сбоя в кормовой четрехствольной установке самолет успел сбросить бомбы. Поэтому подлодка «U-441» сама получила повреждения и была вынуждена вернуться на базу.</p>',3000,294,'2023-06-22 11:08:12.521','2023-06-22 11:08:12.521',NULL),(6664,'Дёниц К.
...
,(6664,'Дёниц К. Десять лет и двадцать дней','<p>H</p>',3855,8,'2023-06-22 11:08:12.521','2023-06-22 11:08:12.521',NULL) RETURNING "id"←[0m

Если в процессе обработки файлов будут возникать ошибки чтения файлов, например, неверный формат docx, или ошибки в структуре xml документа, то парсер пропустит такие файлы и запишет наименования этих файлов и сообщение об ошибке в спциальный error log файл, который будет создан после обработки всех файлов:

12-28-59_20072023_error_log.txt

[Content_Types].xml, the file is not supported
~$скин И.А. На пути к перелому — копия.docx, zip: not a valid zip file
Лассуэлл Гарольд — Техника пропаганды в мировой войне — копия.docx, XML syntax error on line 2: illegal character code U+000B

Время обработки 7730 docx файлов примерно 20 минут.

После обработки всех файлов в консоли будет завершающее сообщение:

...
2023/06/22 11:11:53 all files done

Для запуска индексации данных из БД в мантикору запустите manticore indexer:

docker exec -it book-parser-manticore indexer common_library
Время обработки данных из БД (22 726 997 параграфов) примерно 16 минут

2023-07-08_13-42-22

После того как данный будут проиндексированы необходимо перезапустить контейнеры common_library_parser, сделать это можно командами:

docker compose down
docker compose up -d

Для просмотра результатов можно запустить программу Postman

В программе Postman сделать вкладку и в адресе указать:

POST localhost:9308/search

image

Ниже выбрать Body, ниже raw, рядом JSON

В поле ниже скопировать запрос:

{
    "index": "common_library",
    "highlight": {
        "fields": [
            "text"
        ],
        "limit": 0,
        "no_match_size": 0
    },
    "max_matches": 353545,
    "limit": 50,
    "offset": 0,
    "query": {
        "bool": {
            "must": [
                {
                    "query_string": "концепция"
                }
            ]
        }
    }
}

В match_phrase, вместо "концепция", можно набрать любой поисковый запрос в кавычках, например "бахмут"

"limit" - кол-во записей на странице "offset" - смещение от начала.

Если надо посмотреть следующие 100 записей, изменить offset, например:

"limit": 100
"offset": 100

Дополнительные сведения:

Остановка контейнеров book-parser-common

docker-compose down --remove-orphans

Запуск контейнеров book-parser-common из папки проекта

docker compose up --build -d

Первый запуск manticore indexer, если еще не создана таблица common_library

docker exec -it book-parser-manticore indexer common_library

Повторный запуск manticore indexer, если таблица существует, для переиндексации

docker exec -it book-parser-manticore indexer common_library --rotate

Бэкап postgres БД:

docker exec -it book-parser-postgres bash
pg_dump --dbname=book-parser --username=app --host=postgres-book-parser | gzip -9 > book-parser-backup-filename.gz

Скопировать файл бэкапа в контейнер докера для восстановления БД, распаковать из gz, запустить загрузку бэкапа в БД

cp book-parser-backup-filename.gz book-parser-postgres:app/book-parser-backup-filename.gz
gzip -d book-parser-backup-filename.gz
psql -U app -d lib < book-parser-backup-filename.sql

Остановка и удаление БД. ВНИМАНИЕ ДАННЫЕ БУДУТ УДАЛЕНЫ.

docker compose down -v --remove-orphans

Опции командной строки

-h --help помощь
-b, --batchSize int    размер пакета по умолчанию (default batch size) (default 3000)
-m, --minParSize int   граница минимального размера параграфа в символах, если 0, то без склейки параграфов (default 1200)
-o, --output string    путь хранения файлов для обработки (default "./process/")
Сборка бинарника, нужно для разработки:
GOOS=windows GOARCH=amd64 go build -o ./book-parser-gorm.exe ./common/cmd/main.go

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published