mgaitan / preciosa

Inteligencia colectiva contra la inflación
http://preciosdeargentina.com.ar
Other
68 stars 40 forks source link

Realizar algoritmo que infiera detalles a partir de descripción #82

Closed mgaitan closed 10 years ago

mgaitan commented 10 years ago

Necesitamos un algoritmo que infiera detalles (marca, contenido, unidad_medida) partir de la descripción en "texto crudo".

Ejemplo que de "Leche en polvo desc b9 la serenisima 200gr" que sepa encontrar "marca" -> la serenisa , "contenido"-> 200, "unidad medida"-> gramos

Los resultados de este algoritmo serán revisados por voluntarios, posiblemente integrado a #37

Una idea

sanchezg commented 10 years ago

Tincho, yo me encargo si no sos exigente con la calidad del codeo, ni el tiempo (dame hasta el finde)... ;) Esta nochecita empiezo.

mgaitan commented 10 years ago

espectacular :)

2014-02-17 20:55 GMT-03:00 sanchezg notifications@github.com:

Tincho, yo me encargo si no sos exigente con la calidad del codeo, ni el tiempo (dame hasta el finde)... ;) Esta nochecita empiezo.

— Reply to this email directly or view it on GitHubhttps://github.com/mgaitan/preciosa/issues/82#issuecomment-35334354 .

mgaitan.github.io textosyprextextos.com.ar

sanchezg commented 10 years ago

Bueno, tengo algo funcionando pero es en python, alguien me da una mano para pasarlo a django? Algún librito me recomendás para leer?

mgaitan commented 10 years ago

Gonza, mandanos lo que tengas y lo revisamos. Pegalo en gist.github.com o si queres mandá un PR con el script en la carpeta /tools

En realidad yo lo que sospecho es que a Django sólo lo necesitamos para "darle de comer" info al algoritmo (decirle, por ejemplo, un listado de palabras que son Marcas)

genial que hayas podido encarar esto solito, que gente grosa y autodidacta que hay en la facu, che !

2014-02-20 9:48 GMT-03:00 Gonzalo Sanchez notifications@github.com:

Bueno, tengo algo funcionando pero es en python, alguien me da una mano para pasarlo a django? Algún librito me recomendás para leer?

— Reply to this email directly or view it on GitHubhttps://github.com/mgaitan/preciosa/issues/82#issuecomment-35617900 .

mgaitan.github.io textosyprextextos.com.ar

mgaitan commented 10 years ago

@sanchezg remember subir lo que tenga ;-)

sanchezg commented 10 years ago

Aca deje algo: https://gist.github.com/sanchezg/9181003 Luego sigo con ello... Avisame si sirve o se te ocurre algo para mejorarlo... ;)

ajlopez commented 10 years ago

Hola gente!

Interesante el codigo de Python. E interesante el issue, todo lo que hay que resolver.

Bien, estuve jugando con implementar este algoritmo en JavaScript, con modelo en memoria. Y exponerlo via una API web usando Node

Pueden probar lo que describe

https://github.com/ajlopez/Annalisa/tree/master/samples/preciosa

Luego sigo con algunos detalles (podria hasta intentar ponerlo en linea en Heroku, creo)

Vermu con papa fritas y gud show!

ajlopez commented 10 years ago

Deploye en heroku

Pueden probar http://preciosaannalisa.herokuapp.com/api/analyze?q=fanta%20pomelo%201%20lt

tambien tienen search http://preciosaannalisa.herokuapp.com/api/search?q=arcor%20jugo

@ajlopez

mgaitan commented 10 years ago

\o/ es ZAR-PA-DO. Hoy intentaré armar scripcito que chupe "desde django" tu magia. (ya que invertiste la infraestructura: vos te armaste el webservice, entonces en vez de pushear datos a preciosa, vamos a pullearlos, \o/ great!)

Dos cositas

http://preciosaannalisa.herokuapp.com/api/analyze?q=fideo%20favorita%20500gr funca completito

http://preciosaannalisa.herokuapp.com/api/analyze?q=fideos%20favorita%20500gr se pierde la categoria

