antijob / neuro-parser

Other
3 stars 0 forks source link

Feature/clean models #184

Closed SahDoum closed 1 month ago

SahDoum commented 2 months ago

Изменения:

  1. Модели. Логика обработки данных вынесена в другие места. IncidentTypes перенесено в файл models.py
  2. Все прокачки идут через фетчер core/fetcher/Fetcher.py
  3. Обработка инцидентов идет через IncidentPredictor core/incident_predictor/IncidentPredictor.py
  4. Разделены парсинг источников и статей на core/article_parser и core/source_parser. Мотивация -- source_parser ходит в Fetcher прокачивать источники. ArticelParser вызывается из Fetcher'а после скачки
  5. ArticleParser остался практически без изменений.
  6. SourceParser. Парсинги больше не используют lxml. В том числе в CommonParser переписана логика на более читабельную/ясную. Lxml до сих пор используется: для вызова Cleaner и под капотом goose3
  7. Fetcher. Запихан в директорию. Статистика вынесена в отдельный модуль. Добавлена прокачка одиночного урла, прокачка источника
  8. IncidentPredictor. Собрана вся логика, используемая в данный момент для вызова моделей
  9. Разобрана папка server/apps/core/logic. Все, что не ушло в модули выше, перенесено в server/libs/

Итого. Теперь модели занимаются описанием данныъ/записью их в базу данных. Есть несколько модулей.

  1. Fetcher -- для прокачки всего и вся
  2. IncidentPredictor -- для определения любых инцидентов из статей
  3. ArticleParser -- для анализа содержимого скачанных статей
  4. SourceParser -- для скачки и анализа новых новостей
  5. article_index -- для определения дубликатов в реальном времени

Возможные улучшения.

  1. Передизайнить, чтобы парсинг источников сам не ходил в фетчер
  2. Оформить article_index в понятный интерфейс
  3. Fetcher -- вынести все функции типа fetch в отдельный модуль, и там заниматься их логикой. Класс Fetcher только формирует запросы/корутины для пачек запросов. Добавить сигналы, если источник не прокачивается
  4. chat_gpt -- обновить обертку до актуальной версии api
  5. Модели -- для статей-дубликатов хранить информацию, чей они дубликат. Это поможет в отладке
Vldln commented 1 month ago

@SahDoum в целом прогони плз через чат гпт файлы которые сделал и попроси его прологировать нужные места. Это сократит время и сам потом глянь чо как.

Vldln commented 1 month ago

@SahDoum при запуске парсера на локалке с https://www.zabastcom.org/ корректно скачал источники, но при этом все пометил как дупликаты. Что некорректно, так как на пустую базу делалось. Соответственно до создания инцидентов не пошел.

изображение

Vldln commented 1 month ago

@SahDoum


Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/celery/app/trace.py", line 453, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/sentry_sdk/integrations/celery.py", line 200, in _inner
    reraise(*exc_info)
  File "/usr/local/lib/python3.9/site-packages/sentry_sdk/_compat.py", line 54, in reraise
    raise value
  File "/usr/local/lib/python3.9/site-packages/sentry_sdk/integrations/celery.py", line 195, in _inner
    return f(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/celery/app/trace.py", line 736, in __protected_call__
    return self.run(*args, **kwargs)
  File "/code/server/celery/crawler.py", line 33, in fetch_sources
    fetched_count = fetcher.await_all_coroutines()
  File "/code/server/core/fetcher/fetcher.py", line 122, in await_all_coroutines
    return sum(results)
TypeError: unsupported operand type(s) for +: 'int' and 'method'

server.celery.crawler.fetch_sources