Annotation of ECHO_content/ECHO_language.py, revision 1.2

1.1       dwinter     1: """Methoden fuer Language Technologies"""
1.2     ! dwinter     2: 
1.1       dwinter     3: def donatus(txt2):
                      4:    import xmlrpclib
                      5: 
                      6:    server = xmlrpclib.ServerProxy("http://archimedes.fas.harvard.edu/cgi-bin/donatus-rpc")
                      7: 
                      8:    txt=txt2.encode('utf-8')
                      9:    bin=xmlrpclib.Binary(txt)
                     10: 
                     11:    
                     12: 
                     13:    ret=server.donatus.analyze(bin)
                     14: 
                     15:        
                     16:    return ret['morphData'].data
                     17: 
                     18: 
                     19: def donatusVariant2Lemma(morphData):
                     20:    """creates hash variant -> morphdata"""
                     21:    ret={}
                     22:    dom=xml.dom.minidom.parseString(morphData)
                     23:    lemmas=dom.getElementsByTagName('lemma')
                     24:    for lemma in lemmas:
                     25:        variants=lemma.getElementsByTagName('variant')
                     26:        for variant in variants:
                     27:            atr=variant.getAttribute('form')
                     28:            if ret.has_key(atr):
                     29:                ret[atr].append=lemma.getAttribute('form')
                     30:            else:
                     31:                ret[atr]=[lemma.getAttribute('form')]
                     32: 
                     33:    return ret
1.2     ! dwinter    34: 
        !            35: class ECHO_language:
        !            36:    """language methods"""
        !            37:    
        !            38:    def donatusVariant2Lemma(self,nr='1'):
        !            39:        """analyze by donatus"""
        !            40:        return donatusVariant2Lemma(donatus(self.lemmatize(nr)))
        !            41: 
        !            42:    def tagLex(self,nr="1"):
        !            43:        """generate Links"""
        !            44:        global retLex
        !            45:        global toggle
        !            46: 
        !            47:        toggle=0
        !            48:        retLex=""
        !            49: 
        !            50:        lemmatized=self.lemmatize(nr)[0:]
        !            51:        #print "ho",repr(lemmatized)
        !            52:        variants=donatusVariant2Lemma(donatus(lemmatized))
        !            53:        
        !            54:        def createTag(name,attrs):
        !            55:                         global toggle
        !            56:            
        !            57:            if name=="w":
        !            58:                toggle=1
        !            59:                return ""
        !            60:            else:
        !            61:                tag="<"
        !            62:                tag+=name
        !            63:                for attr in attrs.keys():
        !            64:                    tag+=""" %s="%s" """%(attr,attrs[attr])
        !            65:                tag+=">"
        !            66:            return tag
        !            67:                
        !            68:        def createData(data):
        !            69:            global toggle
        !            70:            astring="""<a href="http://141.14.236.86/cgi-bin/toc/dict?step=remotetable;word=%s;lang=de" target="_blank">%s</a> """
        !            71:            if toggle: # tag war ein w
        !            72:                toggle=0
        !            73:                if variants.has_key(data):
        !            74:                    return astring%(variants[data][0],data)
        !            75:                else:
        !            76:                    return astring%(data,data)
        !            77:                
        !            78:                    
        !            79: 
        !            80:        # 3 handler functions
        !            81:        def start_element(name, attrs):
        !            82:            global retLex
        !            83:            
        !            84:            retLex+=createTag(name,attrs)
        !            85:        def end_element(name):
        !            86:            global retLex
        !            87:            if not name=="w":
        !            88:                retLex+="</%s>"%(name.encode('utf-8'))
        !            89:            
        !            90:            
        !            91:        def char_data(data):
        !            92:            global retLex
        !            93:            if data:
        !            94:                try:
        !            95:                    retLex+=createData(data)
        !            96:                except:
        !            97:                    """no"""
        !            98:                    
        !            99:        p = xml.parsers.expat.ParserCreate()
        !           100: 
        !           101:        p.StartElementHandler = start_element
        !           102:        p.EndElementHandler = end_element
        !           103:        p.CharacterDataHandler = char_data
        !           104:        
        !           105:        p.Parse(lemmatized.encode('utf-8'),1)
        !           106:        #print repr(lemmatized.encode('utf-8'))
        !           107:    
        !           108:        return retLex
        !           109:    
        !           110:        
        !           111:    def lemmatize(self,nr='1',lang="de"):
        !           112:        """lemmatize"""
        !           113:        global ret
        !           114:        ret=""
        !           115:        
        !           116:        def createTag(name,attrs):
        !           117:            tag="<"
        !           118:            tag+=name
        !           119:            for attr in attrs.keys():
        !           120:                tag+=""" %s="%s" """%(attr,attrs[attr])
        !           121:            tag+=">"
        !           122:            return tag
        !           123:                
        !           124:        def insertW(str):
        !           125:            splitted=str.split()
        !           126:            wordlist=["<w>%s</w>"%split for split in splitted]
        !           127:            return string.join(wordlist,'\n')
        !           128: 
        !           129:        # 3 handler functions
        !           130:        def start_element(name, attrs):
        !           131:            global ret
        !           132:            ret+=createTag(name,attrs)
        !           133:        def end_element(name):
        !           134:            global ret
        !           135:            ret+="</%s>"%(name.encode('utf-8'))
        !           136:            
        !           137:        def char_data(data):
        !           138:            global ret
        !           139:            ret+=insertW(data)
        !           140: 
        !           141:        p = xml.parsers.expat.ParserCreate()
        !           142: 
        !           143:        p.StartElementHandler = start_element
        !           144:        p.EndElementHandler = end_element
        !           145:        p.CharacterDataHandler = char_data
        !           146: 
        !           147:        p.Parse(self.getPage(nr), 1)
        !           148:        txt="""<wtag locator="xxx">
        !           149:        <section lang="%s"><s>%s</s></section>
        !           150:        </wtag>"""
        !           151:        ret=txt%(lang,ret)
        !           152:        
        !           153:        return ret

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>