An ETL pipeline for collecting, analyzing, and visualizing information about new religious movements in the Czech Republic. Features ethical web scraping, NLP analysis, fuzzy entity matching, and structured data storage.
License: GNU General Public License v3.0 (GPLv3)
- Ethical web scraping with rate limiting and robots.txt respect
- Automated data collection from multiple sources:
- RSS feeds from specialized websites
- REST APIs (Wikipedia, SOCCAS)
- Social media APIs (Reddit, X/Twitter)
- Web scraping for news aggregators
- Natural Language Processing:
- Multilingual support: Czech (Stanza) and English (Stanza) with automatic language detection
- Named Entity Recognition via Hugging Face Transformers (WikiNeural, BioBERT)
- Sentiment analysis via multilingual BERT models (nlptown/bert-base-multilingual)
- Fuzzy entity matching: 70% similarity threshold with 4-tier matching (direct name → direct alias → fuzzy name → fuzzy alias)
- Movement classification and relationship analysis
- Academic document processing (PDF, DOC, DOCX text extraction)
- 139 known religious movements with alias matching
- Structured data storage in PostgreSQL/SQLite
- Export capabilities for further analysis and Power BI integration
- Comprehensive testing suite with pytest
- Type-safe code with Pylance/Pyright integration
- Python 3.10+ - Core programming language
- Mamba/Conda - Package and environment management
- PostgreSQL - Primary database (with SQLite support)
- Scrapy 2.14+ - Web scraping framework with ethical settings
- Scrapy-Playwright 0.0.46+ - JavaScript-rendered page scraping (iDNES archiv)
- Feedparser 6.0+ - RSS/Atom feed parsing
- Requests 2.31+ - HTTP library
- Stanza 1.8+ - Czech language NLP pipeline (tokenization, POS, NER, lemmatization)
- Hugging Face Transformers 4.52+ - Advanced NLP models for sentiment analysis
- spaCy 3.7+ (legacy) - Alternative NLP toolkit
- SQLAlchemy 2.0+ - Database ORM with PostgreSQL/SQLite support
- pandas 2.3+ - Data manipulation and CSV processing
- PyMuPDF (fitz) 1.23+ - PDF text extraction
- python-docx 1.1+ - Word document processing (.doc, .docx)
- FuzzyWuzzy 0.18+ - Fuzzy string matching for entity resolution
- PRAW 7.8+ - Reddit API client
- Tweepy 4.14+ - X (Twitter) API client
- pytest - Testing framework with mocking
- Pyright/Pylance - Type checking and IDE support
- PyYAML - Configuration management
- python-dotenv 1.0+ - Environment variable management
project_infinit/
├── extracting/ # Web scrapers and configurations
│ ├── sources_config.yaml # Centralized source configuration
│ ├── spider_settings.py # Ethical scraping settings
│ ├── keywords.py # Keyword filtering utilities
│ ├── config_loader.py # YAML configuration loader
│ ├── rss_spider.py # Universal RSS feed scraper
│ ├── api_spider.py # Universal API scraper
│ ├── social_media_spider.py # Social media API scraper
│ ├── google_spider.py # Google News scraper
│ ├── medium_seznam_spider.py # Medium/Seznam scraper
│ └── __pycache__/ # Python bytecode
├── processing/ # Data processing and analysis
│ ├── nlp_analysis.py # NLP pipeline with Czech support
│ ├── import_csv_to_db.py # CSV database ingestion utilities
│ ├── import_pdf_to_db.py # PDF processing and ingestion
│ ├── manual_csv.py # Manual CSV processing utilities
│ └── __pycache__/ # Python bytecode
├── database/ # Database layer
│ ├── db_loader.py # SQLAlchemy models and connections
│ ├── models/ # Database models
│ │ ├── source.py # Source model
│ │ ├── movement.py # Movement model
│ │ ├── alias.py # Alias model
│ │ ├── location.py # Location model
│ │ ├── source_quality.py # Source quality model
│ │ ├── geographic_analysis.py # Geographic analysis model
│ │ ├── temporal_analysis.py # Temporal analysis model
│ │ └── __init__.py # Models init
│ ├── schema.sql # Database schema
│ ├── views.sql # Database views
│ ├── deduplicate_sources.py # Source deduplication utilities
│ ├── ANALYTICS_README.md # Analytics documentation
│ ├── DEDUPLICATION_README.md # Deduplication documentation
│ ├── migrate_analytics.py # Analytics migration script
│ ├── migrations/ # Database migrations
│ └── __pycache__/ # Python bytecode
├── testing/ # Test suite
│ ├── test_*.py # Unit tests for all modules
│ ├── conftest.py # Pytest configuration
│ ├── README.md # Testing documentation
│ └── __pycache__/ # Python bytecode
├── export/ # Output files and exports
│ ├── csv/ # Scraped and processed CSV data
│ └── to_powerbi.py # Power BI export utilities
├── data/ # Application data directory
├── academic_data/ # Academic documents (PDF, DOC, DOCX)
│ └── README.md # Academic data documentation
├── csv_manual/ # Manual CSV imports
│ └── README.md # Manual CSV documentation
├── nnh-db/ # Docker database setup
│ ├── docker # Docker files
│ └── docker-compose.yml # Docker Compose configuration
├── .github/ # GitHub configuration
│ └── copilot-instructions.md # AI assistant instructions
├── config.py # Database and app configuration
├── config_loader.py # Configuration loader utility
├── csv_utils.py # CSV utility functions
├── main.py # Main ETL orchestrator
├── seed_movements.py # Seed movements and aliases utility
├── environment.yml # Conda/Mamba environment
├── pyrightconfig.json # Pyright type checking config
├── .gitignore # Git ignore patterns
├── LICENSE # Project license
├── SOCIAL_MEDIA_SETUP.md # Social media API setup guide
└── readme.md # This file
git clone https://github.com/Adam8eifert/project_infinit.git
cd project_infinit
# Create Conda environment from environment.yml
mamba create -n project_infinit -y --file environment.yml
# or with conda:
# conda env create -f environment.yml
# Activate environment
mamba activate project_infinit
# or: conda activate project_infinitNote: This project uses Conda/Mamba exclusively. Traditional pip/venv setup is not supported due to complex dependencies (Playwright, Stanza models, etc.).
# Download Stanza Czech model (primary NLP pipeline)
python -c "import stanza; stanza.download('cs')"
# Optional: Download spaCy Czech model (legacy support)
python -m spacy download cs_core_news_mdThe project supports both PostgreSQL and SQLite.
# config.py (default configuration)
DB_URI = "sqlite:///data/project_infinit.db"For PostgreSQL:
DB_URI = "postgresql+psycopg2://username:password@localhost/nsm_db"To enable Reddit and X (Twitter) data collection:
# Copy environment template
cp .env.example .env
# Edit .env with your API keys (see .env.example for instructions)# Run complete ETL pipeline
python main.py
# Or run individual components
scrapy runspider extracting/rss_spider.py
scrapy runspider extracting/api_spider.py
scrapy runspider extracting/social_media_spider.py-
Data Collection (
run_spiders())- RSS feeds from 12+ specialized and mainstream sources
- REST APIs (Wikipedia, SOCCAS Encyclopedia)
- Social media posts from Reddit and X/Twitter
- Web scraping for news aggregators (Google News, Medium, Seznam)
- Academic documents (PDF, DOC, DOCX from
academic_data/)
-
CSV Import (
process_csv())- Load scraped CSV files from
export/csv/ - Deduplicate by URL and content hash (SHA256)
- Import validated sources to database
- Load scraped CSV files from
-
Academic Document Processing (
process_academic_documents())- Extract text from PDF (PyMuPDF), DOC/DOCX (python-docx)
- Convert legacy .doc to .docx via LibreOffice
- Validate content (min 50 words + religious keywords)
- Match documents to known movements
- Import to database with metadata
-
Entity Extraction (
process_entities())- NER: Extract persons, organizations, locations from content
- Create Alias records for movement name variations
- Create Location records for geographic references
- Match entities to movement database
-
NLP Analysis (
run_nlp())- Language detection: Automatically identify Czech/English
- Sentiment analysis: Score emotional tone (positive/negative/neutral)
- Lemmatization & POS tagging: Via Stanza pipelines
- Generate sentiment logs and analysis reports
-
Data Storage & Export (
load_scraped_csvs())- Persist all processed data to PostgreSQL/SQLite
- Generate CSV exports for Power BI
- Create comprehensive audit logs
The pipeline collects data from multiple sources configured in extracting/sources_config.yaml:
| Type | Source | Method | Status | Description |
|---|---|---|---|---|
| RSS | Sekty.TV | Feed Parser | ✅ Active | Specialized sect information |
| RSS | Sekty.cz | Feed Parser | ✅ Active | Religious movement news |
| RSS | Dingir.cz | Feed Parser | ✅ Active | Academic religious studies |
| RSS | Pastorální péče | Feed Parser | ✅ Active | Pastoral care resources |
| RSS | Seznam Zprávy | Feed Parser | ✅ Active | Czech news portal |
| RSS | iDNES.cz - Domácí | Feed Parser | ✅ Active | Czech mainstream news |
| RSS | Český rozhlas (iRozhlas.cz) | Feed Parser | ✅ Active | Public radio news |
| RSS | Aktuálně.cz | Feed Parser | ✅ Active | Czech news website |
| RSS | Forum24.cz | Feed Parser | ✅ Active | Discussion forum |
| RSS | Deník Alarm | Feed Parser | ✅ Active | Investigative journalism |
| RSS | Blesk.cz | Feed Parser | ✅ Active | Tabloid news |
| Web | iDNES archiv (Playwright) | Scrapy | 🚧 Blocked | Sekty-kulty-mesiáši section |
| Web | Medium.seznam.cz | Scrapy | ✅ Active | Blog articles |
| API | Sociologický ústav AVČR | MediaWiki API | ✅ Active | Academic research database |
| API | Wikipedia (Czech) | MediaWiki API | ✅ Active | Encyclopedia articles |
| Search API | Google News | Custom API | ⏸️ Legacy | News aggregation |
| Social API | PRAW | ✅ Configured | Community discussions | |
| Social API | X (Twitter) | Tweepy | ✅ Configured | Social media posts |
Run the comprehensive test suite:
# Test dependencies are in environment.yml
mamba activate project_infinit
# Run all tests
pytest testing/
# Run specific test
pytest testing/test_nlp_analysis.py -v
# Test fuzzy matching (70% threshold)
pytest testing/test_keywords.py -v- Python 3.10.19+
- Scrapy 2.14+
- SQLAlchemy 2.0+
- Stanza 1.8+ (primary NLP)
- Hugging Face Transformers 4.52+
- pandas 2.3+
- stanza 1.8+ (Primary: Czech/English NLP - tokenization, POS, NER, lemmatization)
- transformers 4.52+ (sentiment analysis: multilingual BERT)
- langdetect (automatic language detection)
- FuzzyWuzzy + Levenshtein (70% threshold fuzzy matching for 139 movements)
- spaCy 3.7+ (optional legacy support)
- praw 7.8+ (Reddit)
- tweepy 4.14+ (X/Twitter)
- requests 2.31+
- feedparser 6.0+
- PyMuPDF (fitz) 1.23+ (PDF text extraction)
- python-docx 1.1+ (Word documents: .doc, .docx)
- openpyxl (Excel)
- fuzzywuzzy 0.18+ (fuzzy string matching)
- python-Levenshtein (fast string matching)
- python-dotenv 1.0+ (environment variables)
- psycopg2-binary 2.9+ (PostgreSQL adapter)
- SQLAlchemy 2.0+
- pytest 8.0+ (testing)
- pytest-mock (test mocking)
- pyright (type checking)
- pylance (IDE support)
- Database: Structured data in PostgreSQL/SQLite with relationships
- CSV Exports: Processed data in
export/csv/directory - Power BI: Direct integration via
export/to_powerbi.py - Analysis Reports: NLP insights and entity relationships
- Logs: Comprehensive logging in
import_log.txt
- ✅ Respect robots.txt and rate limits
- ✅ Proper user agent identification
- ✅ Data minimization and privacy protection
- ✅ Source attribution and transparency
- ✅ Academic and research-focused data collection
- ✅ No personal data collection without consent
- Type hints throughout codebase
- Pylance/Pyright type checking
- Comprehensive test coverage
- Ethical scraping practices
- Modular architecture
- Add configuration to
extracting/sources_config.yaml - Implement spider in
extracting/directory - Add tests in
testing/directory - Update main.py orchestration
The database uses SQLAlchemy ORM with the following main entities:
- Source: Articles, posts, and documents
- Movement: Religious movements and sects
- Alias: Alternative names for movements
- Location: Geographic references
- Enhanced NLP models for Czech language
- Real-time social media monitoring
- Advanced entity relationship analysis
- Geographic visualization of movements
- Trend analysis and time series
- REST API for data access
- Web dashboard interface
- Multi-language support expansion
ETL pipeline pro sběr, analýzu a vizualizaci informací o nových náboženských hnutích v České republice. Zahrnuje etický web scraping, NLP analýzu a strukturované ukládání dat.
- Etický web scraping s omezením rychlosti a respektováním robots.txt
- Automatizovaný sběr dat z více zdrojů:
- RSS feedy ze specializovaných webů
- REST API (Wikipedia, SOCCAS)
- Sociální média API (Reddit, X/Twitter)
- Web scraping pro news agregátory
- Zpracování přirozeného jazyka:
- Podpora češtiny přes spaCy
- Rozpoznávání entit přes Hugging Face Transformers
- Analýza sentimentu přes multijazyčné BERT modely
- Fuzzy matching entit: Prahová hodnota 70% s 4-úrovňovým matchováním
- Klasifikace hnutí a analýza vztahů
- 139 známých náboženských hnutí s aliasovým matchováním
- Strukturované ukládání dat v PostgreSQL/SQLite
- Exportní možnosti pro další analýzu a Power BI integraci
- Komplexní testovací sada s pytest
- Type-safe kód s Pylance/Pyright integrací
- Python 3.10+ - Základní programovací jazyk
- Mamba/Conda - Správa balíčků a prostředí
- PostgreSQL - Primární databáze (s podporou SQLite)
- Scrapy 2.14+ - Framework pro web scraping s etickými nastaveními
- Scrapy-Playwright 0.0.46+ - Scraping stránek s JavaScriptem (iDNES archiv)
- Feedparser 6.0+ - Parsování RSS/Atom feedů
- Requests 2.31+ - HTTP knihovna
- Stanza 1.8+ - České NLP pipeline (tokenizace, POS, NER, lemmatizace)
- Hugging Face Transformers 4.52+ - Pokročilé NLP modely pro analýzu sentimentu
- spaCy 3.7+ (legacy) - Alternativní NLP toolkit
- SQLAlchemy 2.0+ - Database ORM s podporou PostgreSQL/SQLite
- pandas 2.3+ - Manipulace s daty a CSV zpracování
- PyMuPDF (fitz) 1.23+ - Extrakce textu z PDF
- python-docx 1.1+ - Zpracování Word dokumentů (.doc, .docx)
- FuzzyWuzzy 0.18+ + Levenshtein - Fuzzy porovnávání řetězců (70% threshold pro 139 hnutí)
- PRAW 7.8+ - Reddit API klient
- Tweepy 4.14+ - X (Twitter) API klient
- pytest - Testovací framework s mocking
- Pyright/Pylance - Type checking a IDE podpora
- PyYAML - Správa konfigurace
- python-dotenv 1.0+ - Správa environment proměnných
project_infinit/
├── extracting/ # Web scrapery a konfigurace
│ ├── sources_config.yaml # Centralizovaná konfigurace zdrojů
│ ├── spider_settings.py # Etická scraping nastavení
│ ├── keywords.py # Utility pro filtrování klíčových slov
│ ├── config_loader.py # Načítání YAML konfigurace
│ ├── rss_spider.py # Univerzální RSS feed scraper
│ ├── api_spider.py # Univerzální API scraper
│ ├── social_media_spider.py # Social media API scraper
│ ├── google_spider.py # Google News scraper
│ ├── medium_seznam_spider.py # Medium/Seznam scraper
│ └── __pycache__/ # Python bytecode
├── processing/ # Zpracování a analýza dat
│ ├── nlp_analysis.py # NLP pipeline s podporou češtiny
│ ├── import_csv_to_db.py # Utility pro import CSV do databáze
│ ├── import_pdf_to_db.py # Zpracování a import PDF
│ ├── manual_csv.py # Manuální zpracování CSV
│ └── __pycache__/ # Python bytecode
├── database/ # Databázová vrstva
│ ├── db_loader.py # SQLAlchemy modely a připojení
│ ├── models/ # Databázové modely
│ │ ├── source.py # Model zdrojů
│ │ ├── movement.py # Model hnutí
│ │ ├── alias.py # Model aliasů
│ │ └── location.py # Model lokací
│ ├── schema.sql # Databázové schéma
│ ├── views.sql # Databázové views
│ ├── migrations/ # Databázové migrace
│ └── __pycache__/ # Python bytecode
├── testing/ # Testovací sada
│ ├── test_*.py # Unit testy pro všechny moduly
│ ├── conftest.py # Pytest konfigurace
│ └── README.md # Dokumentace testování
├── export/ # Výstupní soubory a exporty
│ ├── csv/ # Scraped a zpracovaná CSV data
│ └── to_powerbi.py # Utility pro Power BI export
├── data/ # Aplikační data
├── academic_data/ # Akademické dokumenty (PDF, DOC, DOCX)
│ └── README.md # Dokumentace akademických dat
├── csv_manual/ # Manuální CSV importy
│ └── README.md # Dokumentace manuálních CSV
├── nnh-db/ # Docker databázové nastavení
├── .github/ # GitHub konfigurace
├── config.py # Konfigurace databáze a aplikace
├── main.py # Hlavní ETL orchestrátor
├── seed_movements.py # Utility pro seed hnutí a aliasů
├── environment.yml # Conda/Mamba prostředí
├── pyrightconfig.json # Konfigurace Pyright type checking
└── readme.md # Tento soubor
git clone https://github.com/Adam8eifert/project_infinit.git
cd project_infinit
# Vytvoření Conda prostředí z environment.yml
mamba create -n project_infinit -y --file environment.yml
# nebo s conda:
# conda env create -f environment.yml
# Aktivace prostředí
mamba activate project_infinit
# nebo: conda activate project_infinitPoznámka: Projekt využívá výhradně Conda/Mamba. Tradiční pip/venv setup není podporován kvůli komplexním závislostem (Playwright, Stanza modely, atd.).
Stanza automaticky stáhne české a anglické modely při prvním spuštění:
# Stažení Stanza českého modelu (primární NLP pipeline)
python -c "import stanza; stanza.download('cs')"
# Volitelné: Stažení spaCy českého modelu (legacy podpora)
python -m spacy download cs_core_news_md# config.py (výchozí SQLite)
DB_URI = "sqlite:///data/project_infinit.db"
# Pro PostgreSQL:
DB_URI = "postgresql+psycopg2://user:password@localhost/project_infinit"# Kompletní ETL pipeline
python main.py
# Jednotlivé komponenty
scrapy runspider extracting/rss_spider.py
python -c "from main import process_academic_documents; process_academic_documents()"- Python 3.10+ – Hlavní jazyk
- Stanza 1.11+ – Multijazykový NLP (čeština + angličtina) s automatickou detencí jazyka
- langdetect – Automatická detekce jazyka zdrojů
- Transformers (HuggingFace) – Multilingual BERT pro sentiment analýzu
- SQLAlchemy 2.0+ – ORM pro PostgreSQL/SQLite
- Scrapy 2.13+ – Framework pro web scraping (5 spiderů)
- PyMuPDF 1.23+ – Extrakce textu z PDF dokumentů
- python-docx 1.1+ – Čtení DOC/DOCX souborů
Veškerá konfigurace je centralizována v extracting/sources_config.yaml:
- Definice zdrojů (RSS, API, webscraping)
- NLP klíčová slova a vzory
- Known movements (75+ českých NRM)
- Rate limiting a nastavení scraperu
Načítání konfigurace probíhá přes extracting/keywords.py wrapper se automatickou validací.
-
Sběr dat (
run_spiders())- RSS feedy z 12+ specializaį a mainstream zdrojů
- REST API (Wikipedia, SOCCAS Encyklopedie)
- Sociální média (Reddit, X/Twitter)
- Web scraping (Google News, Medium, Seznam)
- Akademické dokumenty (PDF, DOC, DOCX z
academic_data/)
-
Import CSV (
process_csv())- Načtení scraped CSV souborů z
export/csv/ - Deduplicita po URL a obsahu (SHA256)
- Import validních zdrojů do databáze
- Načtení scraped CSV souborů z
-
Zpracování akademických dokumentů (
process_academic_documents())- Extrakce textu z PDF (PyMuPDF), DOC/DOCX (python-docx)
- Konverze legacy .doc na .docx přes LibreOffice
- Validace obsahu (min 50 slov + nábožská klíčová slova)
- Matchání dokumentů na známá hnutí
- Import do databáze s metadaty
-
Extrakce entit (
process_entities())- NER: Extrakce osob, organizačí, míst z obsahu
- Vytvoření Alias záznamů pro varianty názvů hnutí
- Vytvoření Location záznamů pro geografické odkazy
- Matchání entit na databázi hnutí
-
NLP analýza (
run_nlp())- Detekce jazyka: Automatická identifikace českých/anglických textů
- Analýza sentimentu: Skórání emocionálního tónu (kladné/záporné/neutrální)
- Lemmatizace & POS tagging: Přes Stanza pipeline
- Generání sentiment logů a zpravy analýzy
-
Ukládání & Export (
load_scraped_csvs())- Uchování všech zpracovaných dat v PostgreSQL/SQLite
- Generání CSV exportů pro Power BI
- Vytvoření komplexních audit logů
- Vytváření analytických reportů
Pipeline sbírá data z více zdrojů nakonfigurovaných v extracting/sources_config.yaml:
| Typ | Zdroj | Metoda | Status | Popis |
|---|---|---|---|---|
| RSS | Sekty.TV | Feed Parser | ✅ Aktivní | Specializované informace o sektách |
| RSS | Sekty.cz | Feed Parser | ✅ Aktivní | Novinky o náboženských hnutích |
| RSS | Dingir.cz | Feed Parser | ✅ Aktivní | Akademické náboženské studie |
| RSS | Pastorální péče | Feed Parser | ✅ Aktivní | Pastorační péče |
| RSS | Seznam Zprávy | Feed Parser | ✅ Aktivní | Český zpravodajský portál |
| RSS | iDNES.cz - Domácí | Feed Parser | ✅ Aktivní | Hlavní české zprávy |
| RSS | Český rozhlas (iRozhlas.cz) | Feed Parser | ✅ Aktivní | Veřejnoprávní rozhlasové noviny |
| RSS | Aktuálně.cz | Feed Parser | ✅ Aktivní | České zpravodajské stránky |
| RSS | Forum24.cz | Feed Parser | ✅ Aktivní | Diskuzní fórum |
| RSS | Deník Alarm | Feed Parser | ✅ Aktivní | Investigativní žurnalistika |
| RSS | Blesk.cz | Feed Parser | ✅ Aktivní | Bulvární noviny |
| Web | iDNES archiv (Playwright) | Scrapy | 🚧 Blokováno | Sekce Sekty-kulty-mesiáši |
| Web | Medium.seznam.cz | Scrapy | ✅ Aktivní | Blogové články |
| API | Sociologický ústav AVČR | MediaWiki API | ✅ Aktivní | Akademická výzkumná databáze |
| API | Wikipedia (Czech) | MediaWiki API | ✅ Aktivní | Encyklopedické články |
| Search API | Google News | Custom API | ⏸️ Legacy | Agregace novinek |
| Sociální API | PRAW | ✅ Nakonfigurováno | Komunitní diskuze | |
| Sociální API | X (Twitter) | Tweepy | ✅ Nakonfigurováno | Příspěvky na sociálních sítích |
Spuštění komplexní testovací sady:
# Testovací závislosti jsou v environment.yml
mamba activate project_infinit
# Spuštění všech testů
pytest testing/
# Spuštění specifického testu
pytest testing/test_nlp_analysis.py -v
# Test fuzzy matchingu (70% threshold)
pytest testing/test_keywords.py -v- Python 3.10.19+
- Scrapy 2.14+
- SQLAlchemy 2.0+
- Stanza 1.8+ (primární NLP)
- Hugging Face Transformers 4.52+
- pandas 2.3+
- stanza 1.8+ (české NLP: tokenizace, POS, NER, lemmatizace)
- transformers 4.52+ (analýza sentimentu: WikiNeuralNER)
- spaCy 3.7+ (legacy podpora)
- praw 7.8+ (Reddit)
- tweepy 4.14+ (X/Twitter)
- requests 2.31+
- feedparser 6.0+
- PyMuPDF (fitz) 1.23+ (extrakce textu z PDF)
- python-docx 1.1+ (Word dokumenty: .doc, .docx)
- openpyxl (Excel)
- fuzzywuzzy 0.18+ (fuzzy porovnávání řetězců)
- python-Levenshtein (rychlé porovnávání řetězců)
- python-dotenv 1.0+ (environment proměnné)
- psycopg2-binary 2.9+ (PostgreSQL adapter)
- SQLAlchemy 2.0+
- pytest 8.0+ (testování)
- pytest-mock (test mocking)
- pyright (type checking)
- pylance (IDE podpora)
- Databáze: Strukturovaná data v PostgreSQL/SQLite s vztahy
- CSV exporty: Zpracovaná data v adresáři
export/csv/ - Power BI: Přímá integrace přes
export/to_powerbi.py - Analytické reporty: NLP insights a entity vztahy
- Logy: Komplexní logování v
import_log.txt
- ✅ Respektování robots.txt a rate limitů
- ✅ Správná identifikace user agenta
- ✅ Minimalizace dat a ochrana soukromí
- ✅ Atribuce zdrojů a transparentnost
- ✅ Akademické a výzkumné zaměření sběru dat
- ✅ Žádný sběr osobních dat bez souhlasu
- Type hinty v celém kódu
- Pylance/Pyright type checking
- Komplexní testové pokrytí
- Etické scraping praktiky
- Modulární architektura
- Přidání konfigurace do
extracting/sources_config.yaml - Implementace spideru v adresáři
extracting/ - Přidání testů v adresáři
testing/ - Aktualizace main.py orchestrace
Databáze používá SQLAlchemy ORM s následujícími hlavními entitami:
- Source: Články, příspěvky a dokumenty
- Movement: Náboženská hnutí a sekty
- Alias: Alternativní názvy pro hnutí
- Location: Geografické reference
- Vylepšené NLP modely pro češtinu
- Monitorování sociálních médií v reálném čase
- Pokročilá analýza vztahů entit
- Geografická vizualizace hnutí
- Analýza trendů a časové řady
- REST API pro přístup k datům
- Web dashboard interface
- Rozšíření podpory více jazyků
To enable Reddit and X (Twitter) data collection:
-
Create
.envfilecp .env.example .env
-
Reddit API Setup
-
Create a "script" application
-
Copy
client_idandclient_secretto.env:REDDIT_CLIENT_ID=your_client_id REDDIT_CLIENT_SECRET=your_client_secret REDDIT_USER_AGENT=ProjectInfinit/1.0 (by your_username)
-
X/Twitter API Setup
-
Register at https://developer.twitter.com/
-
Create an app with API v2 access
-
Copy Bearer Token to
.env:X_BEARER_TOKEN=your_bearer_token
-
- Structured data: PostgreSQL database
- Processed files: CSV exports in
export/csv/ - Dashboards: Power BI visualization-ready
- Reports: Analysis results and statistics
Version: 2.3 | Author: Adam Seifert | License: GNU General Public License v3.0 | Updated: 2026-02-25