Первичная версия: стилометрия реплик, LSA и протокол экспериментов
This commit is contained in:
77
lab1/scripts/check_environment.py
Normal file
77
lab1/scripts/check_environment.py
Normal file
@@ -0,0 +1,77 @@
|
||||
"""Проверка окружения перед серией экспериментов."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
PROJECT_ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0, str(PROJECT_ROOT))
|
||||
|
||||
from stylometry.io import DEFAULT_DATA_PATH, corpus_fingerprint, read_corpus, validate_corpus # noqa: E402
|
||||
from stylometry.tokenization import Tokenizer # noqa: E402
|
||||
|
||||
|
||||
def package_versions() -> dict[str, str]:
|
||||
versions: dict[str, str] = {}
|
||||
for name in ("numpy", "pandas", "scipy", "sklearn", "nltk", "matplotlib"):
|
||||
try:
|
||||
module = __import__(name)
|
||||
versions[name] = getattr(module, "__version__", "unknown")
|
||||
except Exception:
|
||||
versions[name] = "missing"
|
||||
return versions
|
||||
|
||||
|
||||
def main() -> int:
|
||||
print("=== Проверка окружения ===")
|
||||
print(f"Python: {sys.version.split()[0]} ({sys.executable})")
|
||||
print(f"Каталог проекта: {PROJECT_ROOT}")
|
||||
|
||||
versions = package_versions()
|
||||
print("Версии библиотек:")
|
||||
for name, version in versions.items():
|
||||
print(f" {name}: {version}")
|
||||
missing = [name for name, version in versions.items() if version == "missing"]
|
||||
if missing:
|
||||
print(f"ОШИБКА: не установлены библиотеки: {missing}")
|
||||
print("Выполните: pip install -r requirements.txt")
|
||||
return 1
|
||||
|
||||
if not DEFAULT_DATA_PATH.exists():
|
||||
print(f"ОШИБКА: нет файла корпуса {DEFAULT_DATA_PATH}")
|
||||
return 1
|
||||
|
||||
frame = read_corpus(DEFAULT_DATA_PATH)
|
||||
stats = validate_corpus(frame)
|
||||
print("Корпус:")
|
||||
print(f" файл: {DEFAULT_DATA_PATH}")
|
||||
print(f" SHA-256: {corpus_fingerprint(DEFAULT_DATA_PATH)}")
|
||||
print(f" реплик: {stats['n_lines']}")
|
||||
print(f" персонажей: {stats['n_characters']}")
|
||||
print(f" словоупотреблений: {stats['n_words']}")
|
||||
|
||||
try:
|
||||
tokenizer = Tokenizer(use_nltk=True, strict=True)
|
||||
except Exception as error:
|
||||
print(f"ОШИБКА NLTK: {error}")
|
||||
print("Выполните: python scripts/download_nltk_data.py")
|
||||
return 1
|
||||
analyzed = tokenizer.analyze(frame.iloc[0]["text"])
|
||||
print("NLTK:")
|
||||
print(f" токенизатор: {'NLTK' if tokenizer.use_nltk else 'резервный'}")
|
||||
print(f" POS-теггер: {'доступен' if tokenizer.pos_available else 'недоступен'}")
|
||||
print(f" пример токенов: {analyzed.tokens[:8]}")
|
||||
print(f" пример POS: {analyzed.upos[:8]}")
|
||||
if not tokenizer.pos_available:
|
||||
print("ОШИБКА: POS-теггер недоступен; эксперименты с POS будут неполными.")
|
||||
return 1
|
||||
|
||||
print("\nОкружение готово.")
|
||||
print(json.dumps({"versions": versions, "n_lines": stats["n_lines"]}, ensure_ascii=False))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user