[Qualipso-a4] bugs en las herramientas de búsqueda de patrones
Javier Pueyo
jpueyo en gsyc.es
Mie Feb 25 14:12:21 CET 2009
El mié, 25-02-2009 a las 11:53 +0100, Miguel Angel Tinte Garcia
escribió:
> Gracias Javier, tiene muy buena pinta. Acabo de adaptar las reg-exp para
> ficheros de codigo y he lanzado el programa test.py de prueba que busca
> en los ficheros bugs.txtx y files.txt. Efectivamente reconoce todos los
> ficheros pero devuelve algunas cosas extra:
>
> [(' ', 'advSearchServices.py', 'py', ' '),
> (' ', 'examples.java', 'java', ' '),
> (' ', 'patterns.py', 'py', ' '),
> (' ', 'test.py', 'py', ' '),
> (' ', 'library.c', 'c', ' '),
> ('\n', 'test.py', 'py', ' ')]
>
> ¿Sabes como podemos controlar esas "cosas" extra que encuentra?
Como decía el resultado limpio se encuentra en el grupo 2. Aquí nos está
devolviendo una lista con los resultados por cada paréntesis que usamos.
Fíjate que en esas listas el resultado bueno está siempre el segundo
(corresponde al segundo paréntesis de la regex). El resultado que nos
ofrece es el correcto pero no el que queremos. En la librería
patterSearchTool.py (usada por test.py) le estamos pasando la regex a la
función "findall" en lugar de a "finditer" (más adecuado para filtrar
grupos). Para obtener el grupo 2, habría que cambiar el código de
patterSearchTool.py a esto:
class SearchSourceCodeFiles:
def searchSourceCodeFileInText(self,text,tags):
files =[]
for tag in tags:
p = str(tag)
pattern = re.compile(p)
- result = pattern.findall(text)
- if len(result)>0:
- for r in result:
- files.append(r)
+ result = pattern.finditer(text)
+ if result:
+ for r in result:
+ files.append(r.group(2))
#print
return files
Con esos cambios a mí me devuelve:
--------------- Search SourceCodeFiles Test --------------------
['advSearchServices.py', 'examples.java', 'patterns.py', 'test.py',
'library.c', 'test.py']
Saludos,
Javier
>
> Un saludo
>
>
>
> El mar, 24-02-2009 a las 14:33 -0500, Javier Pueyo escribió:
> > Hola,
> >
> > El mar, 24-02-2009 a las 18:13 +0100, Miguel Angel Tinte Garcia
> > escribió:
> > > Acabo de hacer unas modificaciones en los patrones para resolver estos
> > > errores.
> >
> > Quizá no tenga importancia, pero por si acaso lo comento, la solución
> > que hay ahora: '\S*\.c ' tiene varios problemas:
> >
> > 1) no matchea cadenas como: "he visto el fichero xxxx.c" (es decir, en
> > final de cadena, ya que exigimos que haya un espacio detrás de c)
> >
> > 2) no matchea ficheros entre comillas. Ejemplos:
> >
> > se llama 'xxxx.c' en el repositorio
> > se llama "xxxx.c" en el repositorio
> >
> > (ya que exigimos que haya un espacio detrás de c)
> >
> > 3) no matchea ficheros con puntuación detrás. Ejemplos:
> >
> > se llaman xxxx.c, xxxx.java, xxxx.pl
> > se llama xxxx.c; pero no lo veo en el repositorio
> > y se llama xxxx.c. Hablando de otra cosa
> > se llama xxxx.c: y sí está en el repositorio
> >
> > Seguramente no son casos tan importantes. Pero si se quieren usar regex
> > para localizar nombres de ficheros en cadenas arbitrarias más amplias,
> > se podría cambiar las varias regex por una más compleja.
> >
> > '(^|\s|\"|\')([^\s\/\"\']*?\.(c|py|java|pl))([\s\"\'\.\,\;\:]+?|$)'
> >
> > Es decir, "Start of string OR Whitespace OR Quotation marks" + cualquier
> > número de caracteres que NOT incluyan "Space OR Slash" + ".c OR .py
> > OR .java OR .pl" + "Whitespace OR Quatation marks OR Punctuation OR End
> > of string".
> >
> > El resultado limpio, es decir xxxx.c, quedaría en el grupo 2 de los
> > paréntesis de la regex: \2
> >
> > Os adjunto el script con el que he hecho las pruebas, por si queréis
> > probar más posibilidades.
> >
> > > Están subidas al repositorio
> >
> > Si es suficiente con la solución de Miguel, cuidado que los ficheros
> > perl y java siguen sin espacio en el repositorio.
> >
> > Saludos
> >
> >
> >
> > >
> > > Ciao
> > >
> > >
> > > El mar, 24-02-2009 a las 17:08 +0100, Jose Gato Luis escribió:
> > > > Buenas,
> > > >
> > > > he encontrado algún nuevo bug, buscando patrones de ficheros de código
> > > > fuente me devuelve esto:
> > > >
> > > > " voy a hablar de un par de ficheros de codigo fuente el library.c y el
> > > > test.py"
> > > >
> > > > en vez de library.c y test.py ;)
> > > >
> > > > Un saludo,
> > > >
> > > > p.d: Miguel no corre prisa ;)
> > > >
> > > > Jose Gato Luis escribió:
> > > > > Buenas,
> > > > >
> > > > > estoy probando la herramienta de búsqueda de patrones para ficheros de
> > > > > código fuente y me devuelve los siguientes ejemplos:
> > > > >
> > > > > *** ['[cjwatson en ubuntu.c']
> > > > > *** ['https://wiki.ubuntu.c']
> > > > > *** ['<martin.pitt en ubuntu.c', 'https://wiki.ubuntu.c',
> > > > > 'http://www.ubuntu.c', 'ubuntu-devel en lists.ubuntu.c',
> > > > > 'https://lists.ubuntu.c']
> > > > > *** ['https://help.ubuntu.c', 'www.c', '<http://www.c',
> > > > > 'https://wiki.ubuntu.c', 'h.u.c', 'w.u.c']
> > > > >
> > > > > como acaban en ".c" se cree que es un fichero de código en c, ¿ideas
> > > > > para unas búsquedas más refinadas?, supongo que habrá que buscar por
> > > > > patrones fichero.ext, aunque un fichero se podría llamar cjwatson en ubuntu.c.
> > > > >
> > > > > Por otro lado, en la búsqueda de bugs, me gustaría que cuando encuentra
> > > > > un bug, en vez de devolver la cadena completa (#bug 345), me devuelva
> > > > > sólo el identificador (345)
> > > > >
> > > > > Saludos,
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > _______________________________________________
> > Qualipso-a4 mailing list
> > Qualipso-a4 en gsyc.escet.urjc.es
> > http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/qualipso-a4
More information about the Qualipso-a4
mailing list