def convertir( cambiar ): #Diccionario con {'s':[palabrassingulares],'p':[palabrasplurales]} """ Devuelve un diccionario con palabras singulares en plurales y viceversa """ invertido = {'p': [], 's': []} for singulares in cambiar['s']: invertido['p'].append(pluralize(singulares)) for plurales in cambiar['p']: invertido['s'].append(singularize(plurales)) return invertido
def convertir(dicc): dicc_nuevo = {} for x in dicc: if x == 's': dicc_nuevo['p'] = [] for i in range(len(dicc[x])): dicc_nuevo['p'].append(pluralize(dicc[x][i])) if x == 'p': dicc_nuevo['s'] = [] for i in range(len(dicc[x])): dicc_nuevo['s'].append(singularize(dicc[x][i])) return dicc_nuevo
def test_pluralize(self): # Assert the accuracy of the pluralization algorithm. from pattern.db import Datasheet test = {} for w, lemma, tag, f in Datasheet.load(os.path.join(PATH, "corpora", "wordforms-es-davies.csv")): if tag == "n": test.setdefault(lemma, []).append(w) i, n = 0, 0 for sg, pl in test.items(): pl = sorted(pl, key=len, reverse=True)[0] if es.pluralize(sg) == pl: i += 1 n += 1 self.assertTrue(float(i) / n > 0.77) print("pattern.es.pluralize()")
def convertir(dic): diccionario = {} for clave in dic: lista = dic[clave] listaAux = [] if (clave == 's'): for elem in lista: listaAux.append(pluralize(elem)) diccionario['p'] = listaAux else: for elem in lista: listaAux.append(singularize(elem)) diccionario['s'] = listaAux return diccionario
def test_pluralize(self): # Assert the accuracy of the pluralization algorithm. from pattern.db import Datasheet test = {} for w, lemma, tag, f in Datasheet.load(os.path.join(PATH, "corpora", "wordforms-es-davies.csv")): if tag == "n": test.setdefault(lemma, []).append(w) i, n = 0, 0 for sg, pl in test.items(): pl = sorted(pl, key=len, reverse=True)[0] if es.pluralize(sg) == pl: i += 1 n += 1 self.assertTrue(float(i) / n > 0.77) print "pattern.es.pluralize()"
def parse_NP(words): number="s" noun="" gender='m' t=Word_list_to_Text(words) # Example: todos los perros m=pattern_match("{DT} {DT} {JJ*|NN*}", t) if m and len(m)==len(t.words): learn_gender(m.group(2)[0].string, noun) noun = singularize(m.group(3)[0].string) if m.group(2)[0].string in plural_words: number='p' if m.group(2)[0].string in female_words: gender='f' return number, gender, noun # Example: el perro m=pattern_match("{DT} {JJ*|NN*}", t) if m and len(m)==len(t.words): noun = singularize(m.group(2)[0].string) learn_gender(m.group(1)[0].string, noun) if m.group(1)[0].string in plural_words: number='p' if m.group(1)[0].string in female_words: gender='f' return number, gender, noun # Example: verde m=pattern_match("{JJ*|NN*}", t) if m and len(m)==len(t.words): noun=m.group(1)[0].string if noun==pluralize(noun): number="p" noun = singularize(noun) # TODO: gender return number, gender, noun print "parse_NP() : not found", t sys.exit(0)
def convertir_corto(cambiar): dicc = { 'p': list(map(lambda x: pluralize(x), cambiar['s'])), 's': list(map(lambda x: singularize(x), cambiar['p'])) } return dicc #por que no anda si hago return {...}??????
def validacion(teclado, diccionario): """ Esta funcion debe ser llamada dentro de un loop para ingresar todas las palabras. Puntualmente la funcion valida 1a palabra ingresada y la agrega a un diccionario de palabras validas """ web = Wiktionary(language="es") articulo = web.search(teclado) #PALABRA cambio = False try: s = list(filter(lambda x: x.title == "Español", articulo.sections)) etimologia = list( filter(lambda x: x.title == "Etimología", s[0].children)) if etimologia == []: teclado = singularize(teclado) cambio = True #booleano que indica si la palabra cambió de plural a singular validado = False articulo = web.search(teclado) if articulo is not None: try: s = list( filter(lambda x: x.title == "Español", articulo.sections)) etimologia = list( filter(lambda x: x.title == "Etimología", s[0].children)) definicion = etimologia[0].content #DEFINICION lista = [ "Adjetivo", "Verbo", "Verbo intransitivo", "Forma verbal", "Verbo transitivo", "Forma adjetiva", "Sustantivo", "Sustantivo masculino", "Sustantivo femenino" ] lista_verbos = [ "Verbo", "Verbo intransitivo", "Forma verbal", "Verbo transitivo" ] lista_sustantivos = [ "Sustantivo", "Sustantivo masculino", "Sustantivo femenino" ] lista_adjetivos = ["Adjetivo", "Forma Adjetiva"] for tipo in lista: tipo_real = list( filter(lambda x: x.title == tipo, s[0].children)) if tipo_real: clasificacion = tipo break if clasificacion in lista_adjetivos: clasificacion = "Adjetivo" elif clasificacion in lista_sustantivos: clasificacion = "Sustantivo" elif clasificacion in lista_verbos: clasificacion = "Verbo" validado = True except IndexError: #esto previene el error de que la pagina de wik no tenga etimologia (definicion) validado = False definicion = "" # lo declaro para evitar un error posterior de referenciar una variable antes de que tenga un valor clasificacion = "" except AttributeError: validado = False definicion = "" # lo declaro para evitar un error posterior de referenciar una variable antes de que tenga un valor clasificacion = "" if cambio: teclado = pluralize(teclado) indice = teclado diccionario[indice] = { "Definición": definicion, "Tipo": clasificacion } #diccionario con la palabra , su deficinicion y su tipo. if validado: datos = { "info_palabra": diccionario, "validez": True } #si se ingreso correctamente, se modifica la lista y diccionario else: datos = { "info_palabra": diccionario, "validez": False } #si no se ingresó, solo "sirve" la validez return datos
def pluralize_singularize(): print(pluralize('gato')) print(singularize('gatos'))