Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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')
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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")
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
 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
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
 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
Ejemplo n.º 13
0
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
Ejemplo n.º 15
0
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
Ejemplo n.º 16
0
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
Ejemplo n.º 17
0
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]
Ejemplo n.º 18
0
 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
Ejemplo n.º 19
0
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'
Ejemplo n.º 20
0
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
Ejemplo n.º 21
0
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
Ejemplo n.º 22
0
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
Ejemplo n.º 23
0
    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)
Ejemplo n.º 24
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')
Ejemplo n.º 26
0
                  [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
Ejemplo n.º 27
0
    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]
Ejemplo n.º 28
0
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
Ejemplo n.º 29
0
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.
Ejemplo n.º 30
0
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!!')