Propulsez un bot Github pour le management
d’issues avec
Neo4j et du Natural Language
ProcessingMeetup Neo4jFR @Prestashop – 19 oct 2016
Christophe Willemsen - @ikwattro
Qui Quoi Où• Christophe Willemsen (Belgique)
• Consultant Neo4j et Elasticsearch chez GraphAware
( World’s #1 Neo4j Consultancy )
• Java / Python / PHP / FR / EN / NL
• Passionné de BigData, Machine Learning
• Github/Twitter : @ikwattro
Aujourd’hui• Synchro API events de Github
• Problème de popularité
• Recommendations avec les données Github
• NLP Basics
• Analyse de l’historique de Pull Requests
• Demo avec une Issue
API Events Github• PullRequestEvent
• IssuesEvent
• ForkEvent
• IssueCommentEvent
• PushEvent
• CommitCommentEvent, CreateEvent, FollowEvent, WatchEvent,
GistEvent, DownloadEvent, DeleteEvent, PublicEvent,…
API Events Github• 65k events / heure
• 1.9 millions d’utilisateurs actifs / jour
• 1.6 millions de repos modifiés par jour
• 340 000 milliars de lignes de code en 219 langages différents
API Events Github
Popularité !
Popularité !
Un sérieux problème, voir même un problème sérieux.
Popularité !
Identification de la popularité sur Github
Popularité !
FOLLOWS / STARS
Problème de popularité• Métrique trop vaste
• Génère trop de recommendations
• Recommendations irrélévantes
Popularité !
FAMOUS !!!
Quelle métrique ?
Qu’est-ce qui circule dans les veines de Github ?
CONTRIBUTIONS
Contributions• Neo4j vous permet d’inférer les relations entre les entités
• Ces relations implicites sont parfois beaucoup plus rélévantes que
les relations explicites comme FOLLOWS / STARS
• Si vous avez du mal avec les relations explicites, essayez
d’inférer les relations
NLP Basics
NLP Basics• Sous-type de Machine Learning
• Opérations sur du texte, comme :
• Segmentation de phrases
• Part Of Speech Tagging, Parsing, Named Entity Extraction,
Tokenization, Lemmification, Topic Extraction, …
Un bot
Utilise deux heuristiques• Si une ligne a été modifiée ou supprimée, la dernière personne
ayant modifié cette ligne doit être notifiée
• Si une personne a modifié plusieurs autres lignes dans ce fichier,
elle aimerait être notifiée
Issue Bot
Processus• On effectue les opérations NLP sur les textes des Pull Requests
afin d’en extraire les tags, on crée également des tags en fonction
de la structure camelCased des noms de fichiers
• On applique un score de fréquence et importance sur ces tags
• On applique un score de fréquence de contribution sur les users
• On crée un nouvelle issue, on effectue les opérations NLP
• Content Based recommendation combiné avec les scores de
fréquence
https://github.com/graphaware/
issuebot_nlp_meetup
Merci !
Questions?
graphaware.com
@graph_aware
@ikwattro