def validar_palabra(palabra): """ Comprueba que el string que se pasa como palabra sea una palabra valida retorna True si lo es, en caso contrario retorna False. """ palabra = parse(palabra).split('/') existe = False if palabra[1] in ('AO','JJ','AQ','DI','DT','VAG','VBG','VAI','VAN','MD', 'VAS','VMG','VMI','VB','VMM','VMN','VMP','VBN','VMS', 'VSG','VSI','VSN','VSP','VSS'): # VB:verbo, JJ:adjetivo if palabra[0] not in (lexicon.keys() or spelling.keys()): # si es adj o verbo y no esta en el lexicon # ni el spelling comprueba con wiktionary w = Wiktionary(language="es") article = w.search(palabra[0]) if article is not None: secciones = [x.title for x in article.sections] if 'Español' in secciones: existe = True else: existe = True elif palabra[1] in ('NC','NN','NCS','NCP','NNS','NP','NNP','W'): # sustantivo comprueba con wiktionary w = Wiktionary(language="es") article = w.search(palabra[0]) if article is not None: secciones = [x.title for x in article.sections] if 'Español' in secciones: existe = True return existe
def ingresarPalabra(dicPalabras, text): """esta funcion verifica si es una palabra valida y cual es su clasificacion, y la agrega al diccionario""" try: clasificacion = parse(text).split('/')[1][0:2] if esPalabraValida(text): if (clasificacion == 'VB'): enInfinitivo = conjugate(text, INFINITIVE) articulo = Wiktionary(language='es').search(enInfinitivo) elif (clasificacion == 'JJ'): adjetivo = attributive(text, gender=NEUTRAL) articulo = Wiktionary(language='es').search(adjetivo) elif (clasificacion == 'NN'): articulo = Wiktionary(language='es').search(text) aux = str(articulo.sections) if 'ADJ' in aux.upper() and clasificacion == 'JJ': print('La palabra es un adjetivo') elif 'VERB' in aux.upper() and clasificacion == 'VB': print('La palabra es un verbo') elif 'SUST' in aux.upper() and clasificacion == 'NN': print('La palabra es un sustantivo') if (clasificacion != 'JJ' and clasificacion != 'NN' and clasificacion != 'VB'): GenerarReporte('La palabra ' + text + ' no existe en pattern.') print('La palabra es valida y es un', articulo.sections[3].title) dicPalabras[clasificacion][text] = buscarDefinicion(text) print(dicPalabras[clasificacion][text]) return True else: if (clasificacion == 'JJ' or clasificacion == 'NN' or clasificacion == 'VB'): GenerarReporte( 'La palabra ' + text + ' no fue encontrada en Wiktionary, pero sí en pattern siendo un ' + clasificacion) dicPalabras[clasificacion][text] = sg.PopupGetText( 'Definicion: ') return True else: GenerarReporte( 'La palabra ' + text + ' no fue encontrada en Wiktionary y tampoco en pattern.') except TypeError: GenerarReporte('La palabra ' + text + ' no es valida.') print('La palabra ingresada no es valida.') return False
def analizarpalabra(palabra, cat): print(palabra) print(cat) engine = Wiktionary(license=None, throttle=1.0, language="es") # Enter your license key. sch = engine.search(palabra) print('Wiktionary dice que') if sch != None: if ('ES:Sustantivos' in sch.categories): print('es sustantivo!') if ('ES:Adjetivos' in sch.categories): print('es Adjetivo!') if ('ES:Verbos' in sch.categories): print('es verbo!') else: print('no se encuentra en wiktionary') print('Pattern.es dice que es') #Common part-of-speech tags are NN (noun), VB (verb), JJ (adjective), RB (adverb) and IN (preposition). tokenize(palabra, punctuation=".,;:!?()[]{}`''\"@#$^&*+-|=~_", replace={}) tipo = tag(palabra, tokenize=True, encoding='utf-8')[0][1] print('Tipo:', tipo) if tipo == 'NN': print('SUSTANTIVO') if tipo == 'VB': print('Verbo') if tipo == 'JJ': print('ADJETIVO') if tipo == 'RB': print('Adverbio') if tipo == 'IN': print('Preposición')
def BuscadorWIKI(palabra): '''Busca la palabra y su defincion en Wiktionary''' w = Wiktionary(language='es') article = w.search(palabra) tipo = '9999' definicion = '' encontro = False try: for elem in article.sections: if 'verbo' in elem.title.lower(): tipo = 'verbo' encontro = True elif 'sustantivo' in elem.title.lower(): tipo = 'sustantivo' encontro = True elif 'adjetivo' in elem.title.lower(): tipo = 'adjetivo' encontro = True if encontro == True: # print(elem.content) definicion = elem.content.split('1')[1].split('.2')[0].split( '*')[0] break print(' DEFINICION FRITAS: ', definicion) except AttributeError: sg.Popup('Palabra ingresada no encontrada en wiki') return (tipo, definicion)
def wiki(palabra): """ Busca la palabra a agregar en wiktionary, si está define el tipo y retorna el tipo y la primera definicion que aparece en wiktionary de la palabra""" wik = Wiktionary(language='es') try: articulo = wik.search(palabra) for section in articulo.sections: tipo = section.title if ('Verbo' in tipo or 'Adjetivo' in tipo or 'Sustantivo' in tipo or 'Forma verbal' in tipo or 'Forma adjetiva' in tipo or 'Forma sustantiva' in tipo): definicion = section.content definicion = definicion.partition('1') definicion = definicion[2].partition('2') definicion = definicion[0] if ('Verbo' in tipo) or ('Forma verbal' in tipo) or ( 'Verb' in tipo) or ('verb' in tipo): tipo = 'Verbo' elif ('Adjetivo' in tipo) or ('Forma adjetiva' in tipo) or ( 'Adj' in tipo) or ('adj' in tipo): tipo = 'Adjetivo' elif ('Sustantivo' in tipo) or ('Forma sustantiva' in tipo) or ('Sust' in tipo) or ('sust' in tipo): tipo = 'Sustantivo' break except: tipo = 'NoExiste' definicion = ' ' finally: return tipo, definicion
def main(palabra): defPal = [palabra] wik = Wiktionary(language="es") try: seccion = wik.search(palabra,type=SEARCH) except (URLTimeout, URLError): exit('Se acabó el tiempo de espera en la conexión. Por favor revise su conexión a internet e intente nuevamente.') if seccion != None: # Wikcionario valido try: tipo, definicion = tipoPal(seccion) except TypeError: sg.Popup('La palabra ingresada no es Verbo, Sustantivo o Adjetivo.',title='Tipo no identificado') # return defPal.append(tipo) defPal.append(definicion) if tag(palabra)[0][1] != defPal[1]: #Si la palabra no coincide con el pattern se guarda en el reporta guardarReporte(palabra + " :Pattern no coincide con Wiktionary.\n") sg.Popup('La palabra no pudo ser identificada correctamente.', title='Error en Wiktionary y Pattern') else: # Guarda la palabra en el archivo de palabras guardarPalabra(defPal) else: #No se encontro en el Wiktionary if (tag(palabra)[0][1] != 'NN'): #Pattern detecta palabras invalidas como NN defPal.append(tag(palabra)[0][1]) defPal.append(pedirDefinicion(palabra)) guardarPalabra(defPal) guardarReporte(palabra + ": La palabra no se encontro en Wiktionary.\n") else: sg.Popup('La palabra no se pudo reconocer, esta bien escrita?',title='Palabra no reconocida') guardarReporte(palabra + ": Palabra desconocida por Wiktionary y Pattern.\n")
def ingresarPalabra(dicPalabras, text): """Verifica que la palabra sea v�lida tanto en Wiktionary como en Pattern. la palabra existe, la clasifica en verbo/sustantivo/adjetivo y la agrega a la lista de palabras. Caso contrario, genera el reporte con una descripcion del error. Retorna verdadero o falso dependiendo si la palabra se inserto correctamente o no.""" try: clasificacion = clasificarPalabra(text) if esPalabraValida(text): if (clasificacion == 'VB'): enInfinitivo = conjugate(text, INFINITIVE) articulo = Wiktionary(language='es').search(enInfinitivo) elif (clasificacion == 'JJ'): adjetivo = attributive(text, gender=NEUTRAL) articulo = Wiktionary(language='es').search(adjetivo) elif (clasificacion == 'NN'): articulo = Wiktionary(language='es').search(text) aux = str(articulo.sections) if clasificacion == 'JJ' and 'ADJ' in aux.upper(): clasificacion = 'JJ' elif clasificacion == 'VB' and 'VERB' in aux.upper(): clasificacion == 'VB' elif clasificacion == 'NN' and 'SUST' in aux.upper(): clasificacion == 'NN' else: GenerarReporte('La definición de la palabra' + text + ' no coincide en Pattern y Wiktionary, se la clasificó como ' + clasificacion) if (clasificacion != 'JJ' and clasificacion != 'NN' and clasificacion != 'VB'): GenerarReporte('La palabra ' + text + ' no existe en pattern.') dicPalabras[clasificacion][text] = buscarDefinicion(text) return True else: if (clasificacion == 'JJ' or clasificacion == 'NN' or clasificacion == 'VB'): GenerarReporte('La palabra ' + text + ' no fue encontrada en Wiktionary pero si en pattern siendo un ' + clasificacion) dicPalabras[clasificacion][text] = sg.PopupGetText('Definición' 'No se ha encontrado la palabra en Wiktionary ni en Pattern. Ingrese una definición para la palabra: ') return True else: GenerarReporte('La palabra ' + text + ' no fue encontrada en Wiktionary y tampoco en pattern.') sg.Popup('La palabra ingresada no es válida. Se ha agregado esta situación en un reporte llamado ArchivoReporte.txt en el directorio.') except: GenerarReporte('La palabra ' + text + ' no es válida.') sg.Popup('La palabra ingresada no es válida. Se ha agregado esta situacion en un reporte ArchivoReporte.txt en el directorio.') return False
def validar_con_wikcionario(cls, palabra): """ :return (True, definicion) False en caso que la palabra no se encuentre en wikcionacio """ palabra = str(palabra.lower()) word = Wiktionary(palabra, language="es") if hasattr(word, "sections"): esp = palabra.sections[1] definition = esp.children[0].string return palabra, definition return False, False
def clasificarSegunWiktionary(palabra): '''Busca la clasificación dada por Wikcionary como principal o primera en orden de aparición. En el caso en que no se encuentre en Wikcionary, o no sea ningún tipo de los buscados, se define como "No clasificado"''' idioma = "es" buscados = ("sustantivo", "adjetivo", "verbo") busqueda = Wiktionary(language=idioma).search(buscar) if (busqueda != "None"): #Busca entre los títulos de las secciones las palabras dentro de la tupla "buscados". #Para ello pasa las palabras que encabezan los títulos de cada sección a minúscula, para no dificultar la búsqueda. vw = list((filter( (lambda section: section.title.split()[0].lower() == "verbo"), busqueda.sections))) aw = list((filter( (lambda section: section.title.split()[0].lower() == "adjetivo"), busqueda.sections))) sw = list((filter( (lambda section: section.title.split()[0].lower() == "sustantivo"), busqueda.sections))) #Se asigna un booleano a cada clasificación basándose en que se hayan encontrado las clasificaciones #correspondientes dentro de los títulos de secciones. esVerboWiki = len(vw) > 0 esAdjetivoWiki = len(aw) > 0 esSustantivoWiki = len(sw) > 0 print("Es verbo: ", esVerboWiki, ", es adjetivo: ", esAdjetivoWiki, ", es sustantivo: ", esSustantivoWiki) clasificacionW = "No clasificado" clasifiqueW = False sumaW = esVerboWiki + esAdjetivoWiki + esSustantivoWiki #Cada True suma 1, cada False suma 0. if (sumaW >= 1): #La palabra esta en el diccionario Wiki y es a/s/v #posee una o mas de una clasificacion cabeceras = [ ] #Guardo en esta lista las primeras palabras de cada título de sección, en minúscula. for section in busqueda.sections: cabeceras.append(section.title.split()[0].lower()) i = 0 #Inicializo un contador para recorrer los títulos guardados en la lista. #La búsqueda se detiene cuando logre clasificar la palabra según Wikcionary, o cuando se termine la lista. #Esta última condición se podría dar en el caso de que no fuera de ninguna de las 3 clasificaciones #usadas en la sopa de letras (por ejemplo, adverbios, preposiciones, etc.). while ((not clasifiqueW) and (i < len(cabeceras))): if (cabeceras[i] in buscados): clasificacionW = cabeceras[i] clasifiqueW = True else: i += 1 print("Clasificacion segun Wikcionary: ", clasificacionW) else: print("La palabra no se encuentra en Wikcionary.") return clasificacionW
def __verficar_palabra_wikcionario(self): ''' Verifica si la palabra existe en wikcionario y devuelve su tipo ''' buscador = Wiktionary(language='es') try: self.__objeto_buscador = buscador.search(self.__palabra, type=SEARCH) self.__tipo = self.__objeto_buscador.sections[3].title.split( )[0].lower() except (AttributeError, IndexError, pattern.web.URLError): print('Error') else: sg.Popup(self.__tipo, auto_close=True, auto_close_duration=1) return self.__tipo
def validarWiki(pal): #Devuelve adjective,noun,verb wik = Wiktionary(language='es') try: tipo = wik.search(pal, type=SEARCH).sections[3].title.split()[0].lower() secc = wik.search(pal, type=SEARCH).sections[3].string secc = secc.split('\n') for i in range(0, len(secc)): if (secc[i] != ''): if (secc[i][0] == '1'): defi = secc[i][1:] break return (True, tipo, defi) except: return (False, False, False)
def __verficar_palabra_wikcionario(self): ''' Verifica si la palabra existe en wikcionario y devuelve su tipo ''' buscador = Wiktionary(language='es') self.__objeto_buscador = buscador.search(self.__palabra, type=SEARCH) try: ##objeto_buscador es de tipo WiktionaryArticle self.__tipo = self.__objeto_buscador.sections[3].title.split( )[0].lower() except (AttributeError, IndexError): ##Hacer reporte de que no estaba en wikcionario sg.Popup('error') return None else: sg.Popup(self.__tipo) return self.__tipo
def clasificar_palabra(pal, dic_tipo1, lis_tipo2): w = Wiktionary(language="es") ok = False for clave in (list(dic_tipo1.keys())): if (pal in dic_tipo1[clave]): ok = True sg.Popup(pal + ' ya fue ingresada') if (not ok): p = w.search(pal, cached=False) s = parse(pal).split() #definicion de pattern.es defp = s[0][0][1] posL = buscar_tipo2(defp, lis_tipo2) try: #definicion de WIKTIONARY defw = (p.sections[3].title.split())[0] claveD = buscar_tipo1(defw, dic_tipo1) for i in range(len((list(dic_tipo1.keys())))): if (posL == i): if (posL != i): agregar_reporte(pal) if (pal not in dic_tipo1[claveD]): dic_tipo1[claveD].append(pal) #si no esta en WIKTIONARY except: i = 0 ok = True lista = list(dic_tipo1.keys()) for i in range(len((lista))): if (posL == i): if (pal not in dic_tipo1[lista[i]]): dic_tipo1[lista[i]].append(pal) ok = False if (not ok): layout2 = [[ sg.Text("Ingrese la definicion de la palabra {0} :".format( pal)) ], [sg.Input()], [sg.Button("Agregar")]] window2 = sg.Window("Definicion").Layout(layout2) event2, values2 = window2.Read() if (event2 is None): window2.Close() elif (event2 == "Agregar"): agregar_definicion(values2[0], pal) window2.Close() return dic_tipo1
def devuelve_definicion(unstring, clasificacion, color_interface): """ Devuelve una definicion dada por wiktionary, en casa de que no haya se le pide al usuario que ingrese una """ cat = Wiktionary(license=None, throttle=5.0, language='ES').search(unstring) definicion = '' encontre = False for elem in cat.sections: if clasificacion in elem.title.lower(): encontre = True if encontre: definicion = elem.content.split('1')[1].split('.2')[0].split( '*')[0] break if definicion == '': definicion = ingresar_definicion(color_interface) return definicion
def buscarDefinicion(palabra): """Recibe por parametro una palabra, busca su definicion en Wiktionary y retorna un string con dicha definicion.""" try: articulo = Wiktionary(language="es").search(palabra) for elemento in articulo.sections: if "Etimolog" in elemento.title: if "Si puedes," in elemento.content: definicion = palabra.title() else: definicion = elemento.content.split("[editar]")[1].split("\n\n")[1] if "[" in elemento.content.split("[editar]")[1].split("\n\n")[1]: definicion = definicion.split("[")[0] break else: definicion = palabra.title() except: definicion = palabra.title() return definicion
def buscarDefinicion(palabra): try: articulo = Wiktionary(language="es").search(palabra) for elemento in articulo.sections: if "Etimología" in elemento.title: if "Si puedes," in elemento.content: definicion = palabra.title( ) # Se puede poner que no tenga ayuda. No se encuentra en wiktionary else: definicion = elemento.content.split("[editar]")[1].split( "\n\n")[1] if "[" in elemento.content.split("[editar]")[1].split( "\n\n")[1]: definicion = definicion.split("[")[0] break else: definicion = palabra.title() except: definicion = palabra.title() return definicion
def clasificar_wikt(palabra): """Clasificación de las palabras segun wiktionary y obtención de su definición""" clasif = '_no_sabe_' sustantivo = 'NN' adjetivo = 'JJ' verbo = 'VB' for i in range(100000): sg.PopupAnimated(sg.DEFAULT_BASE64_LOADING_GIF, background_color='white', time_between_frames=100, location=(610, 183)) engine = Wiktionary(language="es") articulo = engine.search(palabra) sg.PopupAnimated(None) if articulo != None: pos_inicial = articulo.source.find('<dt>') pos_final = articulo.source.find('<dt>', pos_inicial + 1) definicion = plaintext(articulo.source[pos_inicial:pos_final]) definicion = definicion[1:] print('\n Def: *', definicion, '*', sep='') if ('ES:Sustantivos' in articulo.categories): print('Es un sustantivo según Wiktionary') return [palabra, definicion, sustantivo] elif ('ES:Adjetivos' in articulo.categories): print('Es un adjetivo según Wiktionary') return [palabra, definicion, adjetivo] elif ('ES:Verbos' in articulo.categories): print('Es un verbo según Wiktionary') return [palabra, definicion, verbo] if clasif == '_no_sabe_': print('Wiktionary no pudo clasificar la palabra') return [palabra, definicion, clasif] else: print('La palabra no se encuentra en Wiktionary') return [palabra, '_sin definicion_', clasif]
def buscardef(palabra, defi): """esta funcion se encarga de buscar las deficiones/etimologias de las palabras""" try: articulo = Wiktionary(language="es").search(palabra) for elemento in articulo.sections: if "Etimología" in elemento.title: if "Si puedes," in elemento.content: defi[palabra.title()] = palabra.title( ) # Se puede poner que no tenga ayuda. No se encuentra en wiktionary else: defi[palabra.title()] = elemento.content.split( "[editar]")[1].split("\n\n")[1] if "[" in elemento.content.split("[editar]")[1].split( "\n\n")[1]: defi[palabra.title()] = defi[ palabra.title()].split("[")[0] break else: defi[palabra.title()] = palabra.title() except: defi[palabra.title()] = palabra.title() return defi
def clasificarPalabraWiktionary(palabra): w = Wiktionary(language="es") a = w.search(palabra) encontre = '9999' try: clasificacion = a.sections[3].content.split()[0] if clasificacion.lower() == "sustantivo": encontre = 'NN' return encontre if clasificacion.lower() == "adjetivo" or clasificacion.lower( ) == "forma adjetiva": encontre = 'JJ' return encontre if clasificacion.lower() == "verbo" or clasificacion.lower( ) == "verbo intransitivo": encontre = 'VB' return encontre except (AttributeError): return 'No se pudo clasificar'
def PalabraWik(pal, dic, tipo): '''Va a buscar la palabra a Wiktionary y la clasifica en verbo, sustantivo o adjetivo segun la primer seccion por orden de relevancia, si la palabra no se encuentra en el diccionario de la pagina, se debera ingresar otra Luego si la palabra es encontrada devuelve verdadero y la agrega al diccionario segun su clasificacion ''' w = Wiktionary(language='es') correcto=False pal.lower() try: palabra = list(w.search(pal).sections) except(AttributeError): sg.Popup('Palabra no encontrada en Wiktionary') tipo = 'null' return correcto,tipo else: if(pal in dic['__verbos__']) or (pal in dic['__sustantivos__']) or (pal in dic['__adjetivos__']): pass else: for x in range(len(palabra)): seccion=str(palabra[x]) if('erb'in seccion) or ('ustantiv' in seccion) or ('djetiv' in seccion): #print(seccion) break if ('erb' in seccion): #Verbo o Forma Verbal dic['__verbos__'].append(pal) tipo= '__verbos__' correcto=True elif('Sustantivo' in seccion): dic['__sustantivos__'].append(pal) tipo = '__sustantivos__' correcto=True elif('djetiv' in seccion): #Adjetivo o Forma Adjetiva dic['__adjetivos__'].append(pal) tipo= '__adjetivos__' correcto=True return correcto, tipo
def Definicion(pal): '''Busca el articulo de la palabra en Wiktionary, selecciona la seccion con el tipo, se queda con las definiciones y devuelve todas las que encuentra''' definicion = ConsultarDefinicionJson(pal) if definicion: return definicion wi = Wiktionary(language='es') secciones = wi.search(pal).sections if len(secciones) > 3: seccion = secciones[2] else: seccion = secciones[3] etimologia = wi.MediaWikiSection.plaintext(seccion) for letra in range(len(etimologia)): if etimologia[letra] == '1': pos = letra break try: definicion = etimologia[pos:] except UnboundLocalError: definicion = etimologia return definicion
def obtenerDefinicion(palabra): w = Wiktionary(language="es") a = w.search(palabra) try: definicion = a.sections[3].content.split('1')[1].split('.2')[0].split( '*')[0] except (IndexError): try: definicion = a.sections[3].content.split('1')[0].split('*')[1] if ' ' in definicion[1]: try: definicion = a.sections[3].content.split('1')[0].split( '*')[2] except (IndexError): definicion = a.sections[3].content.split('1')[0].split( '*')[3] except (IndexError): definicion = a.sections[3].content.split('1')[0].split('*')[2] except (AttributeError): definicion = sg.Popup('Esta palabra no existe en wiki ni en pattern') msg = 'Clasificacion no encontrada en Wiktionary y Pattern' reporteClasificaciones(msg) return definicion
def validar_pal(self): lista_coordenadas_activas = self.enlistar_coordenadas_activas() puntaje = self.calcular_puntaje(lista_coordenadas_activas) w = Wiktionary(language="es") palabra_separada = [] for coor in lista_coordenadas_activas: palabra_separada.append(self.get_matriz()[coor[0]][coor[1]].get_letra()) palabra = ''.join(palabra_separada) analisis = parse(palabra.lower()).split('/') if analisis[1] == "JJ" or analisis[1] == "VB": self.set_palabra_definitiva(lista_coordenadas_activas) # la palabra es definitiva return (True, puntaje) elif (analisis[1] == "NN"): article=w.search(palabra.lower()) if article is not None: self.set_palabra_definitiva(lista_coordenadas_activas) # la palabra es definitiva self.desactivar_coordenadas_activas(lista_coordenadas_activas) return (True, puntaje) else: return (False, 0) else: return (False, 0)
def ingresoPalabra(dicc, caps, pal): """Ingresa una palabra y la asigna a un diccionario dependiendo el tipo de palabra. Ademas de agregar la palabra agrega su definicion. El tipo de palabra lo busca en Wiktionary al igual que su definicion. En caso de que la palabra no se encuentre sera agregado al archivo 'errores'.""" try: article = Wiktionary(language='es').search(pal.lower()) listaTipo = [] titulos = ['Adjetivo', 'Forma adjetiva', 'Verbo', 'Verbo transitivo', 'Forma verbal', 'Sustantivo femenino', 'Sustantivo masculino'] indiceFull = False for i in range(len(article.sections)): listaTipo.append(article.sections[i].title) if article.sections[i].title in titulos and indiceFull == False: indice = i indiceFull = True titleText = article.sections[indice].content.find('1') line = article.sections[indice].content[titleText + 1:] indexTo = line.partition('\n')[0].find('[') definition = line[:indexTo] if caps: pal.upper() if 'Adjetivo' in listaTipo or 'Forma adjetiva' in listaTipo: dicc['Adjetivo'].append((pal, definition)) elif 'Verbo transitivo' in listaTipo or 'Forma verbal' in listaTipo or 'Verbo' in listaTipo: dicc['Verbo'].append((pal, definition)) elif 'Sustantivo masculino' in listaTipo or 'Sustantivo femenino' in listaTipo: dicc['Sustantivo'].append((pal, definition)) except AttributeError or TypeError: sg.Popup('La palabra no se encuentra en Wiktionary, sera informado al desarollador.', title='Palabra no encotrada') errores = open('Errores.txt', 'a+') errores.write(pal + '\n') errores.close() except: sg.Popup('Lamentamos informar que el error es desconocido.', title='Error desconocido')
def clasificar_pal(un_string, color_interface): """ Se clasifica la palabra segun sea adjetivo, verbo o sustantivo mediante pattren.es y wiktionary y se agrega a sus correspondiente lista y se guarda la definicion dicha por wiktinary de la palabra, en caso de que no coincidan se generan reportes de las palabras que tienen conflictos entre los modulos. si coinside solo con Wiktionary, y no se obtiene un definicion, se pide que ingrese la definicion de la palabra , en los demas casos se tomara la definicion solo de Wiktionary y siempre se guararan en un archivo local. """ pal = Wiktionary(license=None, throttle=5.0, language='ES').search(un_string) try: if un_string in dicPalabras['verbos'] or un_string in dicPalabras['adjetivos'] \ or un_string in dicPalabras['sustantivos']: sg.Popup('la palabra ingresada ya existe', title='Error', background_color=color_interface, text_color='red') else: secciones = [] for section in pal.categories: secciones.append(section) if ('ES:Verbos' in secciones) and (buscar_pattern(un_string) == 'VB'): if un_string not in dicPalabras['verbos']: dicPalabras['verbos'].append(un_string) definicion = devuelve_definicion(un_string, 'verbo', color_interface) reporte(definicion, 'ArchivoLocal') elif (buscar_pattern(un_string) != 'VB') and ( 'ES:Verbos' in secciones): # si no coincide con pattern if un_string not in dicPalabras['verbos']: dicPalabras['verbos'].append(un_string) msj = f'la palabra {un_string} no se encuentra en pattern pero si en Wiktionary.\n' reporte(msj, 'reporte') definicion = devuelve_definicion(un_string, 'verbo', color_interface) reporte(definicion, 'ArchivoLocal') elif 'ES:Verbos' not in secciones and buscar_pattern( un_string) == 'VB': # si no coincide con wiktionary if un_string not in dicPalabras['verbos']: dicPalabras['verbos'].append(un_string) msj = ingresar_definicion(color_interface) reporte(msj, 'ArchivoLocal') elif 'ES:Adjetivos' in secciones and buscar_pattern( un_string) == 'JJ': if un_string not in dicPalabras['adjetivos']: dicPalabras['adjetivos'].append(un_string) definicion = devuelve_definicion(un_string, 'adjetivo', color_interface) reporte(definicion, 'ArchivoLocal') elif buscar_pattern( un_string) != 'JJ' and 'ES:Adjetivos' in secciones: if un_string not in dicPalabras['adjetivos']: dicPalabras['adjetivos'].append(un_string) msj = f'la palabra {un_string} no se encuentra en pattern pero si en Wiktionary.\n' reporte(msj, 'reporte') definicion = devuelve_definicion(un_string, 'adjetivo', color_interface) reporte(definicion, 'ArchivoLocal') elif 'ES:Adjetivos' not in secciones and buscar_pattern( un_string) == 'JJ': if un_string not in dicPalabras['adjetivos']: dicPalabras['adjetivos'].append(un_string) msj = ingresar_definicion(color_interface) reporte(msj, 'ArchivoLocal') elif 'ES:Sustantivos' in secciones and buscar_pattern( un_string) == 'NN': if un_string not in dicPalabras['sustantivos']: dicPalabras['sustantivos'].append(un_string) definicion = devuelve_definicion(un_string, 'sustantivo', color_interface) reporte(definicion, 'ArchivoLocal') elif buscar_pattern( un_string) != 'NN' and 'ES:Sustantivos' in secciones: if un_string not in dicPalabras['sustantivos']: dicPalabras['sustantivos'].append(un_string) msj = f'la palabra {un_string} no se encuentra en pattern pero si en Wiktionary.\n' reporte(msj, 'reporte') definicion = devuelve_definicion(un_string, 'sustantivo', color_interface) reporte(definicion, 'ArchivoLocal') elif 'ES:Sustantivos' not in secciones and buscar_pattern( un_string) == 'NN': if un_string not in dicPalabras['sustantivos']: dicPalabras['sustantivos'].append(un_string) msj = ingresar_definicion(color_interface) reporte(msj, 'ArchivoLocal') else: msj = f'la palabra {un_string} no se encuentra en pattern y tampoco en Wiktionary.\n' sg.Popup( f'la palabra {un_string}, no existe en pattern y tampoco en Wiktionary', background_color=color_interface, text_color='white', title='Error') reporte(msj, 'reporte') except AttributeError: sg.Popup('Ingrese una palabra valida', background_color=color_interface, text_color='white')
[sg.Submit('Agregar'), sg.Button('Siguiente')]] ventanaPal = sg.Window('Palabras').Layout(diseñoPalabras) listaJSONPal = [] strDef = '' listaCantPal = cantTipos() print(listaCantPal) contSustantivos, contAdjetivos, contVerbos = 0, 0, 0 while True: event, values = ventanaPal.Read() if event is None: exit(0) elif event == 'Agregar': w = Wiktionary(language="es") p = w.search(values['palabra'], type='search', start=1, count=10) strTipo = '' try: artic = p.plaintext().split('\n') strNuevo = ' - '.join(artic) if 'Sustantivo' in strNuevo: strTipo = 'NN' elif 'Adjetivo' in strNuevo: strTipo = 'JJ' elif 'Verbo' in strNuevo: strTipo = 'VB' except AttributeError: sg.Popup('La palabra no existe.') strTipo = None
def verificar_wiktionary(self,palabra): w = Wiktionary(language="es") article = w.search(palabra) # si la palabra no la encuentra article = None #print(article) esClasificado=False cadena="" if not article is None: for section in article.sections: if 'ustantiv' in section.title: cadena = 'sustantivo' esClasificado=True break #el break va para que informe solo el primero y luego salga elif 'djetiv' in section.title: cadena = 'adjetivo' esClasificado=True break #idem anterior elif 'erb' in section.title: cadena = 'verbo' esClasificado=True break #idem anterior else: cadena="problema_wik" defini="" if esClasificado: # ******* A CONTINUACIÓN EN EL "TRY" ******* # a[0].content es un string que contiene el título de Etimología + un espacio en blanco + definición de la palabra # Convierto en lista el string anterior para filtrar, en una nueva lista, el título de Etimología + el espacio en blanco # La lista "lis" contendrá sólo la definición de la palabra try: b = list(filter(lambda x: x.title == "Español",article.sections)) #print(b[0].children) a = list(filter(lambda x: x.title in "Etimología",b[0].children)) #defini=a[0].content listaDefinicion = [] listaDefinicion = (a[0].content).split('\n') li = list(filter(lambda x: x != '' and "Etimología" not in x, listaDefinicion)) defini = '\n'.join(li) except IndexError: #Carga sólo definicion, si tiene clasificacion de wiki, pero sin el Popup, sino con una ventana diseñoo=[ [sg.Text("Ingrese una definición"),sg.InputText(key="definicion")], [sg.Submit("Agregar"), sg.Submit("Cancelar")] ] window=sg.Window("Agregar Definición").Layout(diseñoo) while True: boton,valores= window.Read() if boton is None: valores["definicion"] = "sinDefinicion" break if boton == "Cancelar": valores["definicion"] = "sinDefinicion" break if boton == "Agregar": defini = valores["definicion"] break defini = valores["definicion"] #se cierra ventana. Si presiona "Cancelar", la ventana se cierra y los valores son iguales a None window.Close() return [cadena,esClasificado,defini]
def validar_palabra(word): '''validar_palabra devolvera una lista con dos elementos. En el primero un booleano indicando si la palabra es válida (o no), y el segundo es un diccionario donde la clave es la palabra, y el valor es la definicion ''' lis_resultados = [None, None] #lista a retornar. if (not word.isalpha()): sg.PopupError( 'Lo ingresado no es válido. Ingrese solo palabras, por favor') lis_resultados[0] = False return (lis_resultados) lis_tipo_validos = ["sustantivo", "adjetivo", "verbo"] wik = Wiktionary(language="es") valida = False ok = False while (ok == False): article = wik.search(word) try: lis_sections = list(article.sections) title_aux = [] lis_sections.pop( 0 ) # saco de la lista el primer elemento que, es siempre, la misma palabra buscada. tipo = "zzz" ok = True for section in lis_sections: title = section.title # guardo en title el titulo correspondiente a cada seccion title_aux = title.split(" ") tipo = evaluar(title_aux, tipo) if ( tipo != "zzz" ): #esto sucede cuando la palabra encontrada es de alguno de los tipos tratatos en evaluar() if tipo in lis_tipo_validos: definicion = buscar_definicion(word, section.string) if definicion != "error": valida = True else: valida = False definicion = None if (tipo != tipo_pattern(word)): generar_reporte( word, "La palabra es valida, sin embargo algunos criterios de busqueda pudieron diferir" ) else: definicion = None break lis_resultados[0] = valida lis_resultados[1] = {tipo: [word, definicion]} return lis_resultados except AttributeError: # Error en el caso de que la palabra no exista en wiktionary tipo_aux = tipo_pattern(word) lis_consul = consulta( word, tipo_aux ) #consulta devolvera una lista, donde la primer posicion indica la validez de la palabra, y la segunda una definicion. Aqui hay bastante interaccion con el usuario if (lis_consul[0] == False): generar_reporte( word, "La palabra no es valida, ya que ningun criterio de busqueda pudo determinarla" ) lis_resultados[0] = lis_consul[0] lis_resultados[1] = {tipo_aux: [word, lis_consul[1]]} return lis_resultados
import os, sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..")) from pattern.web import Wiktionary, DOM from pattern.db import csv, pd # This example retrieves male and female given names from Wiktionary (http://en.wiktionary.org). # It then trains a classifier that can predict the gender of unknown names (about 78% correct). # The classifier is small (80KB) and fast. w = Wiktionary(language="en") f = csv() # csv() is a short alias for Datasheet(). # Collect male and female given names from Wiktionary. # Store the data as (name, gender)-rows in a CSV-file. # The pd() function returns the parent directory of the current script, # so pd("given-names.csv") = pattern/examples/01-web/given-names.csv. for gender in ("male", "female"): for ch in ("abcdefghijklmnopqrstuvwxyz"): p = w.search("Appendix:%s_given_names/%s" % (gender.capitalize(), ch.capitalize()), cached=True) for name in p.links: if not name.startswith("Appendix:"): f.append((name, gender[0])) f.save(pd("given-names.csv")) print(ch, gender) # Create a classifier that predicts gender based on name.
def buscar_en_wiktionary(palabra): ##resultado = buscar_en_wiktionary(palabra) # resultado tiene los campos: # 'palabra' [str] la que busqué # 'clasif_wik' [str] si se encontro en wiktionario # 'clasif_patt' [str] si se encontro en pattern # 'definicion' [str] si se encontro en wiktionario # los campos que no se pudieron recuperar tendran None resultado = {} resultado['palabra'] = palabra resultado['clasificacion_wiktionario'] = None resultado['definicion'] = None resultado['clasificacion_pattern'] = None #return resultado # ~ engine = Wikipedia(license=None, throttle=5.0, language=None) # ~ engine.search("dodo", # ~ start = 1, # Starting page. # ~ count = 10, # Results per page. # ~ size = None, # Image size: TINY | SMALL | MEDIUM | LARGE # ~ cached = True) # Cache locally? # ~ from pattern.web import Bing, SEARCH, plaintext # ~ engine = Bing(license=None) # Enter your license key. # ~ for i in range(1,5): # ~ for result in engine.search('holy handgrenade', type=SEARCH, start=i): # ~ print(repr(plaintext(result.text))) # ~ print() engine = Wiktionary(language="es") palabra = palabra.lower() sch = engine.search(palabra) debug(palabra) # ~ debug(vars(sch)) # ~ debug(dir(sch)) if sch != None: # ~ debug(sch.string) # ~ debug(sch.source) pos_1 = sch.source.find('<dt>1</dt>') if pos_1 == -1: debug(pos_1) pos_1 = sch.source.find('<dt>') debug(pos_1) pos_cierre_1 = sch.source.find('</dt>', pos_1 + 1) #busca a partir de pos 1 debug(pos_cierre_1) else: pos_cierre_1 = pos_1 pos_2 = sch.source.find('<dt>2</dt>', pos_1 + 1) if pos_2 == -1: debug(pos_2) pos_2 = sch.source.find('<dt>', pos_1 + 1) debug(pos_2) pos_cierre_2 = sch.source.find('</dt>', pos_2 + 1) else: pos_cierre_2 = pos_2 print(pos_cierre_1, pos_2) debug(sch.source[pos_cierre_1:pos_2]) debug(plaintext(sch.source[pos_cierre_1:pos_2])) pos_punto = plaintext(sch.source[pos_cierre_1:pos_2]).find('.') definicion = plaintext(sch.source[pos_cierre_1:pos_2]) debug(definicion[:pos_punto + 1]) if definicion[:1] == '1': debug(definicion[1:pos_punto + 1]) # ~ debug(sch.title) # ~ debug(sch.categories) # ~ debug(sch.sections) # ~ debug(dir(sch.sections[0])) # ~ for section in sch.sections: # ~ for children in section.children: # ~ if section.title == 'Español' or section.title == palabra: # ~ debug(section) # ~ debug(section.content) # ~ debug(section.string) # ~ debug(section.children) # ~ for sub in section.children: # ~ debug(sub) # ~ debug(sub.content) # ~ patron = re.compile('a[3-5]+') # ~ if len(section.children) > 1: # ~ debug(section.children[1]) # ~ sss= section.children[1].content # ~ debug(sss) # ~ s1 = sss.find('1') # ~ s_ = sss.find('.') # ~ s2 = sss.find('2') # ~ debug(sss[s1:s_+1]) # ~ if('ES:Sustantivos' in sch.categories): # ~ print('es sustantivo!') # ~ if('ES:Adjetivos' in sch.categories): # ~ print('es Adjetivo!') # ~ if('ES:Verbos' in sch.categories): # ~ print('es verbo!') else: print('No la encuentra!!')