Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

469 Дополнение модели данных для хранения распарсенного текста #496

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

blindsphynx
Copy link
Collaborator

#469

  1. В класс Check добавлено поле parsed_chapters для хранения распарсенного текста ВКР в формате {"header" : "", "start_page" : 1, "text" : ""}
  2. Добавлены функции parse_headers_and_pages и parse_chapters для соответствующего парсинга текста ВКР
  3. Обработанный текст хранится в БД в коллекции checks

@blindsphynx blindsphynx force-pushed the 469_extend_data_storage_model branch from 5207285 to 80b481e Compare February 4, 2024 16:52
@blindsphynx blindsphynx changed the title Дополнение модели данных для хранения распарсенного текста 469 Дополнение модели данных для хранения распарсенного текста Feb 4, 2024
app/server.py Outdated
Comment on lines 219 to 221
parsed_file = DocxUploader()
parsed_file.upload(filepath)
parsed_file.parse()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Поскольку в систему загружаются разные виды/типы файлов (сейчас это и презентации, и doc-документы, и md-файлы) - парсинг файлгов происходит в отдельной функции, вам нужен раздел https://github.com/moevm/document_insight_system/blob/master/app/main/parser.py#L22

Copy link
Collaborator Author

@blindsphynx blindsphynx Apr 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

убрала этот фрагмент, парсинг текста перенесён в create_task (см. последний коммит)

app/server.py Outdated
Comment on lines 222 to 225
parsed_file.make_chapters("VKR")
parsed_file.make_headers("VKR")
chapters = parse_chapters(parsed_file)
chapters_with_headers = parse_headers_and_pages(chapters, parsed_file)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не все docx-документы присылаемые в систему - VKR, тип документа определяется набором критериев (тип документа у отчета либо VKR либо LR) - поэтому parse_headers_and_pages для файла необходимо делать, видимо позднее, где известен тип документа (либо получать и проверять его)

Отсюда пара моментов

  • кажется, что парсинг файла при загрузке файла сильно задержит весь процесс (и ожидания пользователя)
  • для проверок / парсинга содержимого используется отдельная задача / исполнитель (celery worker для celery-задачи, в которой как раз и производится проверка + парсинг: https://github.com/moevm/document_insight_system/blob/master/app/tasks.py#L37)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. парсинг перенесён в celery worker (create_task)
  2. тип документа теперь берётся из check_obj

app/server.py Outdated
@@ -225,7 +236,8 @@ def run_task():
'score': -1, # score=-1 -> checking in progress
'is_ended': False,
'is_failed': False,
'params_for_passback': current_user.params_for_passback
'params_for_passback': current_user.params_for_passback,
'parsed_chapters': chapters_with_headers
Copy link
Collaborator

@HadronCollider HadronCollider Mar 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется, обсуждали с вами, что для обработанного текста и дальнейшей его токенизации (или что вы планируете) нужно завести отдельную коллекцию, а с учетом, что checks - хранит все проверки (не только ВКР), это становится ещё более актуальным

Свяжите с конкретной проверкой добавив поле check_id + filename (чтобы была информация о проверке из которой был получен файл и как он называется - пригодится в дальнейшем)

Плюс ещё, что стоит подумать (если не думали) - пользователи могут загружать

  1. одинаковые файлы по содержанию - пофиксили отступы, чтобы пройти критерий - сам текст не поменялся - стоит ли добавлять его в бд как ещё один документ (который получается сплагиачен с самого себя другого)?
  2. немного различающиеся файлы - поменял подпись таблицы, чтобы пройти критерий - текст уже глобально (по какому-нибудь хэшу) другой, но получаем плагиает 99.99% с самого себя

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. создана новая коллекция parsed_texts, каждый документ в коллекции содержит _id проверки, имя файла и распарсенный по разделам и страницам текст

  2. по поводу одинаковых файлов: при изменении внутри того же самого файла (таблицы, подписи и т. д.) нужно парсить имя этого файла, и если оно совпадает с новой проверкой, то обновлять текст в БД, а не загружать новый. если такой вариант подходит, в ближайшее время добавлю эту проверку

@github-actions github-actions bot added the has conflicts if new merge has conflicts label Apr 9, 2024
add ParsedText in db_types.py &&
move text parsing to create_task
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
has conflicts if new merge has conflicts
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants