Aquí podría ser tu PUBLICIDAD


Construyendo expresiones regex

votos
2

Utilizo el regex buddy que toma una expresión regular y luego da el significado de la cual se obtiene lo que podría estar haciendo. En líneas similares, ¿es posible tener algún motor que tome la entrada de lenguaje natural describiendo el patrón que uno necesita para coincidir / reemplazar y da la expresión regular correcta (casi correcta) para esa descripción?

Por ejemplo, hacer coincidir la palabra completa 'dio' en algún archivo

Entonces, la expresión regular para eso podría ser: <dio> o

\ bdio \ b

-ANUNCIO.

PS = Creo que pocos chicos aquí podrían pensar que esto es una pregunta subjetiva no relacionada con la programación, pero aún así necesito hacer esta pregunta. Para mí. - Gracias.

Publicado el 12/03/2009 a las 19:03
fuente por usuario goldenmean
En otros idiomas...        العربية       

5 respuestas

votos
2

Esto sería complicado de programar, porque necesita un analizador de lenguaje natural capaz de derivar significado. A menos que lo limites a un subconjunto estricto; en ese caso, estás reinventando un lenguaje de expresión, y eventualmente terminarás en expresiones regulares, solo con símbolos más grandes. Entonces, ¿cuál es la ganancia?

Los regexes se desarrollaron por una razón: son la representación más simple y precisa posible.

Existe un paquete Symbolix Regular Expression Builder para Emacs, pero mirándolo, creo que las expresiones regulares son más fáciles de usar .

Respondida el 12/03/2009 a las 07:24
fuente por usuario Michael Paulukonis


Aquí podría ser tu PUBLICIDAD


votos
1

Respuesta corta: no, hasta que la inteligencia artificial mejore MUCHO.

Si escribiste algo como esto, tendrías una sintaxis muy limitada. Para que alguien sepa "Coincide con la palabra completa 'dio' en algún archivo", básicamente necesitarían tener un conocimiento significativo de las expresiones regulares. En ese punto, solo usa expresiones regulares.

Para usuarios no técnicos, esto nunca funcionará a menos que limite a "encontrar esta frase" básica o, tal vez, "buscar líneas que comienzan / terminan con ??". Nunca van a llegar a algo como esto:

Encuentre líneas que contengan un símbolo menor que el símbolo seguido de la cadena 'img' seguida de una o más agrupaciones de: algunos espacios en blanco seguidos de una o más letras seguidas por una cadena de comillas dobles o una cadena de comillas simples, y esas agrupaciones son seguido por cualquier longitud de espacio en blanco, luego una barra inclinada y un signo de mayor que.

Ese es mi intento de una versión en lenguaje sencillo de esta expresión regular relativamente simple:

/<img(\s+[a-z]+=("[^"]*"|'[^']*'))+\s*/>/i
Respondida el 12/03/2009 a las 07:37
fuente por usuario Kip

votos
0

tratar la aplicación de código abierto mac Rubí Regexp máquina, en http://www.rubyregexp.sf.net . Está escrito en Ruby, por lo que puede utilizar una parte del código, incluso si no está en mac. Se puede describir una gran cantidad de expresiones regulares simples en una gramática Inglés fácil. Como divulgación, lo hice hacer de esta herramienta.

Respondida el 01/07/2011 a las 04:39
fuente por usuario V9801

votos
0

Generar una expresión regular mediante el uso de un procesador de lenguaje natural es bastante posible. Se supone que Prolog es una buena elección de idioma para este tipo de problema. En la práctica, sin embargo, lo que estaría haciendo, en efecto, es diseñar su propio idioma de entrada que proporcione una expresión regular como salida. Si su objetivo es producir expresiones regulares para una tarea específica, esto de hecho podría ser útil. Quizás la tarea que está haciendo tiende a requerir ciertas formulaciones que son factibles pero no integradas en expresiones regulares. Sin embargo, si esto será más efectivo que simplemente crear las expresiones regulares de a una por vez depende de su proyecto. Por lo general, probablemente este no sea el caso, ya que su propio idioma no será tan conocido ni documentado como regex. Si su objetivo es producir un reemplazo para la expresión regular cuya salida se analizará como una expresión regular, creo que ' estoy pidiendo mucho No quiere decir que las personas no hayan hecho el mismo tipo de cosas antes (por ejemplo, el lenguaje C ++ como una 'mejora' que se ejecuta, originalmente, en C ++).

Respondida el 12/03/2009 a las 07:55
fuente por usuario Brian

votos
0

Sí, estoy de acuerdo contigo en que es subjective. Pero responderé a su pregunta porque creo que ha hecho una pregunta incorrecta.

La respuesta es " ". Casi cualquier cosa puede codificarse y esta sería una aplicación bastante simple para codificar. ¿Funcionará perfectamente? No, no lo haría porque el lenguaje natural es bastante complejo de analizar e interpretar. Pero es posible escribir un motor de este tipo con algunas limitaciones.

Respondida el 12/03/2009 a las 07:09
fuente por usuario David Pokluda