Исправлен .gitignore: пакет stylometry/features добавлен в репозиторий

This commit is contained in:
2026-10-25 15:52:25 +03:00
parent c390224500
commit 10e2444d23
15 changed files with 1000 additions and 7 deletions

View File

@@ -0,0 +1,38 @@
"""Символьные признаки: частоты букв, регистр, цифры, пунктуация."""
from __future__ import annotations
import string
import pandas as pd
from .base import safe_div
def extract(row: pd.Series) -> dict[str, float]:
text = str(row.get("text", ""))
lower = text.lower()
letters = [char for char in lower if "a" <= char <= "z"]
n_letters = max(len(letters), 1)
n_chars = max(len(text), 1)
features: dict[str, float] = {}
for char in string.ascii_lowercase:
features[f"char_freq_{char}"] = safe_div(letters.count(char), n_letters)
upper = sum(1 for char in text if char.isupper())
digits = sum(1 for char in text if char.isdigit())
spaces = sum(1 for char in text if char.isspace())
punctuation = sum(1 for char in text if not char.isalnum() and not char.isspace())
features.update(
{
"char_letter_count": float(len(letters)),
"char_upper_rate": safe_div(upper, n_letters),
"char_digit_rate": safe_div(digits, n_chars),
"char_space_rate": safe_div(spaces, n_chars),
"char_punctuation_rate": safe_div(punctuation, n_chars),
"char_apostrophe_rate": safe_div(text.count("'"), n_chars),
"char_quote_rate": safe_div(text.count('"'), n_chars),
}
)
return features