Source code for nlp_shap.masking.partitions

"""Player partition plugins for conversation snapshots."""

from __future__ import annotations

from dataclasses import dataclass

from ..domain.conversation import ConversationSnapshot
from ..domain.players import PlayerSet
from .tokens import player_id_for_span, tokenize_snapshot


[docs] @dataclass(frozen=True, slots=True) class TokenPartitioner: """Partition a snapshot into whitespace-delimited text tokens.""" @property def name(self) -> str: """Return the registered partition identifier.""" return "tokens"
[docs] def partition(self, snapshot: ConversationSnapshot) -> PlayerSet: """Derive ordered token players from the snapshot text.""" spans = tokenize_snapshot(snapshot) if not spans: msg = "snapshot must contain at least one explainable token" raise ValueError(msg) player_ids = tuple( player_id_for_span(snapshot.snapshot_id, span) for span in spans ) return PlayerSet(player_ids=player_ids)