2010-07-05 20 views
5

¿Es posible detectar un código fuente de lenguaje de programación (principalmente Java y C#) en un texto?¿Cómo detectar el código fuente en un texto?

Por ejemplo, quiero saber si hay algún código fuente en este texto.

.. text text text text text text text text text 
text text text text text text text text text 
text text text text text text text text text 

public static Person createInstance() { return new Person();} 

text text text text text text text text text 
text text text text text text text text text 
text text text text text text text text text .. 

He estado buscando esto por un tiempo y no he podido encontrar nada.

Una solución con Python sería maravilloso.

Atentamente.

+2

¿Qué tan confiable quiere que sea esto (cuántos falsos positivos o falsos negativos quiere permitir)? ¿Realmente desea saber * si * hay algún código fuente en algún lugar de su texto, o desea ubicarlo y delinearlo del resto del texto? –

+0

No creo que haya una manera mágica de hacerlo, ya que el código está intercalado con "texto normal", y probablemente sea casi imposible estar 100% en lo cierto. (Pero nunca digas nunca). –

+0

Por supuesto que habrá un falso positivo. Es imposible evitar eso. Sí, solo quiero saber si hay algún código fuente en algún lugar de mi texto. No necesito localizarlo. Saber es suficiente para mi caso. – Kerem

Respuesta

2

Hay algunos marcadores de sintaxis alrededor (pygments, google-code-prettify) y han resuelto la detección y clasificación de códigos. Estudiar sus fuentes podría dar una impresión de cómo se hace.

(ahora que lo miraba de nuevo Pygments - No sé si se puede detectar automáticamente el lenguaje de programación pero Google de código-Prettify definitivamente puede hacerlo.)

+0

He comprobado pygments. Solo reconoce los archivos de código fuente completo. – Kerem

+0

@Kerem: así es para lo que está diseñado, pero quizás puedas iterar a través de las líneas (o palabras ...) y usar las funciones de los números en cada iteración (por ejemplo, probar cada línea si es el comienzo de una fuente) fragmento de código) –

0

lo que se necesita una base de datos de palabras clave con características de esas palabras clave (definición, estructuras de control, etc.), así como una lista de operadores, caracteres especiales que se usarían en toda la estructura de idiomas (p. ej. (}, *, ||) y una lista de patrones regex.

La mejor opción, para reducir las iteraciones, sería buscar en las palabras clave/operadores/caracteres. Utilizando una fórmula espacial/de frecuencia, solo comience una t texto que puede ser un idioma, basado en el valor de la fórmula devuelta. Luego, se trata de identificar qué idioma es y dónde termina.

Dado que muchos idiomas tienen un código similar, esto podría ser difícil. ¿Qué idioma es el siguiente?

for(i=0;i<10;i++){ 
    // for loop 
} 

Sin el comentario podría tratarse de muchos tipos diferentes de idiomas. Con el comentario, al menos podría descartar Perl, ya que usa # como el carácter de comentario, pero aún podría ser JavaScript, C/C++, etc.

Básicamente, tendrá que hacer muchas búsquedas recursivas para identificar el código correcto, lo que significa que si quieres algo rápido, necesitarás una bestia de una computadora o grupo de computadoras. Además, la fórmula de búsqueda y la fórmula de identificación deberán estar bien definidas para cada idioma.

La identificación del código sin las llamadas a la biblioteca adecuadas o inclusiones puede ser imposible, a menos que se indique que podría pertenecer a muchos idiomas, para lo cual necesitará una biblioteca de sintaxis.

+0

con # como etiqueta de comentario, también podría ser Python :) – owca

Cuestiones relacionadas