Example #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
Example #2
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)
Example #3
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")
Example #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)
Example #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
Example #6
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')
 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
Example #8
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
Example #9
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
Example #10
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]
Example #11
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'
Example #12
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
Example #13
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
Example #14
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
Example #15
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)
Example #16
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
Example #17
0
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)
Example #18
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]
Example #19
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
# 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)
Example #21
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 '_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
Example #22
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!!')
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()
Example #24
0
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
Example #25
0
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:
Example #27
0
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