http://preciosaannalisa.herokuapp.com/api/analyze?q=fideo%20spaghetti%20favorita%20500gr

no le da bola a spaghetti

http://preciosaannalisa.herokuapp.com/api/analyze?q=spaghetti%20favorita%20500gr

no tiene idea donde poner eso.

Sé que esto último es complicado porque debependerá de la granularidad de las categorias. pero no se puede intentar algo como... "esto es categoria, esto marca, esto peso: me quedó esta palabra spaghetti y entonces infiero que es subcategoria" / palabra clave ?

Luego, si no reconozco marca alguna (ultimo caso), pero algun otro producto tiene esa "subcategoria"/palabra clave, puedo ofrecer la misma categoria de ese a este.

¿como lo ves?

ajlopez commented 10 years ago

Bien ahi las pruebas!

Bien, issue de no reconoce "fideos", lo voy a arreglar. Escribo test, fixeo, y voila. Solo dejenme ver cuando lo hago (de hoy jueves al sabado temprano esta, solo que ahora paso a luchar contra el efecto coto http://ajlopez.zoomblog.com/archivo/2008/10/17/el-Efecto-Coto.html y hoy a las 7 de la tarde, cuando me liberan un poco, hay meetup de Erlang aca en Buenos Aires )

Bien, por que tendria que darle bola a spaghetti? No entiendo de donde inferir que vaya a categoria Fideos. Sin embargo, no todo esta perdido ;-)

Hay un archivo de reglas adicionales a lo que traigo del fixture:

https://github.com/ajlopez/Annalisa/blob/master/samples/preciosa/reglas.json

justo habia puesto un ejemplo: de longaniza, infiere categoria fiambres. Algo asi se podria hacer. Lo que no vi (los json de fixture son medio ilegibles ;-) es si te referis que spaghetti esta por ahi definido como fideo.

Lo de las palabras que quedan fuera... hmmm... inferir que es subcategoria me parece peligroso. Veamos en el uso, que palabras van quedando fuera. en el proyecto de samples/preciosa hay un directorio data con algunos scripts. podria pasar el analyze por todos los productos, y ver que palabras no intervienen en analisis... good!

Estoy arreglando el tema "2,5 lt" -> "volumen: 5", que reconozca coma y punto decimal. De aca al sabado queda deployado

Tambien estoy avanzado en el search de #80 con palabra aproximada

ajlopez commented 10 years ago

Recien deployado, nueva version de analyze con regla para spaguetti spaghetti

Ver http://preciosaannalisa.herokuapp.com/api/analyze?q=fideo%20favorita%20500gr funca completito

http://preciosaannalisa.herokuapp.com/api/analyze?q=fideos%20favorita%20500gr NO se pierde la categoria

http://preciosaannalisa.herokuapp.com/api/analyze?q=fideo%20spaghetti%20favorita%20500gr SI le da bola a spaghetti

http://preciosaannalisa.herokuapp.com/api/analyze?q=spaghetti%20favorita%20500gr SI tiene idea donde poner eso.

Tambien empezo a reconocer "2.5 lt" como 2.5 litros. Tambien acepta coma decimal.

Algun caso de uso mas?

Jeje... lo de "..empezo a reconocer.. " me suena a Skynet ;-)

@ajlopez

ajlopez commented 10 years ago

Esto debe ser trivial para Uds., pero escribi unos scripts python de comando de linea, para consultar el preciosa annalisa de Heroku

https://github.com/ajlopez/PythonSamples/tree/master/Preciosa

mgaitan commented 10 years ago

Bueno, damos por cerrado este ticket con d02a039

Sin embargo, hay detallitos que hay que mejorar. @ajlopez desde el lado de Annalisa, las categorias devueltas deberian ser sólo las de 3º nivel, y excluyendo las categoria del root "A CLASIFICAR" (porque esas iran a parar a otra parte).

Por otra parte hay que "sanear" un poco algunos datos ya guardados en la base. Por ejemplo, productos medidos en "cc" (ml) están asociados como litros. En vez de 0.5 litro queda 500 litros !

