36 votes

Algorithme de troncature qui produit de vrais mots

Je dois prendre un paragraphe de texte et en extraire une liste de "tags". La plupart de ces opérations sont assez simples. Cependant, j'ai besoin d'un peu d'aide pour la troncature de la liste de mots résultante afin d'éviter les doublons. Exemple : Communauté / Communautés

J'ai utilisé une implémentation de l'algorithme de Porter Stemmer (j'écris en PHP) :

http://tartarus.org/~martin/PorterStemmer/php.txt

Cela fonctionne jusqu'à un certain point, mais ne renvoie pas de "vrais" mots. L'exemple ci-dessus a pour racine "commun".

J'ai essayé "Snowball" (suggéré dans un autre fil de Stack Overflow).

http://snowball.tartarus.org/demo.php

Pour mon exemple (communauté / communautés), Snowball part de "communiti".

Question

Existe-t-il d'autres algorithmes d'extraction qui permettent d'obtenir ce résultat ? Quelqu'un d'autre a-t-il résolu ce problème ?

Je pense actuellement que je pourrais utiliser un algorithme d'extraction pour éviter les doublons, puis choisir le mot le plus court que je rencontre comme mot à afficher.

16voto

Dave Sherohman Points 25122

Le problème essentiel est que les algorithmes de stemming fonctionnent de la manière suivante sur une base phonétique purement basés sur les règles d'orthographe de la langue, sans aucune compréhension réelle de la langue avec laquelle ils travaillent. Pour produire de vrais mots, vous devrez probablement fusionner les résultats du troncatureur avec une forme de fonction de recherche pour reconvertir les troncatures en vrais mots. Je vois essentiellement deux façons de procéder :

  1. Recherchez ou créez un grand dictionnaire qui associe chaque racine possible à un mot réel. (par exemple, communiti -> community)
  2. Créer une fonction qui compare chaque radical à une liste de mots qui ont été réduits à ce radical et qui tente de déterminer lequel est le plus similaire.

P

15voto

deemeetree Points 725

Je ne sais pas si c'est peut-être trop tard, mais il n'y a qu'un seul script PHP script qui produit de vrais mots : http://phpmorphy.sourceforge.net/ - Il m'a fallu une éternité pour le trouver. Tous les autres stemmers doivent être compilés et, même après cela, ils ne fonctionnent que selon l'algorithme de Porter, qui produit des stems et non des lemmes (c'est-à-dire community = communiti). PhpMorphy fonctionne parfaitement bien, il est facile à installer et à initialiser, et possède des dictionnaires anglais, russe, allemand, ukrainien et estonien. Il est également fourni avec un script que vous pouvez utiliser pour compiler d'autres dictionnaires. La documentation est en russe, mais passez-la par Google translate et cela devrait être facile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X