mutt/extract_legal_references.py

83 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
import fitz # PyMuPDF
import re
from pathlib import Path
import logging
# === CONFIG ===
PDF_PATH = "/home/matrixhasyou/mutt/ALL_EMAILS_CONSOLIDATED.pdf"
OUTPUT_MD = "/home/matrixhasyou/mutt/LEGAL_REFERENCES.md"
logging.basicConfig(level=logging.INFO, format="%(message)s")
log = logging.getLogger("LegalScanner")
# Паттерны для поиска законов
PATTERNS = [
r'(?i)ЖК\s?РФ',
r'(?i)ГПК\s?РФ',
r'(?i)ГК\s?РФ',
r'(?i)КоАП\s?РФ',
r'(?i)УК\s?РФ',
r'(?i)НК\s?РФ',
r'(?i)Федеральн[а-яё]+\акон[а-яё]*\s(?:от\s)?\d{1,2}\.\d{2}\.\d{2,4}\s?г?\s?№\s?\d+[\-ФЗ]*',
r'(?i)Постановлен[а-яё]+\равительства\s(?:РФ\s)?(?:от\s)?\d{1,2}\.\d{2}\.\d{2,4}\s?г?\s?№\s?\d+',
r'(?i)Приказ[а-яё]*\s[А-Яа-яЁё\s]+(?:от\s)?\d{1,2}\.\d{2}\.\d{2,4}\s?г?\s?№\s?\d+',
r'(?i)СанПиН\s\d+\.\d+\.\d+\-\d+',
r'(?i)ГОСТ\s[Р\s]*\d+\-\d+',
r'(?i)ст\.\s?\d+(?:\.\d+)?\s?[А-Яа-яЁё\s]{2,20}РФ', # ст. 36 ЖК РФ
]
def extract_legal():
if not Path(PDF_PATH).exists():
log.error(f"File {PDF_PATH} not found!")
return
log.info(f"Opening {PDF_PATH}...")
doc = fitz.open(PDF_PATH)
found_refs = set()
log.info(f"Scanning {len(doc)} pages...")
for page_num in range(len(doc)):
text = doc[page_num].get_text()
for pattern in PATTERNS:
matches = re.findall(pattern, text)
for m in matches:
# Очистка: убираем лишние пробелы и переносы
clean_m = " ".join(m.split()).strip()
found_refs.add(clean_m)
if (page_num + 1) % 50 == 0:
log.info(f" Processed {page_num + 1} pages...")
doc.close()
if found_refs:
sorted_refs = sorted(list(found_refs))
with open(OUTPUT_MD, "w", encoding="utf-8") as f:
f.write(f"# ⚖️ Список юридических ссылок из переписки\n\n")
f.write(f"*Данные извлечены автоматически из ALL_EMAILS_CONSOLIDATED.pdf*\n")
f.write(f"*Дата анализа: {Path(PDF_PATH).stat().st_mtime}*\n\n")
# Группировка
f.write("## 📚 Кодексы и Общие нормы\n")
for ref in sorted_refs:
if any(k in ref.upper() for k in ["РФ", "КОДЕКС"]):
f.write(f"- [ ] {ref}\n")
f.write("\n## 📜 Постановления и Законы\n")
for ref in sorted_refs:
if any(k in ref.upper() for k in ["ПОСТАНОВЛЕН", "ФЕДЕРАЛЬН", "ЗАКОН", ""]):
if not any(k in ref.upper() for k in ["РФ"]): # Чтобы не дублировать кодексы
f.write(f"- [ ] {ref}\n")
f.write("\n## 🛠 Технические нормы (СанПиН, ГОСТ)\n")
for ref in sorted_refs:
if any(k in ref.upper() for k in ["САНПИН", "ГОСТ"]):
f.write(f"- [ ] {ref}\n")
log.info(f"✅ Found {len(found_refs)} unique references. Saved to {OUTPUT_MD}")
else:
log.warning("No legal references found.")
if __name__ == "__main__":
extract_legal()