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 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 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 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 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 __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 __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 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 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 comprobarWik(self, pal): w = Wiktionary(language='es') pal = pal.lower() palabra = w.search(pal) if palabra == None: if sg.PopupYesNo('¿Escribio bien la palabra?') == 'Yes': layout = [[sg.Text('Ingrese su definición.')], [sg.InputText(key='defi')], [sg.Text('Ingrese su tipo.')], [ sg.Checkbox('Adjetivo', key='adj'), sg.Checkbox('Sustantivo', key='sus'), sg.Checkbox('Verbo', key='verb', default=False) ], [sg.OK(key='OK')]] ingDef = sg.Window('Ingrese definicion').Layout(layout) bot, val = ingDef.Read() if (val['adj'] == True): self.Adjetivos[pal] = val['defi'] print('SE AGREGO LA PALABRA A CATEGORIA ADJETIVOS.') elif (val['sus'] == True): self.Sustantivos[pal] = val['defi'] print('SE AGREGO LA PALABRA A CATEGORIA SUSTANTIVOS.') elif (val['verb'] == True): self.Verbos[pal] = val['defi'] print('SE AGREGO LA PALABRA A LA CATEGORIA VERBOS.') ingDef.Close() else: for elem in palabra.sections: if 'adjetiva' in elem.title: #LLAMADA A METODO COMPROBAR PATTERN QUE DEVUELVE TRUE O FALSE #print('LA PALABRA NO SE ENCUENTRA EN PATTERN, SE TOMA DEFINICION DE WIKCIONARY.') self.Adjetivos[pal] = palabra.sections[2].content self.cantAdj = self.cantAdj + 1 print('SE AGREGO LA PALABRA A CATEGORIA ADJETIVOS.') break if 'Verbo' in elem.title: #LLAMADA A METODO COMPROBAR PATTERN QUE DEVUELVE TRUE O FALSE #print('LA PALABRA NO SE ENCUENTRA EN PATTERN, SE TOMA DEFINICION DE WIKCIONARY.') self.Verbos[pal] = palabra.sections[2].content self.cantVerbos = self.cantVerbos + 1 print( 'SE AGREGO LA PALABRA PALABRA A LA CATEGORIA VERBOS.') break if 'Forma verbal' in elem.title: #LLAMADA A METODO COMPROBAR PATTERN QUE DEVUELVE TRUE O FALSE #print('LA PALABRA NO SE ENCUENTRA EN PATTERN, SE TOMA DEFINICION DE WIKCIONARY.') self.Verbos[pal] = palabra.sections[2].content self.cantVerbos = self.cantVerbos + 1 print( 'SE AGREGO LA PALABRA PALABRA A LA CATEGORIA VERBOS.') break if 'Sustantivo' in elem.title: #LLAMADA A METODO COMPROBAR PATTERN QUE DEVUELVE TRUE O FALSE #print('LA PALABRA NO SE ENCUENTRA EN PATTERN, SE TOMA DEFINICION DE WIKCIONARY.') self.Sustantivos[pal] = palabra.sections[2].content self.cantSus = self.cantSus + 1 print('SE AGREGO LA PALABRA A CATEGORIA SUSTANTIVOS.') break if 'Sustantiva' in elem.title: #LLAMADA A METODO COMPROBAR PATTERN QUE DEVUELVE TRUE O FALSE #print('LA PALABRA NO SE ENCUENTRA EN PATTERN, SE TOMA DEFINICION DE WIKCIONARY.') self.Sustantivos[pal] = palabra.sections[2].content self.cantSus = self.cantSus + 1 print('SE AGREGO LA PALABRA A CATEGORIA SUSTANTIVOS.') break if 'Adjetivo' in elem.title: #LLAMADA A METODO COMPROBAR PATTERN QUE DEVUELVE TRUE O FALSE #print('LA PALABRA NO SE ENCUENTRA EN PATTERN, SE TOMA DEFINICION DE WIKCIONARY.') self.Adjetivos[pal] = palabra.sections[2].content self.cantAdj = self.cantAdj + 1 print('SE AGREGO LA PALABRA A CATEGORIA ADJETIVOS.') break
from pattern.web import Wiktionary, DOM from pattern.db import csv # 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. 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("given-names.csv") print ch, gender # Create a classifier that predicts gender based on name. from pattern.vector import SVM, chngrams, count, kfoldcv class GenderByName(SVM): def train(self, name, gender=None): SVM.train(self, self.vector(name), gender)
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
# 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. from pattern.vector import SVM, chngrams, count, kfoldcv class GenderByName(SVM): def train(self, name, gender=None): SVM.train(self, self.vector(name), gender)
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 '_Ninguna_' resultado = {} resultado['palabra'] = palabra resultado['clasificacion_wiktionario'] = '_Ninguna_' resultado['definicion'] = '_Ninguna_' resultado['clasificacion_pattern'] = '_Ninguna_' engine = Wiktionary(language="es") sch = engine.search(palabra) print('\n Buscar "', palabra, '" en Wiktionario', sep='') if sch != None: pos_1 = sch.source.find('<dt>1</dt>') if pos_1 == -1: pos_1 = sch.source.find('<dt>') pos_cierre_1 = sch.source.find('</dt>', pos_1 + 1) #busca a partir de pos 1 else: pos_cierre_1 = pos_1 pos_2 = sch.source.find('<dt>2</dt>', pos_1 + 1) if pos_2 == -1: pos_2 = sch.source.find('<dt>', pos_1 + 1) pos_cierre_2 = sch.source.find('</dt>', pos_2 + 1) else: pos_cierre_2 = pos_2 print('\n slice: ', 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])[:pos_punto + 1] if definicion[:1] == '1': definicion = definicion[1:pos_punto + 1] print('\n Def: *', definicion, '*', sep='') cat = '_no_sabe_' if ('ES:Sustantivos' in sch.categories): print('\n Wiktionary dice que es Sustantivo!') cat = 'sust' if ('ES:Adjetivos' in sch.categories): print('\n Wiktionary dice que es Adjetivo!') if cat == '': cat = 'adj' else: cat = 'MIXTA' if ('ES:Verbos' in sch.categories): print('\n Wiktionary dice que es verbo!') if cat == '': cat = 'verb' else: cat = 'MIXTA' if cat == '_no_sabe_': print('\n Wiktionary no la clasificó!') resultado['clasificacion_wiktionario'] = cat resultado['definicion'] = definicion else: print('\n No se encontró en Wiktionary') cat_pattern = buscar_en_pattern(palabra) if cat_pattern != '_Ninguna_': if cat_pattern[: 1] == 'N': #me fijo la primera letra del tag que e sla significativa print('\n Pattern dice que es Sustantivo!') cat_pattern = 'sust' if cat_pattern[:1] == 'V': print('\n Pattern dice que es Verbo!') cat_pattern = 'verb' if cat_pattern[:1] == 'J': print('\n Pattern dice que es Adjetivo!') cat_pattern = 'adj' resultado['clasificacion_pattern'] = cat_pattern return resultado
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!!')
def main(args): columna1 = [[sg.Listbox(values='', size=(30, 5), key='listbox')]] columna2 = [[ sg.Text('Color Sustantivos:', font=('Roboto', 13)), sg.InputCombo(('Verde', 'Azul', 'Amarillo'), size=(22, 1), key='colors') ], [ sg.Text('Color Adjetivos: ', font=('Roboto', 13)), sg.InputCombo(('Azul', 'Amarillo', 'Verde'), size=(22, 1), key='colora') ], [ sg.Text('Color Verbos: ', font=('Roboto', 13)), sg.InputCombo(('Amarillo', 'Verde', 'Azul'), size=(22, 1), key='colorv') ]] layout = [[sg.Text('Seleccione un tipo de ayuda: ', font=('Roboto', 13))], [ sg.Radio('Mostrar Palabras', 'RADIO1', default=False, size=(40, 1), font=('Roboto', 13), key='ayudaP') ], [ sg.Radio('Mostrar cantidad de Sustantivos/Adjetivos/Verbos', 'RADIO1', default=True, size=(40, 1), font=('Roboto', 13), key='ayudaC') ], [ sg.Radio('Mostrar definicion de palabras', 'RADIO1', default=True, size=(40, 1), font=('Roboto', 13), key='ayudaD') ], [ sg.Text('Elegir orientacion de palabras:', font=('Roboto', 13)), sg.Radio('Horizontal', 'RADIO2', default=True, size=(10, 1), font=('Roboto', 13), key='horizontal'), sg.Radio('Vertical', 'RADIO2', default=True, size=(10, 1), font=('Roboto', 13), key='vertical') ], [ sg.Text('Elegir Mayuscula/Minuscula:', font=('Roboto', 13)), sg.Radio('Mayuscula', 'RADIO3', default=False, size=(10, 1), font=('Roboto', 13), key='mayuscula'), sg.Radio('Minuscula', 'RADIO3', default=True, size=(10, 1), font=('Roboto', 13), key='minuscula') ], [ sg.Text('Elegir tipografia:', font=('Roboto', 13)), sg.InputCombo(('Helvetica', 'Roboto', 'Arial', 'Comic Sans', 'Tahoma', 'Calibri'), size=(22, 1), key='tipografia') ], [ sg.Text('Cantidad de Sustantivos a mostrar:', font=('Roboto', 13)), sg.InputCombo(('0', '1', '2', '3', '4', '5'), font=('Roboto', 13), key='cans') ], [ sg.Text('Cantidad de Adjetivos a mostrar: ', font=('Roboto', 13)), sg.InputCombo(('0', '1', '2', '3', '4', '5'), font=('Roboto', 13), key='cana') ], [ sg.Text('Cantidad de Verbos a mostrar: ', font=('Roboto', 13)), sg.InputCombo(('0', '1', '2', '3', '4', '5'), font=('Roboto', 13), key='canv') ], [sg.Column(columna1), sg.Column(columna2)], [ sg.Text('Ingrese las palabras a descubrir:', font=('Roboto', 13)), sg.InputText(key='palabra') ], [ sg.Text('Ingrese la palabra a eliminar:', font=('Roboto', 13)), sg.InputText(key='borrarPal') ], [ sg.Submit('Agregar'), sg.Submit('Eliminar'), sg.Cancel('Salir'), sg.Submit('Guardar') ]] inicio = [[ sg.Text('Sopa de letras! ', font=('Roboto', 18), justification='center', size=(20, 1)) ], [ sg.Submit('Iniciar Juego', font=('Roboto', 14)), sg.Submit('Configuracion', font=('Roboto', 14)), sg.Cancel('Cancelar', font=('Roboto', 14)) ]] palabrasClasificadas = {} palabrasClasificadas['sustantivos'] = [] palabrasClasificadas['adjetivos'] = [] palabrasClasificadas['verbos'] = [] listaPalabras = [] listaBox = [] window = sg.Window('Bienvenidos!!').Layout(inicio) button, values = window.Read() inicio = True config = False data = [] cantVerbos = 0 cantSust = 0 cantAdj = 0 dicClasificacion = {} while inicio: if button == 'Iniciar Juego': mainSopa() break if button == 'Cancelar': break if button == 'Configuracion': inicio = False config = True archivoPalabras = open('archivos/palabras.txt', 'w') archivoClasificadas = open('archivos/palabrasClasificadas.txt', 'w') archReporte = open('archivos/reporte.txt', 'w') window = sg.Window('Configuracion').Layout(layout) button, values = window.Read() while config: if button == 'Agregar': #aca empieza wiktionary wiktionary = Wiktionary(language='es') articulo = wiktionary.search(values['palabra']) try: #print(articulo) sustantivo = '' adjetivo = '' verbo = '' encontre = False misCLasific = [ 'Sustantivo', 'Adjetivo', 'Verbo', 'Forma Verbal', 'Sustantivo intransitivo', 'Sustantivo transitivo', 'Sustantivo masculino', 'Verbo intransitivo', 'Verbo transitivo', 'Sustantivo femenino' ] for section in articulo.sections: if not encontre: titulo = section.title print(section.title) if section.title in misCLasific[ 0] or section.title in misCLasific[ 4] or section.title in misCLasific[ 5] or section.title in misCLasific[ 6] or section.title in misCLasific[ 9]: print('entra1') sustantivo = 'NN' dicClasificacion[ values['palabra']] = 'sustantivo' encontre = True elif section.title in misCLasific[1]: print('entra2') adjetivo = 'JJ' dicClasificacion[ values['palabra']] = 'adjetivo' encontre = True elif section.title in misCLasific[ 2] or section.title in misCLasific[ 3] or section.title in misCLasific[ 7] or section.title in misCLasific[ 8]: print('entra3') verbo = 'VB' dicClasificacion[ values['palabra']] = 'verbo' encontre = True else: break print(dicClasificacion) clasificoPat = parse(values['palabra']).split() if clasificoPat[0][0][1] == verbo: listaBox.append(values['palabra']) if (cantVerbos < int(values['canv'])): palabrasClasificadas['verbos'].append( values['palabra']) listaPalabras.append(values['palabra']) cantVerbos += 1 elif clasificoPat[0][0][1] == sustantivo: listaBox.append(values['palabra']) if (cantSust < int(values['cans'])): palabrasClasificadas['sustantivos'].append( values['palabra']) listaPalabras.append(values['palabra']) cantSust += 1 elif clasificoPat[0][0][1] == adjetivo: listaBox.append(values['palabra']) if (cantAdj < int(values['cana'])): palabrasClasificadas['adjetivos'].append( values['palabra']) listaPalabras.append(values['palabra']) cantAdj += 1 else: archReporte.write('La palabra: ' + values['palabra'] + ' no coincide con pattern\n') #print(clasificoPat) #print(palabrasClasificadas) window.Element('listbox').Update(listaBox) except: archReporte.write('La palabra: ' + values['palabra'] + ' no se encuentra\n') button, values = window.Read() if button == 'Eliminar': if values['borrarPal'] in listaPalabras: listaBox.remove(values['borrarPal']) listaPalabras.remove(values['borrarPal']) for valor in palabrasClasificadas.keys(): if values['borrarPal'] in palabrasClasificadas[ valor]: palabrasClasificadas[valor].remove( values['borrarPal']) window.Element('listbox').Update(listaPalabras) button, values = window.Read() if button == 'Salir': break if button == 'Guardar': json.dump(palabrasClasificadas, archivoClasificadas, indent=4) for pal in listaPalabras: archivoPalabras.write(pal + '\n') archConfig = open('archivos/configuracion.txt', 'w') datos = {} #elijo si deseo ayuda if values['ayudaP']: datos['ayuda'] = 'palabras' elif values['ayudaC']: datos['ayuda'] = 'clasificacion' else: datos['ayuda'] = 'definicion' #se elige la orientacion de las palabras a buscar if values['horizontal']: datos['orientacion'] = 'horizontal' else: datos['orientacion'] = 'vertical' #se elige las letras en mayusculas o minusculas if values['mayuscula']: datos['mayuscula'] = 'mayuscula' else: datos['mayuscula'] = 'minuscula' #se elige tipografia a utilizar datos['tipografia'] = values['tipografia'] #se elige color para sustantivos, adjetivos y verbos. if (values['colors'] == 'Amarillo'): datos['colors'] = 'yellow' elif (values['colors'] == 'Verde'): datos['colors'] = 'green' elif (values['colors'] == 'Azul'): datos['colors'] = 'blue' if (values['colora'] == 'Verde'): datos['colora'] = 'green' elif (values['colora'] == 'Azul'): datos['colora'] = 'blue' elif (values['colora'] == 'Amarillo'): datos['colora'] = 'yellow' if (values['colorv'] == 'Azul'): datos['colorv'] = 'blue' elif (values['colorv'] == 'Amarillo'): datos['colorv'] = 'yellow' elif (values['colorv'] == 'Verde'): datos['colorv'] = 'green' #Se elige cuantos sustantivos, adjetivos y verbos datos['cans'] = values['cans'] datos['cana'] = values['cana'] datos['canv'] = values['canv'] data.append(datos) json.dump(data, archConfig, indent=4) archConfig.close() config = False archivoPalabras.close() button, values = window.Read() window.Close()
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 IngresarEliminarPal(lista, cant, wincon): """Modulo el cual realiza el ingreso de palabras como tambien la eliminacion de las mismas""" pal = [[sg.Input(key='palabra'), sg.Button('Ingresar')], [ sg.Table(values=lista, headings=['Palabra', 'Tipo'], key='tabla', def_col_width=16, auto_size_columns=False) ], [sg.Input(key='elim'), sg.Button('Eliminar')], [sg.Button('Aceptar')]] winpal = sg.Window('Ingresar Palabras', pal) while True: event, values = winpal.Read() if event == 'Aceptar' or event is None: break if event == 'Eliminar': for i in lista: if values['elim'] in i: tipo = i[1] lista.remove(i) winpal.FindElement('tabla').Update(values=lista) if tipo == 'sustantivo': cant['sus'] = cant['sus'] - 1 wincon.FindElement('cantsus').Update(value='/' + str(cant['sus'])) else: if tipo == 'adjetivo': cant['adj'] = cant['adj'] - 1 wincon.FindElement('cantadj').Update(value='/' + str(cant['adj'])) else: if tipo == 'verbo': cant['verb'] = cant['verb'] - 1 wincon.FindElement('cantverb').Update( value='/' + str(cant['verb'])) if event == 'Ingresar': engine = Wiktionary(language='es') if values['palabra'] == '': sg.Popup('No se ingresó una palabra') else: palabra = values['palabra'] result = engine.search(palabra) jeh = parse(palabra) if ('NN' in jeh or 'NNS' in jeh or 'NNP' in jeh or 'NNPS' in jeh): tipop = 'sustantivo' else: if ('JJ' in jeh or 'JJR' in jeh or 'JJS' in jeh): tipop = 'adjetivo' else: if ('VB' in jeh): tipop = 'verbo' else: sg.Popup( 'La palabra no se reconoce como adjetivo, sustantivo o verbo en el modulo pattern' ) tipop = 'sad' if (not result == None): flag = True for i in range(len(result.sections)): if ('Etimología' in str(result.sections[i]) and flag): busqueda = result.sections[i + 1].string flag = False if ('Sustantivo' in busqueda or 'sustantivo' in busqueda): tipo = 'sustantivo' else: if ('Adjetivo' in busqueda or 'adjetivo' in busqueda or 'adjetiva' in busqueda): tipo = 'adjetivo' else: if ('Verbo' in busqueda or 'verbal' in busqueda): tipo = 'verbo' else: tipo = 'malo' escribir = False definicion = '' if not tipo == 'malo': for i in busqueda: if escribir == True: if i == '2': break definicion = definicion + i else: if i == '1': escribir = True if not tipo == tipop: infoError(palabra, tipop, tipo) if tipo == 'malo': tipo = tipop sg.Popup( 'La palabra no se reconoce como verbo, adjetivo o sustantivo en wiktionary' ) else: if (not tipop == 'sad'): definicion = sg.PopupGetText( 'La palabra no se encontró en wiktionary pero si en pattern, por favor, ingrese una definición:', 'Error') tipo = tipop if (not tipo == 'malo' and not tipo == 'sad'): lista.append([palabra, tipo, definicion]) if tipo == 'sustantivo': cant['sus'] = cant['sus'] + 1 wincon.FindElement('cantsus').Update(value='/' + str(cant['sus'])) else: if tipo == 'adjetivo': cant['adj'] = cant['adj'] + 1 wincon.FindElement('cantadj').Update( value='/' + str(cant['adj'])) else: if tipo == 'verbo': cant['verb'] = cant['verb'] + 1 wincon.FindElement('cantverb').Update( value='/' + str(cant['verb'])) winpal.FindElement('tabla').Update(values=lista) difinicion = '' palabra = '' tipo = '' winpal.Close()
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 finally:
def search_wiktionary(word): wiki = Wiktionary(language='es') data = wiki.search(word) return data
def definirPalabra(p, palabras, definiciones): """ Define el tipo de palabra y su definición en base a Wikcionario. Se toma como definición la sección ETIMOLOGÍA de Wikcionario, de no tenerla se pide que se ingrese una definición. Si la palabra no existe en Wikcionario utiliza el tipo que retorna Pattern y pide que se ingrese una definición. De no encontrar la palabra en ninguno de los dos recursos se informa de la situación y no se considera para la sopa. El método retorna dos diccionarios: uno con palabras y otro con definiciones. EL método también escribe en el archivo reporte.txt las situaciones a informar según pide el trabajo. """ repo = open('reporte.txt', 'a') encontre = False hayDef = False tipoW = None contenido = None defi = None wiki = Wiktionary(language='es') article = wiki.search(p) if article != None: for section in article.sections: if hayDef == False: if (section.title).upper() == 'ETIMOLOGÍA': defi = section.content[21:] hayDef = True print(defi) if encontre == False: if (section.title).upper() in ('ADJETIVO', 'FORMA ADJETIVA'): encontre = True tipoW = 'adjetivo' elif (section.title).upper() in ('VERBO', 'VERBO TRANSITIVO', 'VERBO INTRANSITIVO', 'FORMA VERBAL'): encontre = True tipoW = 'verbo' elif (section.title).upper() in ( 'SUSTANTIVO', 'SUSTANTIVO FEMENINO', 'SUSTANTIVO MASCULINO', 'SUSTANTIVO PROPIO', 'SUSTANTIVO MASCULINO Y FEMENINO', 'SUSTANTIVO FEMENINO Y MASCULINO'): encontre = True tipoW = 'sustantivo' print("tipo W=" + str(tipoW)) if p not in palabras[tipoW]: palabras[tipoW].append(p) if defi != None: definiciones[p] = defi else: defi = sg.PopupGetText( 'No se encontró una definición en Wikcionario para ' + str(p) + ' .Ingrese una: ') if defi != None and defi not in ("", " "): definiciones[p] = defi else: sg.Popup("Ya ha ingresado esa palabra") return palabras else: tipoW = "" print(tipoW) if p.lower() in verbs or p.lower() in lexicon or p.lower() in spelling: tipoP = clasificar(p) print(tipoP) else: tipoP = "" if tipoW == "" and tipoP == "": aux2 = str( p) + ': La palabra no existe en Wikcionario ni en Pattern \n' repo.write(aux2) sg.Popup(aux2) elif tipoW == "" and tipoP != "": if p not in palabras[tipoP]: palabras[tipoP].append(p) defi = text = sg.PopupGetText('Ingresar definición para ' + str(p)) if defi != None and defi not in ("", " "): definiciones[p] = defi else: sg.Popup("Ya ha ingresado esa palabra") return palabras elif tipoW != tipoP: aux = str( p ) + ': el tipo de palabra de Pattern no coincide con la de Wikcionario \n' repo.write(aux) sg.Popup(aux) return palabras, definiciones
def identificador(palabra): """"Retorno una lista con la palabra y que tipo es para mandarla a la tabla """ palabra = palabra.lower() #solo encuntra palabras en minuscula engine = Wiktionary(license=None, throttle=5.0, language="es") match = False wik = False patt = False lis = [] try: art = engine.search(palabra) section = art.sections except AttributeError: section = "error" if section != "error": lis = section[3] descr = section[3].string descr = (((( descr.split("2"))[0].split("1"))[1]).split("*")[0]).split("\n")[0] if ("Sustantivo" in lis.title) or ("Adjetivo" in lis.title) or ("Verbo" in lis.title): tag = lis.title.split(" ")[0] lis = [palabra, tag, descr] wik = True try: patt_es = parse(palabra, tokenize=False, tags=True, chunks=False).split("/")[1] patt = True except AttributeError: patt_es = "error" if patt_es != "error": print(patt_es) if wik is False: definicion = sg.PopupGetText( "Palabra No Encontrada en wiki", "Ingrese definicion") ## para guardar en archivo local if "NN" in patt_es: lis = [palabra, "Sustantivo", definicion] elif "VB" in patt_es: lis = [palabra, "Verbo", definicion] elif "JJ" in patt_es: lis = [palabra, "Adjetivo", definicion] if wik is True: if(("NN" in patt_es) and ("Sustantivo" in tag)) or (("VB" in patt_es) and ("Verbo" in tag)) or\ (("JJ" in patt_es) and ("Adjetivo" in tag)): match = True patt = True if (wik is False) or (patt is False) or (match is False): file = open("reporte.txt", "a+") fechahora = datetime.now().strftime("%d/%m/%Y %H:%M:%S") reporte = "" if (wik is False) and (patt is True): reporte = "La palabra " + palabra + " no fue encontrada en wiki. " + fechahora elif (wik is True) and (patt is False): reporte = "La palabra " + palabra + " no fue encontrada en pattern.es. " + fechahora elif (wik is False) and (patt is False): reporte = "La palabra " + palabra + " no fue encontrada en ninguno de los dos sitios. " + fechahora elif (match is True): reporte = "La clasificacion de la palabra " + palabra + " no conicide. " + fechahora file.write(reporte) file.write("\n") file.close() return lis