⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hmmeditingcontext.py

📁 General Hidden Markov Model Library 一个通用的隐马尔科夫模型的C代码库
💻 PY
字号:
#!/usr/bin/env python##################################################################################       This file is part of ghmm (Graph Algorithm Toolbox) ##	file:   HMMEditingContext.py#	author: Janne Grunau##       Copyright (C) 2007, Janne Grunau#                                   #       Contact: schliep@molgen.mpg.de##       Information: http://ghmm.org##       This library is free software; you can redistribute it and/or#       modify it under the terms of the GNU Library General Public#       License as published by the Free Software Foundation; either#       version 2 of the License, or (at your option) any later version.##       This library 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#       Library General Public License for more details.##       You should have received a copy of the GNU Library General Public#       License along with this library; if not, write to the Free#       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA##################################################################################import ghmmimport ghmmwrapperfrom ObjectHMM import *class HMMEditingContext(object):    def __init__(self, parameter, mtype=0):        self.modeltype = mtype        # check whether the parameter is an EmissionDomain        if isinstance(parameter, ghmm.EmissionDomain):            if parameter.CDataType is "int":                self.HMM = ObjectHMM(State, Transition, alphabet=parameter, etype=0)                self.modeltype |= ghmmwrapper.kDiscreteHMM            elif parameter.CDataType is "double":                self.HMM = ObjectHMM(State, Transition, emissionClass=ContinuousMixtureDistribution, etype=1)                self.modeltype |= ghmmwrapper.kContinuousHMM            else:                raise ghmm.NoValidCDataType, "C data type " + str(parameter.CDataType) + " invalid."            self.HMM.initHMM(self.modeltype)        # Distribution parameter        elif type(parameter) is type:            self.HMM = ObjectHMM(State, Transition, emissionClass=parameter, etype=1)            self.modeltype |= ghmmwrapper.kContinuousHMM            self.HMM.initHMM(self.modeltype)        # existing hidden markov model        elif isinstance(parameter, ghmm.HMM):            hmm = parameter            self.HMM = ObjectHMM(State, Transition)            if isinstance(hmm, ghmm.DiscreteEmissionHMM):                self.modeltype = hmm.cmodel.model_type                if hmm.cmodel.alphabet is None:                    hmm.cmodel.alphabet = self.emissionDomain.toCstruct()            else:                self.modeltype = ghmmwrapper.ContinuousHMM            self.HMM.initHMM(self.modeltype)            self.HMM.buildFromCModel(hmm.cmodel)        # filename        elif isinstance(parameter, str) or isinstance(parameter, unicode):            self.load(parameter)        else:            raise ghmm.UnknownInputType    def __str__(self):        return str(self.HMM)    ## container emulation    def __getitem__(self, key):        if isinstance(key, tuple):            tail,head = [self.getUniqueId(k) for k in key]            return self.HMM.edges[(tail,head)]        elif isinstance(key, int):            return self.HMM.vertices[key]        else:            retlist = [self.HMM.vertices[vid] for vid in self.HMM.name2id[key]]            if len(retlist) == 1:                return retlist[0]            else:                return retlist    def __setitem__(self, key, value):        pass    def __delitem__(self, key):        if isinstance(key, tuple):            tail,head = [self.getUniqueId(k) for k in key]            self.HMM.DeleteEdge(tail, head)        elif isinstance(key, int):            self.deleteState(key)        else:            for vid in self.HMM.name2id[key]:                self.deleteState(vid)    def __len__(self):        return len(self.HMM)    def __contains__(self, key):        if isinstance(key, tuple):            tail,head = [self.getUniqueId(k) for k in key]            return self.HMM.edges.has_key((tail,head))        elif isinstance(key, int):            return self.HMM.vertices.has_key(key)        else:            return self.HMM.name2id.has_key(key)    def __iter__(self):        pass    def load(self, filename):        self.HMM = ObjectHMM(State, Transition)        self.HMM.openXML(filename)        self.modeltype = self.HMM.modelType    def save(self, filename):        self.HMM.writeXML(filename)    def finalize(self):        cmodel = self.HMM.finalize()                if (self.modeltype & ghmmwrapper.kContinuousHMM):            return ghmm.ContinuousMixtureHMM(ghmm.Float(),                                             ghmm.ContinuousMixtureDistribution(ghmm.Float()),                                             cmodel)        elif ((self.modeltype & ghmmwrapper.kDiscreteHMM)              and not (self.modeltype & ghmmwrapper.kTransitionClasses)              and not (self.modeltype & ghmmwrapper.kPairHMM)):            emission_domain = ghmm.Alphabet([], cmodel.alphabet)            if (self.modeltype & ghmmwrapper.kLabeledStates):                labelDomain = ghmm.LabelDomain([], cmodel.label_alphabet)                return ghmm.StateLabelHMM(emission_domain,                                          ghmm.DiscreteDistribution(emission_domain),                                          labelDomain,                                          cmodel)            else:                return ghmm.DiscreteEmissionHMM(emission_domain,                                                ghmm.DiscreteDistribution(emission_domain),                                                cmodel)    def addState(self, emission=None, initial=-1):        vid = self.HMM.AddVertex()        if emission is not None:            self.HMM.vertices[vid].emission = emission        self.HMM.vertices[vid].initial = initial        return vid    def deleteState(self, vid):        self.HMM.DeleteVertex(vid)            def addTransition(self, tail, head, p=-1):        tail = self.getUniqueId(tail)        head = self.getUniqueId(head)                self.HMM.AddEdge(tail, head)        self.HMM.edges[tail,head].SetWeight(p)    def getUniqueId(self, name):        if isinstance(name, str) or isinstance(name, unicode):            tmp = self.HMM.name2id[name]            if len(tmp) > 1:                raise IdentifierIsAmbigious, name            else:                return tmp[0]        else:            return name

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -