POS_TAG pour les textes français

Ca faisait longtemps que je cherchais une bibliothèque qui me permettrait de POS_TAGGUER mes contenus en français, et c’est assez difficile à trouver.

alors oui, il y’a des librairie déja toute faite qui essayent ce genre d’initiative comme TextBlob-FR qui fait du bon boulot, mais le pos_tagging n’a pas l’air d’arriver.

j’en ai testé d’autres qui donnes des résultats très discutables… en gros, c’est la merde. NLTK propose une méthode pour l’entrainer soit-même sur un corpus de texte pré-taggué. c’est toujours la même histoire, il faut trouver un corpus assez large pour qu’il soit représentatif de la langue française, puis le tagguer… héhé le travail de dingue.

 

Heureusement, on peut utiliser StanfordPOSTagguer sur du français. Je l’ai un peu testé, les résultats sont plutot bons, mais je trouve que le temps d’execution sont assez long. donc prévoyez du temps pour executer cela si vous avez beaucoup de textes à tagguer, ou si vous souhaitez faire du temps réel (monter une API par exemple), celle-ci risque d’être lente…

 

voici une méthodo et un peu de code pour vous familiariser avec cet outil:

  1. télécharger les différentes lib liées au stanford tagger (pour la langue francaise ou tout autre langue qui vous intéresse). Moi j’ai téléchargé la version FULL avec toutes les langues disponibles. Allez directement à la section “release history” ou cherchez “french”
  2. décompressez le zip et mettez le tout dans un coin de votre ordi pour pouvoir y accèder facilement (genre /home/opt/StanfordTagger)
  3. c’est tout, puis il faut écrire le code pour POS_TAGGUER vos textes :
import nltk
from nltk.tag.stanford import StanfordPOSTagger
root_path="/home/opt/StanfordTagguer"
pos_tagger = StanfordPOSTagger(root_path + "models/french.tagger", root_path + "stanford-postagger.jar",encoding='utf8') #instance de la classe StanfordPOSTagger en UTF-8
def pos_tag(sentence):
    tokens = nltk.word_tokenize(sentence) #je transforme la phrase en tokens => si vous avez un texte avec plusieurs phrases, passez d'abord par nltk pour récupérer les phrases
    tags = pos_tagger.tag(tokens) #lance le tagging
    return tags

cette fonction retournera chaque mot avec le tag qui va avec dans un tuple.

voici la signification des tags

 {
    'Adj': 'adjective',
    'Adv': 'adverb',
    'CC': 'coordinating conjunction',
    'Cl': 'weak clitic pronoun',
    'CS': 'subordinating conjunction',
    'D': 'determiner',
    'ET': 'foreign word',
    'I': 'interjection',
    'NC': 'common noun',
    'NP': 'proper noun',
    'P': 'preposition',
    'PREF': 'prefix',
    'PRO': 'strong pronoun',
    'V': 'verb',
    'PONCT': 'punctuation mark',
    'N': 'noun'}