Haha, le web 2.0, ca attire toujours les foules, hein ?
Bienvenue ici, cher journal,
La semaine dernière, ou était-ce celle d'avant, je t'ai parlé de la détection de la syntaxe d'un langage informatique via un analyseur statistique naïf de type Bayésien, qui était mon article d'introduction sur mon pet-project actuel.
J'ai un peu avancé et j'ai désormais un prototype à te faire essayer, si tu veux. Autant dire que comme j'ai découvert que Github
avait publié dans la lib linguist
du code qui faisait exactement ce que je voulais faire, j'ai jeté mon prototype en Go
pour me mettre à faire du ruby.
Evidemment, c'est un peu facile de pas coder soi-même et d'utiliser un truc que des gens ont fait avant, mais comme j'ai un réel objectif et que mon code donnait des résultats assez médiocre, j'ai préféré basculer sur la solution linguist
:
- Leur parseur bayesien utilise, tel que décrit dans les commentaires de ma précédente note, uniquement des "mot-clés" et c'est pas mal
- Ca "juste marche" et ça ne consomme pas 200Mo de ram pour charger le parseur
Bon évidemment, c'est du ruby
, donc ça consomme un peu de cpu, de la RAM et c'est pas spécialement rapide.
Le prototype est testable sur uu.zoy.org (appréciez le sombre jeu de mot).
Pour le moment, le code est tout pourrave et ne fait que faire la glue entre un petit site web en Sinatra et la lib Linguist. Le code source de ce truc est accessible sur github/ruby-clever-pastie. Vous pouvez coller tout ce que vous voulez dedans, c'est pas loggé, et ca ne paste pas encore. Par contre, ca essaye de deviner ce que vous avez collé. Vous verrez que de manière générale, c'est bien (mais pas top). Ca me suffit.
Ce qui est chouette, c'est la liste de ce que je voudrais faire ensuite avec ! En vrac :
- Permettre le paste de n'importe quoi avec une colorisation suivant le langage détecté/choisi
- Sauver le couple (ou l'objet) paste-langage dans une base noSQL (possiblement sur le fs)
- Permettre de changer le langage depuis un paste au cas ou le détecteur a faux (et sauver le changement sur le fs)
- Rajouter une api qui permet d'uploader uniquement les tokens d'un "fichier" et qui retourne le langage detecté
- Rajouter du javascript pour permettre de faire des paste cryptés dont la clef est stockée chez le client dans un # auquel le serveur n'a pas accès
- Rajouter des critères d'expiration du paste
- Ecrire un client OSX qui permet l'upload via un raccourci système (en fait, y a dejà github/cloudBoard que j'ai écris y a un bout de temps, mais il paste sur un site pas terrible).
- Ecrire de quoi le rendre compatible avec Pastoob
- Faire du SSL un jour (ou peut être une nuit)
# Détection
Posté par pititjo . Évalué à 3.
Presque. C'était du python.
[^] # Re: Détection
Posté par BFG . Évalué à 3.
est détecté comme du Ruby (et comme du Python en seconde position). La bibliothèque utilisée retourne-t-elle un score évaluant la confiance en le résultat ? Cela permettrait de laisser le choix à l'utilisateur si le résultat est trop incertain ou si plusieurs résultats sont trop proches.
[^] # Re: Détection
Posté par Octplane (site web personnel) . Évalué à 1.
Oui, elle retourne un score : j'affiche le premier, deuxième et troisième match dans la petite phrase. J'ai patché pour afficher ce que me retourne la lib. Mais c'est pas terrible…
[^] # Re: Détection
Posté par lendemain . Évalué à 0.
Si ce sont les tokens: https://raw.github.com/github/linguist/master/lib/linguist/classifier.yml
Alors à mon avis il manque ":\n" comme token pour python.
En d'autre termes
pourrait donner:
[^] # Re: Détection
Posté par Dorian . Évalué à 2. Dernière modification le 08 juillet 2012 à 01:30.
Bizarre que ça donne Ruby : ya un
:
et il manque leend
.« En fait, le monde du libre, c’est souvent un peu comme le parti socialiste en France » Troll
[^] # Re: Détection
Posté par lendemain . Évalué à 0.
http://paste-antoineb.dotcloud.com/paste/
J'ai appliqué ce que je dis plus bas, et ce code est bien détecté comme du python.
L'ordre de sélection se trouve dans le select (regardez les requêtes ajax pour vous en convaincre).
[^] # Re: Détection
Posté par Raoul Volfoni (site web personnel) . Évalué à 6.
Brainfuck confondu avec du Perl. Je le savais….
[^] # Re: Détection
Posté par barmic . Évalué à 5.
C'est dommage je pensais pas qu'il allait se planter là dessus.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Détection
Posté par oinkoink_daotter . Évalué à 1. Dernière modification le 06 juillet 2012 à 20:12.
Même en majuscules d'ailleurs :/
It looks like this is Objective-C (-44.95) (or maybe OpenEdge ABL, -45.07 or even JavaScript, -45.96…).
edit : les scores
[^] # Re: Détection
Posté par Raoul Volfoni (site web personnel) . Évalué à 2.
Une table qui s'appelle table ? MySQL detected…. ;)
[^] # Re: Détection
Posté par barmic . Évalué à 2.
J'ai presque jamais utilisé mysql, c'est juste que je devais trouver un nom et que c'est le premier mot qui m'es venu (pas très créatif certes)
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
# Injection HTML
Posté par yellowiscool . Évalué à 3.
J'ai testé avec un fichier PHP contenant beaucoup de HTML, et ça a détecté du HTML en disant que ça pouvait aussi être du PHP (score très proche).
Par contre, je me suis retrouvé avec tout le code collé en dessous : tu devrais protéger le contenu du textarea.
Envoyé depuis mon lapin.
[^] # Re: Injection HTML
Posté par Octplane (site web personnel) . Évalué à 3.
Ha oui, alors pour le moment, c'est complètement pas protégé. Mais je vais me renseigner :-)
[^] # Re: Injection HTML
Posté par bnjbvr (site web personnel) . Évalué à 2.
Effectivement, ce n'est pas protégé :)
En tous cas, quand j'ai lancé avec le code suivant:
J'ai eu droit à un message honnête…
# Ça marche pas mal !
Posté par Kerro . Évalué à 2.
(J'ai piqué ça sur le site du IOCCC)
Je pensais qu'il allait lamentablement se planter… et bien non :
> It looks like this is C++ (-2172.86) (or maybe JavaScript, -2200.95 or even Perl, -2203.61…).
[^] # Re: Ça marche pas mal !
Posté par lendemain . Évalué à -4.
Plus tu mes de donné moins il plante.
[^] # Re: Ça marche pas mal !
Posté par Zylabon . Évalué à 2.
Et plus la différence entre le C et le C++ devient flagrante.
Please do not feed the trolls
[^] # Re: Ça marche pas mal !
Posté par lendemain . Évalué à 0.
Mode mauvaise foi
- ça compile sous g++ (je parle de int main).
# Diff
Posté par Gof (site web personnel) . Évalué à 3.
Quand j'utilise ce genre d'outils, la plupart du temps c'est avec des patches (diff)
Ce n'est pas vraiment un langage, mais ce serait bien de le reconnaître quand même.
# Et paf !
Posté par fleny68 . Évalué à 3.
It looks like this is JavaScript (-206.94) (or maybe Perl, -212.53 or even CoffeeScript, -212.81…).
C'était pourtant facile…
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.