Biblioteca para detectar en qué lenguaje de programación está escrito un fragmento de código

Estoy buscando una biblioteca que pueda detectar en qué lenguaje de programación está escrito un fragmento de código. Podemos suponer que el fragmento de código está escrito en un solo idioma.

Por ejemplo, para lenguajes naturales, uso la biblioteca de Python guess_language :

>>> from guess_language import guess_language
>>> guess_language("Ces eaux regorgent de renégats et de voleurs.")
'fr'
>>> guess_language("Tienes que seguir tu corazón.")
'es'
>>> guess_language("いいえ!忍者がいます")
'ja'
>>> not guess_language("??")
True

Si es posible, debe devolver las probabilidades de pertenecer a cada lenguaje de programación (por ejemplo, para un fragmento de código dado como entrada, la salida podría ser 94 % MATLAB, 30 % Python, 5 % Java, etc.). Idealmente, se puede llamar desde Python/Java/C++ (orden descendente de preferencia) y gratis.

¿Cómo se presentarán los fragmentos a la biblioteca? Puede usar, por ejemplo , github.com/github/linguist si los fragmentos están en archivos.
Dependiendo del tamaño del fragmento, esto puede ser casi imposible de hacer de manera confiable, probablemente también podría hacerlo con algunas reglas de expresiones regulares que buscan características definitorias.
@NeilSlater Idealmente, simplemente pase como una cadena, pero el archivo también está bien. Si paso un archivo, podría usar cloc (aunque no da probabilidades).
@SteveBarnes Claro, de ahí la preferencia de tener las probabilidades de pertenecer a cada lenguaje de programación.
@Gilles ¡Gracias, buena referencia! En retrospectiva, tal vez la detección del lenguaje de programación necesite más información que la detección del lenguaje natural.
@FranckDernoncourt ¿Le importa en qué idioma está escrita la biblioteca real?
@RockPaperLizard No realmente, solo si es posible llamar desde Python/Java/C++ (orden descendente de preferencia).
Una buena opción para apostar por la probabilidad. La superposición entre C y C++ es excelente, al igual que, en menor medida, C++ y Java. Si tuviera un código compilable/ejecutable, eso lo haría más fácil, pero los fragmentos serán difíciles de imprimir ("hola mundo").

Respuestas (3)

Aquí hay un github/lingüista que usó github, una biblioteca de Ruby.

¿Podría por favor dar un ejemplo de uso? ¡Gracias!

Aquí hay otro blackducksw/ohcount ver la ohcount_detect_languagefunción, es para C, también tiene Rubyy Pythonpuerto.

¿Podría por favor dar un ejemplo de uso? ¡Gracias!

Otra biblioteca isagalaev/highlight.js para JavaScript, vea la highlightAutofunción en la fuente de resaltado.js , da 1 o 2 respuestas posibles.

¿Podría por favor dar un ejemplo de uso? ¡Gracias!