Module elpis.models.annotation
Expand source code
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
from typing import Any, Dict, Optional
@dataclass
class Annotation:
"""A class which represents a section of speech for a given audio file and
sample rate. If start_ms and end_ms aren't specified, it is assumed that the
Annotation spans the entire audio file.
"""
audio_file: Path
transcript: str
start_ms: Optional[int] = None
stop_ms: Optional[int] = None
def is_timed(self) -> bool:
"""Returns true iff the annotation exists between a start and stop time for
the given recording.
"""
return self.start_ms is not None and self.stop_ms is not None
def to_dict(self) -> Dict[str, Any]:
"""Converts an annotation to a serializable dictionary"""
result = dict(self.__dict__)
result["audio_file"] = str(self.audio_file)
return result
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> Annotation:
"""Builds an annotation from a serializable dictionary
Throws an error if the required keys are not found.
"""
return cls(
audio_file=Path(data["audio_file"]),
transcript=data["transcript"],
start_ms=data.get("start_ms"),
stop_ms=data.get("stop_ms"),
)
Classes
class Annotation (audio_file: Path, transcript: str, start_ms: Optional[int] = None, stop_ms: Optional[int] = None)
-
A class which represents a section of speech for a given audio file and sample rate. If start_ms and end_ms aren't specified, it is assumed that the Annotation spans the entire audio file.
Expand source code
@dataclass class Annotation: """A class which represents a section of speech for a given audio file and sample rate. If start_ms and end_ms aren't specified, it is assumed that the Annotation spans the entire audio file. """ audio_file: Path transcript: str start_ms: Optional[int] = None stop_ms: Optional[int] = None def is_timed(self) -> bool: """Returns true iff the annotation exists between a start and stop time for the given recording. """ return self.start_ms is not None and self.stop_ms is not None def to_dict(self) -> Dict[str, Any]: """Converts an annotation to a serializable dictionary""" result = dict(self.__dict__) result["audio_file"] = str(self.audio_file) return result @classmethod def from_dict(cls, data: Dict[str, Any]) -> Annotation: """Builds an annotation from a serializable dictionary Throws an error if the required keys are not found. """ return cls( audio_file=Path(data["audio_file"]), transcript=data["transcript"], start_ms=data.get("start_ms"), stop_ms=data.get("stop_ms"), )
Class variables
var audio_file : pathlib.Path
var start_ms : Optional[int]
var stop_ms : Optional[int]
var transcript : str
Static methods
def from_dict(data: Dict[str, Any]) ‑> Annotation
-
Builds an annotation from a serializable dictionary
Throws an error if the required keys are not found.
Expand source code
@classmethod def from_dict(cls, data: Dict[str, Any]) -> Annotation: """Builds an annotation from a serializable dictionary Throws an error if the required keys are not found. """ return cls( audio_file=Path(data["audio_file"]), transcript=data["transcript"], start_ms=data.get("start_ms"), stop_ms=data.get("stop_ms"), )
Methods
def is_timed(self) ‑> bool
-
Returns true iff the annotation exists between a start and stop time for the given recording.
Expand source code
def is_timed(self) -> bool: """Returns true iff the annotation exists between a start and stop time for the given recording. """ return self.start_ms is not None and self.stop_ms is not None
def to_dict(self) ‑> Dict[str, Any]
-
Converts an annotation to a serializable dictionary
Expand source code
def to_dict(self) -> Dict[str, Any]: """Converts an annotation to a serializable dictionary""" result = dict(self.__dict__) result["audio_file"] = str(self.audio_file) return result