Source code for pygarble.gibberish.analysis

"""Immutable, serializable explanations. Scores are not probabilities."""

from dataclasses import dataclass
from typing import Tuple


[docs] @dataclass(frozen=True) class Span: start: int end: int reason: str
@dataclass(frozen=True) class Evidence: score: float applicable: bool = True reason: str = "heuristic_score" spans: Tuple[Span, ...] = ()
[docs] @dataclass(frozen=True) class Signal: strategy: str score: float applicable: bool reason: str spans: Tuple[Span, ...] = ()
[docs] @dataclass(frozen=True) class Analysis: garbled: bool score: float status: str signals: Tuple[Signal, ...] profile: str model_version: str = "english-v2" @property def spans(self) -> Tuple[Span, ...]: return tuple( sorted( {span for signal in self.signals for span in signal.spans}, key=lambda span: (span.start, span.end, span.reason), ) )