Ejemplos:

http://dpaste.com/1692016/

Una posibilidad es mejorar el command manager para que el flag --force sea más fino, por atributo. Es decir --force-unidad, --force-categoria, etc, que indican que se debe sobreescribir lo que exista en favor de lo que dice Annalisa.

Pueden probar el comando ustedes?

python manage.py annalisa

saludos!

ajlopez commented 10 years ago

Bien ahi, que tengan el comando para consultar annalisa

Lo de las categorias a 3er nivel, hmm .. lo dejaria del lado de python. Asi queda annalisa sugiriendo aunque sea categorias de 2do nivel, si no encuentra algo en el 3er nivel. Si del lado de python ven que algo queda en 2 nivel o 1 nivel, lo mandan a un lado a clasificar, pero ya acotado a ese nivel

De esa manera queda mas desacoplado de cambios en los niveles de arbol y demas

Algun caso que de "feo" el resultado?

Recuerden, Annalisa solo intenta sacar informacion. Queda de lado de Python ver si esa informacion es util o no. Por ejemplo, en los productos que ya tienen catalogados por categoria, lo que devuelva Annalisa es solo para comparar, si ven alguna diferencia, en Python la anotaria como "que raro, aca Annalisa me dio otra categoria, a revisa... " o "no importa, lo bueno es lo de la base", etc

mgaitan commented 10 years ago

@ajlopez revisemos lo de la categorias. Seria buenisimo que nos ayudara a categorizas mejor. El constraint de usar solo categorias de 3er nivel para colgar productos no es sólo caprichoso (sólo), sino que simplifica la arquitectura y la usabilidad.

Seria buenisimo que annalisa nos ayudara mejor en este tarea porque es algo muy necesario para agregar productos de otras fuentes (como el csv que conseguimos). Es cierto que podemos hacer un intento desde el lado de python, como propones, pero es agregarle un overhead y una una funcionalidad que "mezcla las responsabilidades" ;-)

Yo mientras ya agregué un constraint para no darle bola a las categorias que no son nivel 3, separé los flags e hice un montón de tests (despues de lidiear un buen rato con la documentación de mock)

Por último, todavia "no estudié" claramente los resultados, pero a priori me parece que Annalisa anda 10 puntos. Si hemos de pedirle más, es porque la hemos visto hacer tanto con simples chupetines :kiss:

Ahora estoy viendo lo que hizo Manuel en #80

ajlopez commented 10 years ago

Bueno, veo de poner que analyze solo procese categorias con numchild = 0, de aca a maniana sabado deployo. Ahora consume categorias del fixture, veo si llego a agregar que mergee con las provistas por la API de Preciosa

mgaitan commented 10 years ago

gracias angel! en cualquier, que la condicion sea depth=3 y no numchild=0, por si tenemos alguna rama "trunca" que no llega al tercer nivel.

Si te es más facil, te puedo pasar un fixture actualizado (aunuque las secciones no han cambiado mucho por ahora)

2014-03-07 11:52 GMT-03:00 ajlopez notifications@github.com:

Bueno, veo de poner que analyze solo procese categorias con numchild = 0, de aca a maniana sabado deployo. Ahora consume categorias del fixture, veo si llego a agregar que mergee con las provistas por la API de Preciosa

— Reply to this email directly or view it on GitHubhttps://github.com/mgaitan/preciosa/issues/82#issuecomment-37030544 .

mgaitan.github.io textosyprextextos.com.ar

ajlopez commented 10 years ago

Bien, deploye http://preciosaannalisa.herokuapp.com/

ahora deberia tomar solo categorias con depth = 3

maniana espero agregar algunas cosas mas, como reconocer si en la descripcion viene un codigo upn ean o esas cosas, y alguna bellitura mas

Nos leemos!

@ajlopez

ajlopez commented 10 years ago

Ah! Fixtures actualizados? Se aceptan pull request a https://github.com/ajlopez/PreciosaAnnalisa ;-)

ajlopez commented 10 years ago

Fixture de categorias actualizados y deployados a heroku, segun pull request de @mgaitan