Acabo de descubrir http://code.google.com/p/re2, una biblioteca prometedora que utiliza una forma largamente descuidada (Thompson NFA) para implementar un motor de expresiones regulares que puede ser órdenes de magnitudes más rápido que los motores disponibles de awk, Perl o Python.¿Es posible usar re2 desde Python?
así que descargué el código e hice la cosa habitual sudo make install
. sin embargo, esa acción aparentemente no hizo más que agregar /usr/local/include/re2/re2.h
a mi sistema. parecía haber alguna `` .a file in addition, but then what is it with this
.a`` de extensión?
me gustaría usar re2 de Python (preferiblemente Python 3.1) y me entusiasmó ver archivos como make_unicode_groups.py
en la distribución (¿tal vez solo se usó durante el proceso de compilación?). aquellos sin embargo no fueron desplegados en mi máquina.
¿cómo puedo usar re2 de Python?
actualización dos personas amigables han señalado que yo podría tratar de construir DLL/* .so archivos de las fuentes y luego utilizar ctypes
la biblioteca de Python para acceder a ellos. ¿Alguien puede dar consejos útiles sobre cómo hacer exactamente eso? Aquí no tengo ni idea, especialmente con la primera parte (compilación de los archivos * .so).
actualización también he publicado esta pregunta (anterior) a la re2 developers’ group, sin respuesta hasta ahora (que es un grupo pequeño), y hoy a la (algo más poblada) comp.lang.py grupo [—thread here—]. la esperanza es que personas de diferentes rincones puedan contactarse entre sí. supongo que una persona capacitada puede hacer esto en unas pocas horas durante su 20% de tiempo de uso de tu-tiempo-libre-pertenece-google-demasiado; me ataría por semanas. ¿hay alguna herramienta para reducir automáticamente C++ al sabor de C que Python necesita para poder conectarse?, entonces tal vez obtener un resultado viable se puede reducir a un encadenamiento inteligente de herramientas.
(rant) ¿por qué es esto tan difícil? pensar que en 2010 todavía no podemos tener nuestras abundantes piezas de software solo para hablar entre nosotros. este es un obstáculo que siempre que quiera abordar algún código C de Python siempre debe crumble estos bits de enlace. esto requiere mucho trabajo, pero solo entrega un módulo de extensión que es específico para la versión del código C y la versión de Python, por lo que envejece rápidamente. (/ rant)¿Sería posible ejecutar tales cosas por separado? procesos (por ejemplo, si tuviera un ejecutable de Re2 que pueda generar resultados para los datos que entran, por ejemplo, subprocess/Popen/communicate()
)? (esto no debe ser una herramienta de línea de comandos pura que necesita la apertura de un proceso cada vez que se necesita, sino un proceso único que se ejecuta continuamente, tal vez existen contenedores que tipo de 'demonizar' dicho código C).
+1 solo para el enlace al artículo de Thompson NFA –
Verifique el archivo Make en el proyecto re2 y modifíquelo para crear un archivo so. A continuación, agregue sus propios archivos al Makefile para proporcionar la interfaz entre los tipos de cheros re2 y python. Debe usar la opción compartida para compilar los archivos so. Solo google para Makefile y bibliotecas compartidas. –
@GregS: google ("Glushkov NFA") –