Source code for annotations.Align.models.acm.readwrite
# -*- coding: UTF-8 -*-
"""
:filename: sppas.src.annotations.Align.models.acm.readwrite.py
:author: Brigitte Bigi
:contact: develop@sppas.org
:summary: Readers and writers of acoustic models.
.. _This file is part of SPPAS: http://www.sppas.org/
..
-------------------------------------------------------------------------
___ __ __ __ ___
/ | \ | \ | \ / the automatic
\__ |__/ |__/ |___| \__ annotation and
\ | | | | \ analysis
___/ | | | | ___/ of speech
Copyright (C) 2011-2021 Brigitte Bigi
Laboratoire Parole et Langage, Aix-en-Provence, France
Use of this software is governed by the GNU Public License, version 3.
SPPAS is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SPPAS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SPPAS. If not, see <http://www.gnu.org/licenses/>.
This banner notice must not be removed.
-------------------------------------------------------------------------
"""
from collections import OrderedDict
from sppas.src.config.makeunicode import u
from ..modelsexc import MioEncodingError
from ..modelsexc import MioFolderError
from ..modelsexc import MioFileFormatError
from .acmodelhtkio import sppasHtkIO
# ----------------------------------------------------------------------------
[docs]class sppasACMRW(object):
"""Generic reader and writer for acoustic models.
Currently, only HTK-ASCII is supported.
We expect to add readers and writers for several file formats
in a -- far -- future.
"""
ACM_TYPES = OrderedDict()
ACM_TYPES["hmmdefs"] = sppasHtkIO
# -----------------------------------------------------------------------
[docs] def __init__(self, folder):
"""Create an acoustic model reader-writer.
:param folder: (str) Name of the folder with the acoustic model files
"""
self.__folder = u(folder)
# -----------------------------------------------------------------------
# -----------------------------------------------------------------------
[docs] def get_folder(self):
"""Return the name of the folder of the acoustic model."""
return self.__folder
# -----------------------------------------------------------------------
[docs] def set_folder(self, folder):
"""Set a new folder to store files of the acoustic model.
:param folder: (str) New name of the folder of the acoustic model.
"""
self.__folder = u(folder)
# -----------------------------------------------------------------------
[docs] def read(self):
"""Read an acoustic model from the folder.
:returns: sppasAcModel()
"""
try:
acm = self.get_reader()
acm.read(self.__folder)
except UnicodeError as e:
raise MioEncodingError(self.__folder, str(e))
except Exception:
raise
return acm
# -----------------------------------------------------------------------
[docs] def get_reader(self):
"""Return an acoustic model according to the given folder.
:returns: sppasAcModel()
"""
for file_reader in sppasACMRW.ACM_TYPES.values():
try:
if file_reader.detect(self.__folder) is True:
return file_reader()
except:
continue
raise MioFolderError(self.__folder)
# -----------------------------------------------------------------------
[docs] def write(self, acmodel, format="hmmdefs"):
"""Write an acoustic model into a folder.
:param acmodel: (str)
:param format: The format to save the acoustic model
"""
if format not in sppasACMRW.ACM_TYPES:
raise MioFileFormatError(format)
acm_rw = sppasACMRW.ACM_TYPES[format]()
acm_rw.set(acmodel)
try:
acm_rw.write(self.__folder)
except UnicodeError as e:
raise MioEncodingError(self.__folder, str(e))
except Exception:
raise