2017-06-13 6 views
0

J'ai récemment commencé à travailler sur un projet d'analyse des sentiments sur des textes en allemand et je prévois d'utiliser un stemmer pour améliorer les résultats.Allemand pour l'analyse des sentiments en Python NLTK

NLTK est livré avec un Allemand Snowball Stemmer et j'ai déjà essayé de l'utiliser, mais je ne suis pas sûr des résultats. Peut-être que cela devrait être ainsi, mais en tant qu'informaticien et non linguiste, j'ai un problème avec les formes verbales fléchies qui découlent d'une racine différente. Prenez le mot "suchen" (chercher), qui est dérivé de "tel" pour la 1ère personne du singulier mais pour "tel" pour la 3ème personne du singulier. Je sais qu'il y a aussi de la lemmatisation, mais aucun lemmatiseur allemand actif n'est intégré à NLTK autant que je sache. Il y a GermaNet, mais leur intégration au NLTK semble avoir été abandonnée. Atteindre le point: Je voudrais que les formes verbales fléchies soient ramenées à la même racine, à tout le moins pour les verbes réguliers au même temps. Si ce n'est pas une exigence utile pour mon objectif, dites-moi pourquoi. Si c'est le cas, connaissez-vous des ressources supplémentaires à utiliser qui peuvent m'aider à atteindre cet objectif? Edit: J'ai oublié de mentionner, tout logiciel devrait être libre d'utiliser à des fins éducatives et de recherche.

Répondre

2

En tant qu'informaticien, vous êtes résolument dans la bonne direction pour aborder ce problème linguistique;). L'étalement est généralement un peu plus simpliste et utilisé pour les tâches de recherche d'information dans le but de réduire la taille du lexique, mais généralement pas suffisant pour une analyse linguistique plus sophistiquée. La Lemmatisation recouvre partiellement le cas d'utilisation de la racine, mais inclut la réécriture par exemple des inflexions de verbe à la même forme racine (lemme), et aussi la différenciation du "travail" en tant que nom et du "travail" en tant que verbe. la mise en œuvre et la qualité du lemmatiseur). Pour cela, il a généralement besoin d'un peu plus d'informations (comme les tags POS, les arbres de syntaxe), donc prend beaucoup plus de temps, ce qui le rend moins adapté aux tâches IR, traitant généralement de plus grandes quantités de données. En plus de GermaNet (je ne savais pas qu'il était avorté, mais je ne l'ai jamais vraiment essayé, parce que c'est gratuit, mais vous devez signer un accord pour y avoir accès), il y a SpaCy que vous pourriez avoir regarder: https://spacy.io/docs/usage/

Très facile à installer et à utiliser. Voir les instructions d'installation sur le site, puis téléchargez les choses en utilisant allemand:

python -m spacy download de 

alors:

>>> import spacy 
>>> nlp = spacy.load('de') 
>>> doc = nlp('Wir suchen ein Beispiel') 
>>> for token in doc: 
...  print(token, token.lemma, token.lemma_) 
... 
Wir 521 wir 
suchen 1162 suchen 
ein 486 ein 
Beispiel 809 Beispiel 
>>> doc = nlp('Er sucht ein Beispiel') 
>>> for token in doc: 
...  print(token, token.lemma, token.lemma_) 
... 
Er 513 er 
sucht 1901 sucht 
ein 486 ein 
Beispiel 809 Beispiel 

Comme vous pouvez le voir, malheureusement, il ne fait pas un très bon travail sur votre exemple précis (suchen), et je ne suis pas sûr de ce que le nombre représente (ie doit être le lemme id, mais je ne sais pas quelle autre information peut être obtenue de cela), mais peut-être que vous pouvez essayer et voir si cela vous aide.

+0

Merci, je vais certainement essayer cet article quand j'y reviendrai. – Florian