Warning

This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.datatypes.speech

from typing import TYPE_CHECKING

from galaxy.datatypes.data import Text
from galaxy.datatypes.metadata import (
    ListParameter,
    MetadataElement,
)
from galaxy.datatypes.sniff import get_headers

if TYPE_CHECKING:
    from galaxy.model import DatasetInstance


[docs]class TextGrid(Text): """Praat Textgrid file for speech annotations >>> from galaxy.datatypes.sniff import get_test_fname >>> fname = get_test_fname('1_1119_2_22_001.textgrid') >>> TextGrid().sniff(fname) True >>> fname = get_test_fname('drugbank_drugs.cml') >>> TextGrid().sniff(fname) False """ file_ext = "textgrid" header = 'File type = "ooTextFile"\nObject class = "TextGrid"\n' blurb = "Praat TextGrid file" MetadataElement( name="annotations", default=[], desc="Annotation types", param=ListParameter, readonly=True, visible=True, optional=True, no_value=[], )
[docs] def sniff(self, filename: str) -> bool: with open(filename) as fd: text = fd.read(len(self.header)) return text == self.header
[docs]class BPF(Text): """Munich BPF annotation format https://www.phonetik.uni-muenchen.de/Bas/BasFormatseng.html#Partitur >>> from galaxy.datatypes.sniff import get_test_fname >>> fname = get_test_fname('1_1119_2_22_001.par') >>> BPF().sniff(fname) True >>> fname = get_test_fname('1_1119_2_22_001-1.par') >>> BPF().sniff(fname) True >>> fname = get_test_fname('drugbank_drugs.cml') >>> BPF().sniff(fname) False """ file_ext = "par" MetadataElement( name="annotations", default=[], desc="Annotation types", param=ListParameter, readonly=True, visible=True, optional=True, no_value=[], ) mandatory_headers = ["LHD", "REP", "SNB", "SAM", "SBF", "SSB", "NCH", "SPN", "LBD"] optional_headers = [ "FIL", "TYP", "DBN", "VOL", "DIR", "SRC", "BEG", "END", "RED", "RET", "RCC", "CMT", "SPI", "PCF", "PCN", "EXP", "SYS", "DAT", "SPA", "MAO", "GPO", "SAO", ]
[docs] def set_meta(self, dataset: "DatasetInstance", overwrite: bool = True, **kwd) -> None: """Set the metadata for this dataset from the file contents""" types = set() with open(dataset.dataset.file_name) as fd: for line in fd: # Split the line on a colon rather than regexing it parts = line.split(":") # And if the first part is a 3 character string, then it's # interesting. if len(parts) and len(parts[0]) == 3: types.add(parts[0]) else: return dataset.metadata.annotations = list(types)
[docs] def sniff(self, filename: str) -> bool: # We loop over 30 as there are 9 mandatory headers (the last should be # `LBD:`), while there are 21 optional headers that can be # interspersed. seen_headers = [line[0] for line in get_headers(filename, sep=":", count=40)] # We cut everything after LBD, where the headers end and contents # start. We choose not to validate contents. if "LBD" in seen_headers: seen_headers = seen_headers[0 : seen_headers.index("LBD") + 1] # Check that every mandatory header is present in the seen headers for header in self.mandatory_headers: if header not in seen_headers: return False # Check that every seen header is either in mandatory or optional for header in seen_headers: if not (header in self.mandatory_headers or header in self.optional_headers): return False return True