Extraire les noms du texte (Java)
Personne ne sait la manière la plus simple d'extraire uniquement les noms à partir d'un corps de texte?
J'ai entendu parler de la L'outil TreeTagger et j'ai essayé de donner un coup de feu, mais ne pouvais pas le faire fonctionner pour une raison quelconque.
Des suggestions?
Merci Phil
EDIT:
import org.annolab.tt4j.*; TreeTaggerWrapper tt = new TreeTaggerWrapper(); try { tt.setModel("/Noms/anglais.pair"); tt.setHandler(nouveau TokenHandler() { void jeton(Chaîne de jeton, Chaîne d'encaissement, de la Chaîne lemme) { Système..println(jeton+"\t"+pos+"\t"+lemme); } }); tt.processus(mots); //mots = liste de mots } finally { tt.destroy(); }
C'est mon code, l'anglais est la langue. J'ai été l'obtention de l'erreur : Le type de nouvelles TokenHandler(){} doit mettre en œuvre les hérité de la méthode abstraite TokenHandler.jeton. Suis-je en train de faire quelque chose de mal?
source d'informationauteur Phil
Vous devez vous connecter pour publier un commentaire.
D'abord, vous devez marquer votre texte. Cela peut sembler trivial (split à n'importe quel espace peut travailler pour vous), mais officiellement c'est plus difficile. Ensuite, vous devez décider ce qui est un substantif. "Le parking" contiennent un nom (parking), deux noms (voiture, parc) ou un nom (parc) et un adjectif (voiture)? C'est un problème difficile, mais encore une fois, vous pourriez être en mesure de s'en sortir sans elle.
N' "j'ai vu le xyzzy" identifier un nom pas dans un dictionnaire? Le mot "la" probablement identifie xyzzy comme un substantif.
Où sont les noms dans "le temps vole comme une flèche". Comparer avec "les mouches des fruits comme la banane" (merci à Groucho Marx).
Nous utilisons le Brun tagger (Java) (http://en.wikipedia.org/wiki/Brown_Corpus) dans le OpenNLP toolkit (opennlp.outils.lang.anglais.PosTagger; opennlp.outils.postag.POSDictionary sur http://opennlp.sourceforge.net/) pour trouver des noms en anglais normal, et je le recommande à commencer par celle - ce n'est plus de votre façon de penser pour vous. Sinon, regardez l'une des POSTaggers
(http://en.wikipedia.org/wiki/POS_tagger) ou (http://www-nlp.stanford.edu/links/statnlp.html#Taggers).
Il y a un très complète liste des boîtes à outils de la PNL dans http://en.wikipedia.org/wiki/Natural_language_processing_toolkits. Je suggère fortement que vous utilisez l'un de ceux, plutôt que d'essayer de match contre Wordnet ou d'autres collections.
Découvrez LingPipe. Cela peut soi-disant de choisir entités nommées à partir du texte en anglais. Mais je dois avouer que La PNL n'est pas mon domaine d'expertise.
Basé sur votre edit:
Le message d'erreur indique que vous devez remplacer la méthode abstraite jeton, et vous avez une définition de jeton dans votre anonyme intérieur de la classe, mais peut-être la signature de votre jeton-override ne correspond pas à la signature de la méthode abstraite définie dans TokenHandler?
mon code suivant fonctionne avec TreeTagger:
Ont un look à la WordNet base de données. Cette base de données lexicale. Vous pouvez essayer de correspondre a ' chaque mot contre elle et vérifier si c'est un nom.
Je doute que vous aurez 100% de précision, bien que la base de données n'est pas un match pour chaque mot de la langue anglaise, mais au moins c'est un début.
Trouver un site web de dictionnaire avec une API (par exemple, WS, Reposant) que vous pouvez utiliser pour exécuter les requêtes de recherche contre.
Les résultats devraient venir facilement consommable format (ex: XML, JSON) et bien sûr inclure le mot lexical de la catégorie.
Façon la plus simple serait probablement de comparer chaque mot du texte avec un dictionnaire des noms. Après cela, vous allez probablement avoir à faire des élémentaires d'analyse et d'accepter approximative de la justesse dans les résultats. Beaucoup de références en ligne pour l'analyse des langues naturelles.