Проект представляет собой автоматизированный пайплайн для сбора, обработки и анализа научных статей из журнала «Онтология проектирования». Пайплайн извлекает метаданные и тексты из PDF-файлов, извлекает и оценивает ключевые слова, генерирует реферативные аннотации и строит семантический граф публикаций и терминов с автоматическим экспортом в локальную графовую СУБД Neo4j.
- Парсинг архива журнала (
pars_news.py): Автоматический сбор ссылок на выпуски и тома журнала, скачивание полнотекстовых PDF-статей в локальную директорию. - Обработка PDF и построение корпуса (
modules/corpus.py): Извлечение текстов из PDF с фильтрацией колонтитулов, склейка переносов слов, разделение статьи на метаданные (название, авторская аннотация, ключевые слова) и основной текст. - Извлечение ключевых слов (
modules/keywords.py):- Морфологический анализ и лемматизация на русском языке с помощью
pymorphy3. - Извлечение ключевых слов методами TF-IDF и KeyBERT (с использованием легковесной семантической модели
mlsa-iai-msu-lab/sci-rus-tiny). - Сравнительная оценка качества извлечения относительно авторских ключевых слов.
- Морфологический анализ и лемматизация на русском языке с помощью
- Реферирование (
modules/summarization.py):- Выделение предложений и фильтрация шума.
- Метод MMR (Maximal Marginal Relevance) с весами ключевых слов для генерации сжатого содержания статьи.
- Оценка качества реферирования относительно авторских аннотаций по метрикам ROUGE-1, ROUGE-2, ROUGE-L.
- Графовый анализ и экспорт (
modules/graph.py):- Экспорт графа в CSV и генерация скрипта импорта Cypher.
- Автоматическая заливка публикаций и извлеченных терминов в локальную базу данных Neo4j.
- Динамический поиск и визуализация похожих публикаций через граф в веб-интерфейсе.
├── neo4j-community-5.26.0/ # Локальный Neo4j Community Server (входит в репозиторий)
├── articles/ # Папка со скачанными PDF-статьями
├── corpus/ # JSON-файлы статей и сводный corpus.json
├── graph_export/ # CSV-файлы графа и скрипт import_csv.cypher
├── scripts/ # Скрипты запуска
│ ├── run_neo4j.bat # Запуск локального сервера Neo4j
│ ├── run_neo4j.sh # Запуск локального сервера Neo4j на Linux
│ └── ...
├── static/ # Веб-интерфейс (HTML, CSS, JS)
├── modules/ # Модули пайплайна
│ ├── corpus.py # Предобработка PDF и сбор корпуса
│ ├── keywords.py # Извлечение и оценка ключевых слов
│ ├── summarization.py # Реферирование и оценка ROUGE
│ ├── graph.py # Построение графа и интеграция с Neo4j
│ ├── pars_news.py # Парсер архива журнала
│ └── web_app.py # Приложение Flask
├── run_pipeline.py # Главный запуск пайплайна (с автозапуском Neo4j)
├── web_app.py # Быстрый запуск веб-интерфейса
├── requirements.txt # Список зависимостей
├── .env # Переменные окружения и пароли (включается в Git)
└── README.md # Документация проекта
Убедитесь, что у вас установлен Python 3.10+ и Java JDK 17.
git clone https://github.com/DeFoba/extra-term-graph.git
cd extra-term-graph
pip install -r requirements.txtПроект поставляется с преднастроенным сервером Neo4j 5 Community Edition прямо в репозитории для быстрого развёртывания.
- Запуск сервера выполняется автоматически при старте
run_pipeline.py. - Вы также можете запустить его вручную через файл
scripts/run_neo4j.bat(илиscripts/run_neo4j.shна Linux). - Вход в Neo4j Browser (
http://localhost:7474):- Database user:
neo4j - Password:
extra_term_graph_2026(находится в.env)
- Database user:
Вы можете запускать пайплайн целиком или по отдельным шагам с помощью run_pipeline.py.
-
Полный цикл анализа, автозапуск Neo4j и запуск веб-интерфейса:
python run_pipeline.py --step all
-
Запуск только веб-интерфейса:
python run_pipeline.py --step web
Или просто
python web_app.py.
Document: Научная статья.- Свойства:
id(имя файла),title(название),annotation(авторская аннотация),summary_tfidf,summary_keybert(рефераты).
- Свойства:
Keyword: Термин (нормализованная лемма).- Свойства:
id(нормализованная лемма),name(написание термина с большой буквы),methods.
- Свойства:
(d:Document)-[:HAS_KEYWORD {method, weight}]->(k:Keyword): Статья содержит термин. Свойства: метод извлечения (author,tfidf,keybert) и вес термина.