Bonjour,
Pour le compte de l'entreprise pour laquelle je travaille, je réalise un moteur qui permet de regrouper Sémantiquement des messages courts (max. 255 caractères).
Par exemple, des messages suivants:
le chat de la voisine attend
le chat patiente
la voisine mange des fruits
les fruits c'est bon pour la santé
j'aime bien les fruits et les légumes
y'a pas de quoi fouetter un chat
il faut faire du sport
le sport y'a rien de tel
la mort aux rats
le lion et le rat
allons boire un coup
je souhaite obtenir ce type de regroupement:
1 {le chat de la voisine attend, le chat patiente, y'a pas de quoi fouetter un chat}
2 {la voisine mange des fruits, les fruits c'est bon pour la santé, j'aime bien les fruits et les légumes}
3 {il faut faire du sport, le sport y'a rien de tel}
4 {la mort aux rats, le lion et le rat}
Non classés {allons boire un coup}
voici comment je procède:
phase 1:
j'utilise l'API lucène, pour décortiquer les phrases et ne garder que les radicaux des mots.
(par ex: le chat de la voisine attend ==> {cha, voisin, attend}).
les mots inutiles sont supprimés et les suffixes (ou terminaisons verbales ou liées au nombre) aussi.
phase 2:
pour chacune des listes de radicaux ainsi obtenus, je récupère des coordonnées binaires.
par ex: soit l'ensemble des mots du dictionnaire: {cha, voisin, attend, shtroumpf, bidul, machin, truc}
la phrase aura 1 ou 0 selon qu'elle possède ou non le mot. dans l'exemple précédent on obtient:
1 1 1 0 0 0 0
phase 3:
j'utilise WEKA pour regrouper avec un clusterer.
les résultats obtenus ne sont pas vraiment très bons dons j'essaye de complété avec la gestion des synonymes ou encore avec de l'apprentissage supervisé (nous avons beaucoup de messages en stock que nous avons déjà classés) toujours avec WEKA mais cette fois un classifier.
Des idées ou suggestion pour améliorer le traitement ?