Ir al contenido

elmoyer

Moderadores
  • Contenido

    593
  • Registrado

  • Última Visita

  • Días Ganando

    12

Todo el contenido de elmoyer

  1. todo depende diría yo... no es lo mismo escribir un script en python que un script en C. Lo que yo me pregunto es si merece la pena escribir para el compilador o si con escribir código limpio bastaría.
  2. Código actualizado y mejorado(si el archivo ya se encuentra ya ha sido descargado y sigue estando en el directorio destino pasara al siguiente archivo. Es decir, solo descarga aquellos archivos que no están en la carpeta de tus descarga MagPi)
  3. Añado a la lista otro lenguaje muy interesante! Groovy
  4. Buenas tarde, hoy vamos a trabajar con uno de los campos más interesantes(a mi parecer) de la lingüística computacional, word-sense disambiguation(desambiguación del significado de la palabra). Para ello vamos a usar nuestro querido NLTK y su módulo de WordNet así que vamos a ello! WordNet es una base de datos léxica del idioma inglés. Agrupa palabras en inglés en conjuntos de sinónimos llamados synsets, proporcionando definiciones cortas y generales, y almacena las relaciones semánticas entre los conjuntos de sinónimos. Su propósito es doble: producir una combinación de diccionario y tesauro cuyo uso sea más intuitivo, y soportar análisis automático de texto y a aplicaciones de Inteligencia Artificial. La base de datos y las herramientas del software se han liberado bajo una licencia BSD y pueden ser descargadas y usadas libremente. Además la base de datos puede consultarse en línea. Sinónimos y significados[senses and Synonyms]: Consideremos las siguientes frases: 1) Raquel tuvo un accidente con el coche. [\*Ya que WordNet es para inglés sustituiremos coche por motorcar*/] 2) Raquel tuvo un accidente con el automovil. [\*Ya que WordNet es para inglés sustituiremos coche por automobile*/] Las frases 1) y 2) tienen el mimos significado, por lo tanto podemos decir que son sinónimos. Gracias a NLTK y a su módulo de WordNet, podemos explorar la palabra "motorcar". Para ello iniciaremos como siempre nuestro querido python desde terminal e importaremos NLTK: elmoyer@tutorial:~$ python Python 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import nltk Tras importar NLTK, ya solo nos queda importar también el módulo de WordNet para poder trabajar con él: >>> from nltk.corpus import wordnet as wn Ese "as wn" es para que no tengamos que escribir siempre wordnet cuando vayamos a usar el módulo y se puede sustituir por wn o por lo que queramos. Una vez importado ya podemos empezar a jugar con los synsets: >>> wn.synsets('motorcar') [Synset('car.n.01')] Como vemos, motorcar solo tiene un significado posible que esta designado como "car.n.01", es decir el primer sustantivo con el significado coche. La entidad "car.n.01" se denomina "synset" o "set de sinónimos"(colección de palabras sinónimas o lemas). Para poder ver que palabras entran dentro de este synset, lo único que tenemos que escribir es: >>> wn.synsets('dry') \\Cambiamos de ejemplo y usamos "dry" [Synset('dry.n.01'), Synset('dry.v.01'), Synset('dry.v.02'), Synset('dry.a.01'), Synset('dry.s.02'), Synset('dry.a.03'), Synset('dry.a.04'), Synset('dry.a.05'), Synset('dry.a.06'), Synset('dry.a.07'), Synset('dry.s.08'), Synset('dry.s.09'), Synset('dry.s.10'), Synset('dry.s.11'), Synset('dry.s.12'), Synset('dry.s.13'), Synset('dry.s.14'), Synset('dry.s.15'), Synset('dry.s.16')] >>> wn.synset('dry.n.01').lemma_names() \\Vemos que palabras están dentro de este synset [u'dry', u'prohibitionist'] Cada synstes de una palabra puede tener distintos significados. Sin embargo a nosotros lo que nos interesa es el significado de cada palabra que forma el synstet. Estaría bien saber que significa cada palabra, ¿no?: >>> wn.synset('dry.n.01').definition() u'a reformer who opposes the use of intoxicating beverages' ¿Y qué tal un ejemplo también?: >>> wn.synset('dry.v.01').examples() [u'dry clothes', u'dry hair'] Como veís he tenido que migrar al synster de "dry" como verbo(v) y que el synset "dry.n.01" no tenía ejemplos: >>> wn.synset('dry.n.01').examples() [] Otra posibilidad que nos ofrece el módulo de WordNet, es obtener todos los lemas de un synset: >>> wn.synset('dry.n.01').lemmas() [Lemma('dry.n.01.dry'), Lemma('dry.n.01.prohibitionist')] O incluso buscar un lema en concreto: >>> wn.lemma('dry.n.01.dry') Lemma('dry.n.01.dry') O obtener el synset correspondiente a un lema: >>> wn.lemma('dry.n.01.dry').synset() Synset('dry.n.01') U obtener el "nombre"/"designación" de un lema: >>> wn.lemma('dry.n.01.dry').name() u'dry' Sin embargo, hay palabras que se podrían considerar ambiguas. En el campo de la lingüística, para ser más concretos en la sintaxis, decimos que una frase es ambigua cuando tienes mas de un árbol(distintas formas en las que se puede anañizar una frase). Esto se puede extrapolar también en este caso a las palabras de WordNet, es decir, decimos que una palabra puede ser ambigua cuando tiene distintos synsets. Así que volvemos a cambiar de ejemplo y vamos otra vez con "car": >>> wn.synsets('car') [Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), Synset('car.n.04'), Synset('cable_car.n.01')] Como vemos, tenemos 5 synsets que se diferencian notablemente unos de otros. Llegados a este punto, podríamos pensar que nos hemos quedado atascados y que nos llevaría mucho tiempo saber cual es el synset con el que queremos trabajar. Sin embargo la solución es muy sencilla, lo único que tenemos qu hacer es ver que palabras están dentro de los synsets y de esta forma elegir aquel con el que queríamos trabajar: >>> for synset in wn.synsets('car'): ... print(synset.lemma_names()) ... ['car', 'auto', 'automobile', 'machine', 'motorcar'] ['car', 'railcar', 'railway_car', 'railroad_car'] ['car', 'gondola'] ['car', 'elevator_car'] ['cable_car', 'car'] La jerarquia de WordNet: WordNet intenta facilitar la navegación entre los conceptos. para ser más especificos estos conceptos pueden ser: Sustantivos: hiperonimia (hypernymy, can hiperónimo de perro). hiponimia (hyponymy, perro es un hipónimo de can). términos coordinados (coordinate terms, lobo y perro son términos coordinados puesto que ambos son cánidos). holonimia (holonymy, edificio es un holónimo de ventana). Verbos: hiperonimia (hypernymy) troponimia (troponym) consecuencia lógica (entailment) términos coordinados (coordinate terms) Adjetivos: sustantivos relacionados similar a participios de verbos Adverbios La raíz de los adjetivos Un ejemplo de hyponyms con NLTK sería: >>> wn.synsets('sky') [Synset('sky.n.01'), Synset('flip.v.06')] >>> sky = wn.synset('sky.n.01') >>> types_of_sky = sky.hyponyms() >>> types_of_sky[0] Synset('blue_sky.n.01') >>> sorted(lemma.name() for synset in types_of_sky for lemma in synset.lemmas()) [u'blue', u'blue_air', u'blue_sky', u'mackerel_sky', u'wild_blue_yonder'] Un ejemplo de hypernyms con NLTK sería: >>> sky.hypernyms() [Synset('atmosphere.n.05')] Como se puede ver en la imagen, WordNet tiene distintas jerarquía y el root sería la "entidad". Pero podemos "navergar" por todos sus recorrido y ver el "largo" de la jerarquia de una palabra en concreto: >>> paths = sky.hypernym_paths() >>> len(paths) 1 >>> [synset.name() for synset in paths[0]] [u'entity.n.01', u'physical_entity.n.01', u'matter.n.03', u'fluid.n.02', u'gas.n.02', u'atmosphere.n.05', u'sky.n.01'] También podemos ir al "root", que sería la entidad que encontramos arriba del todo en la imagen: >>> sky.root_hypernyms() [Synset('entity.n.01')] Ahora vamos con meronimias y holonimias: >>> wn.synset('sky.n.01').part_meronyms() [Synset('cloud.n.02'), Synset('rainbow.n.01')] Por hoy eso es todo, espero poder hacer algo para la semana que viene con similitud semántica Un saludo!
  5. Poco queda para que deje de ser así Python, sobre todo por lo mucho que se puede hacer con muy pocos conocimientos. Sin embargo yo creo que aquellos que nos hemos metido en algo que tiene que ver con programación no nos quedamos quietos si sólo nos enseñan un lenguaje. Personalmente y por gusto e interés me metí en perl, Ruby, HTML(a pesar que no se considere lenguaje de programación), CSS3, JavaScript y estoy con Go!. Por obligación tengo que seguir con Java el próximo curso y en mi lista de tareas pendientes tengo PHP, Swift, C(++, # ), bases de datos(Mongo y SQL), R, Lua y alguna que me habré dejado
  6. Bienvenido, disfruta de la fuente de saber que está por ahí instalada
  7. Ánimo con ese Go! Yo si tuviese tiempo me ponía ahora mismo a ello... y ten en cuenta que Java vas a tener que darlo obligatoriamente, aprovecha y prueba con otras cosas que las clases te las vas a tener que preparar de todas formas
  8. Go es el lenguaje de Google, se puede incluso desarrollar alguna apk con Go. Yo diría que es interesante, al igual que Ruby que también permite con algún modulo crear una APK Perl vs Python...un eterno dilema, pero una vez leí(no se donde) que a los programadores se les recomendaba tener conocimientos de 2 o 3 lenguajes de scripting. Lua al principio si que estaba más pensado para videojuegos, pero por ejemplo en Kali Linux hay unas cuantas cosas programadas en Lua y no es una distro orientada a los videojuegos... otro ejemplo, los wathcfaces que puedes instalar en los smartwatches(como mínimo en LG), están programados en Lua
  9. ¿Has pensado en otros lenguajes? En mi lista , además de C(o C++) y Java, tengo: Go Ruby Lua JavaScript Perl R Programming También podrías jugar con PHP o incluso con bases de datos no relacionales(MongoDB por ejemplo). Yo antes de decidir que lenguaje elegir, leo un code del lenguaje o lenguajes en cuestión y me pongo con el que más me haya impactado o gustado...
  10. Yo en la universidad empecé con Python y Java lo doy ahora. Sin embargo lo mismo que te digo que adoro Python, te digo que odio Java... creo que soy mas de programación scripting. Yo lo veo así, los que nos dedicamos a algo relacionado con la informática y programación, tenemos siempre el gusanillo de aprender un lenguaje nuevo. Así que ya que vas a tener que dar Java si o si, aprovecha ahora y ponte con otro de forma que tengas uno más en la lista.
  11. Feliz navidad compañeros!
  12. Yo quiero comprarme uno, pero no se exactamente cual. Ayer encontré este cable
  13. Buenos días compañeros, como bien indica nuestro nombre(gnulinuxvagos) somos un tanto vagos así que ¿para qué ir a la pagina de RaspBerry Pi para descargar una a una las revistas gratuitas que nos ofrecen para comprender y dominar a esta pequeña compañera? Para eso ejecutamos el siguiente código bash y listo Código: #!/bin/bash cd ~ mkdir Revistas\ RaspBerry\ Pi/ cd Revistas\ RaspBerry\ Pi/ wget -nc https://www.raspberrypi.org/magpi-issues/MagPi01.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi02.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi03.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi04.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi05.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi06.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi07.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi08.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi09.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi10.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi11.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi12.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi13.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi14.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi15.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi16.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi17.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi18.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi19.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi20.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi21.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi22.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi23.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi24.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi25.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi26.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi27.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi28.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi29.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi30.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi31-spread.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi32.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi33.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi34.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi35.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi36.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi37.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi38.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi39.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi40.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi41.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi42.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPi43.pdf wget -nc https://www.raspberrypi.org/magpi-issues/Projects_Book_v1.pdf wget -nc https://www.raspberrypi.org/magpi-issues/MagPiSE1.pdf Para comenzar con la descarga sólo hace falta abrir un terminal y escribir: sh downloader.sh Espero que a alguien le sea útil. Un saludo!
  14. Buena pregunta, solo hace falta esperar para ver que pasa... pero dudo que Goolge deje colgados a los que tienen que usar si o si 32bits
  15. Gracias! Ayer estaba pensando "a ver cuando saco algo de tiempo y busco un buen manual"
  16. @@portaro Pues para hacer pruebas en el localhost la puedes poner en la misma carpeta donde tienes el CSS, JS e index.html. Yo uso XAMPP para todo lo que es diseño web etc y creo recordar que funciona...
  17. Hay que usar MySQL u otra base de datos... de MySQL vas a encontrar mucha información, pero a mi me llama mucho más MongoDB if(isset($HTTP_POST_VARS["id"]) && isset($HTTP_POST_VARS["nick"]) && isset($HTTP_POST_VARS["comentario"])) { if($HTTP_POST_VARS["comentario"] != "") { if($HTTP_POST_VARS["nick"] == "") { $nickNuevo = "anonimo"; } else { $nickNuevo = $HTTP_POST_VARS["nick"]; } $resultCom2 = mysql_query("SELECT id FROM comentarios ORDER BY id DESC LIMIT 0,1"); $rowCom2 = mysql_fetch_array($resultCom2); $con = $rowCom2["id"]; mysql_free_result($resultCom2); $con++; $idNoticia = $HTTP_POST_VARS["id"]; $comentarioNoticia = $HTTP_POST_VARS["comentario"]; mysql_query("INSERT INTO comentarios VALUES ('$con','$idNoticia','$nickNuevo','$comentarioNo ticia')"); echo "Comentario enviado.<BR>Espere Unos Segundos...<SCRIPT LANGUAGE="javascript">window.location.href = "".getenv('HTTP_REFERER')."";</SCRIPT>"; } else { echo "Debe introducir un comentario."; } } Esto enviaría el comentario a tu base de datos. Para mostrar los comentarios, haces un "print" de la base de datos: <? //select para decir que campos queremos mostrar $sql = "SELECT nombre,nick FROM personas"; $retval = mysql_query( $sql, $conexion); //recorre toda la tabla de SQL while($row = mysql_fetch_assoc($retval)){ echo "Nombre: ".$row['nombre'].", Nick: ".$row['nick']."<br>"; } ?> Y ya tendría que estar Pero también creo que se podría hacer todo por HTML, HTML tiene el método indexeddb... pero no estoy muy seguro
  18. Bienvenido compañero! Ánimo con el estudio del LPIC espero poder empezar con ello yo también algún día!
  19. Después de la entrada de CCG, vamos a pasar hoy a las DRT(discourse representation theory). El discourse representation theory es un formalismo lingüístico que intenta explorar el significado de las frases desde un enfoque semántico. Lo curioso es que se realiza de una forma visual y por ello es más cómodo trabajar con las DRT en NLTK. Vamos a comenzar. Como me imagino que sabéis, necesitamos abrir un terminal, escribir python e importar los módulos necesarios: >>> import nltk >>> from nltk.sem.drt import * >>> from nltk.sem import logic >>> from nltk.inference import TableauProver Una vez importado todo, vamos a centrarnos en nuestra frase de ejemplo: "If a farmer owns a donkey, he beats it". Podríamos decir que la frase se puede dividir en dos partes: If a farmer owns a donkey he beats it. Una vez que tenemos claro que podemos dividir la frase en dos, comenzamos a trabajar con NLTK. Importados los módulos necesarios, comenzamos a definir las propiedades o características de las palabras que contiene nuestra frase. Pero antes tenemos que decirle a NLTK que la DRT se leerá mediante un string: >>> dexpr = DrtExpression.fromstring #Comienza la declaración de las propiedades de las palabras >>> farmer_x=dexpr('farmer(x)') #granjero definido >>> donkey_y=dexpr('donkey(y)') #burro definido >>> owns_xy=('owns(x, y)') #posesión definida >>> x = dexpr('x') #x = nombre de entidad (granjero) >>> y = dexpr('y') #y = nombre de entidad (burro) Tenemos que tener en cuenta que en las DRT "sólo" nos interesan los sustantivos, verbos, adjetivos y adverbios. Por lo tanto podríamos decir que tenemos una serie de "bag of words list"(bolsa de lista de palabras?) que son nuestras stop words o palabras que carecen de importancia. Por lo tanto ni el condicional "if", ni los determinantes "un" y artículos nos sirven para nada. Una vez definido todo, podríamos obtener el DRT de la primera parte de la frase, "si un granjero tiene un burro". Es algo tan sencillo como añadir un print y ya lo tenemos: >>> print(DRS([x, y], [farmer_x, donkey_y, owns_xy])) ([x, y],[farmer(x), donkey(y), owns(x, y)]) Para que nos sea más fácil el trabajar con la frase, vamos a dividirla en 2. Ya tenemos la primera parte, así que vamos a guardarla en la variable drs1: >>> drs1 = dexpr('([x, y], [farmer(x), donkey(y), owns(x, y)])') Sin embargo muchas veces, cuando se habla de DRT, solemos referirnos a la función que acabamos de imprimir en pantalla pero en una caja. Y resulta bastante curioso el método usado por NLTK para incrustarlo en la caja, ya que la función que se encarga de eso es pretty_format() o sea imprimir en un formato bonito: >>> print(drs1.pretty_format()) ___________ | x y | |-----------| | farmer(x) | | donkey(y) | | owns(x,y) | |___________| Vamos ahora a por la segunda parte de la frase!. La segunda parte es la de "lo golpea". Tenemos que tener en cuenta 2 cosas: 1) con he nos estamos refiriendo a farmer. 2) con it nos estamos refiriendo a donkey. Sin embargo tenemos que darle otros valores que no sean X e Y para que en la caja no ponga en la parte superio "X Y" ya que si pusiese eso, la DRT sería incorrecta. Comenzamos con lo mismo, definimos valores: >>> he_z= dexpr('(x=z)') >>> it_u = dexpr('(y=u)') >>> beats_zu = ('beats(z, u)') Ahora definimos los nombres de las nuevas entidades: >>> z = dexpr('z') >>> u = dexpr('u') Imprimimos para comprobar si esta bien y para poder guardarlo como drs2: >>> print (DRS([z, u], [he_z, it_u, beats_zu])) ([u,z],[(x = z), (y = u), beats(z, u)]) Guardamos el resultado como la variable drs2: >>> drs2 = dexpr('([u,z],[(x = z), (y = u), beats(z, u)])') Imprimimos para ver si tiene algún fallo con el método pretty_format(): >>> print(drs2.pretty_format()) ____________ | u z | |------------| | (x = z) | | (y = u) | | beats(z,u) | |____________| Ahora solo queda unir las dos DRS que tenemo, por lo tanto lo lógico sería pensar que algo como esto uniría la frase y serviría: >>> drs3 = drs1 + drs2 >>> print(drs3.pretty_format()) ___________ ____________ | x y | | u z | (|-----------| + |------------|) | farmer(x) | | (x = z) | | donkey(y) | | (y = u) | | owns(x,y) | | beats(z,u) | |___________| |____________| Sin embargo al ser todo una misma frase tiene que estar dentro de otra caja que recoja las dos cajas. Además tendremos que quitar el mas y sustituirlo por un simbolo de implicacion. Para ello haremos lo siguiente: >>> drs_final = dexpr(r"([],[([x, y], [farmer(x), donkey(y), owns(x, y)]) -> ([u,z],[(x = z), (y = u), beats(z, u)])])").pretty_print() ___________________________________ | | |-----------------------------------| | ___________ ____________ | | | x y | | u z | | | (|-----------| -> |------------|) | | | farmer(x) | | (x = z) | | | | donkey(y) | | (y = u) | | | | owns(x,y) | | beats(z,u) | | | |___________| |____________| | |___________________________________| Y fin de la historia, no hay mas que hacer
  20. Bienvenido!!! A disfrutar de la experiencia
  21. Yo sinceramente intentaría volver restaurar la tablet y a ver si con suerte no se ha perdido nada o puedes reinstalar el SO de fabrica. Tienes que tener en cuenta que no se trata de un equipo "normal". Y antes de ponerse a intentar instalar X miraría si los que necesitas para tu proyecto es compatible con Debian. Para el equipo de sobremesa que comentas recomendaría algo facilito como mint(y eso que no soy nada de mint pero para principiantes esta bien) y si quieres un poco mas de emoción la distro de VagOS que tenemos una estupenda guía de instalación
×
×
  • Crear Nuevo...