2010-04-23 20 views
6

Disons qu'il ya une phrase:Comment obtenir des parties logiques d'une phrase avec Java?

On March 1, he was born. 

Changer à

He was born on March 1. 

ne rompt pas le sens de la phrase et elle est toujours valide. Mélanger des mots d'une autre manière produirait des phrases étranges à invalides. Donc, fondamentalement, je parle des parties de la phrase, qui rendent l'information plus spécifique, mais les supprimer ne rompt pas toute la phrase. Existe-t-il une bibliothèque PNL dans laquelle identifier ces pièces est disponible?

Répondre

26

Constituants

On dirait que vous voulez identifier constituents de la phrase, qui sont des groupes de mots qui fonctionnent comme une seule unité en fonction de la grammaire d'une langue. En fait, quand la linguistique essaie de découvrir la grammaire d'une langue, elle le fait en partie en regardant movement. Comme dans votre exemple, c'est ici qu'un groupe de mots peut être déplacé vers une position différente dans une phrase tout en préservant le sens de la phrase.

Les constituants peuvent être des mots individuels, des phrases ou même des groupes plus grands tels que des clauses entières. Dans une phrase, ils ont une structure hiérarchique imbriquée. Par exemple, la première phrase d'exemple que vous avez donné pourrait être analysé comme:

(S (PP (IN On) (NP (NNP March) (CD 1))) 
    (NP (PRP he)) 
    (VP (VBD was) (VP (VBN born)))) 

La phrase entière est composée d'un prepositional phrase, suivi d'un noun phrase, puis un verb phrase. La phrase prépositionnelle peut être décomposée en une unité constituée du seul mot «On» suivi d'un syntagme nominal.

syntagmatique Parsers

Pour trouver des constituants automatiquement, vous voudrez probablement utiliser un analyseur syntagmatique .Il y a beaucoup de Parsis à choisir qui sont disponibles en open source, y compris:

Les parseurs Stanford et Berkeley sont probablement les plus faciles à installer et à utiliser. Comme vu dans Cer et al. 2010, les parseurs les plus précis sont Berkeley et Charniak. L'analyseur Bikel est plus lent et moins précis que les autres.

Démo en ligne

Il y a une démo en ligne pour l'analyseur Stanford here. J'ai utilisé la démo pour produire l'analyse donnée ci-dessus de votre phrase d'exemple.

Remarque sur la suppression

Au sein de chaque constituant, il y aura un head word. Par exemple, prendre le syntagme:

(NP (DT The) (JJ big) (JJ blue) (NN ball))

Le mot de tête est ici le nom ball, et il est modifié par les adjectifs big et blue. Si cette phrase nominale était intégrée dans une phrase, vous pouviez supprimer ces modificateurs et avoir toujours quelque chose de cohérent avec, mais moins spécifique, la signification de la phrase originale. Dans les phrases nominales, vous pouvez généralement supprimer les adjectifs, les noms qui ne sont pas la tête et les phrases prépositionnelles imbriquées. Dans les phrases de verbe et les clauses complètes, les choses deviennent plus délicates depuis la suppression du matériel que les serveurs en tant qu'argument du verbe peuvent complètement changer l'interprétation d'une phrase. Par exemple, si vous supprimez the book de He sold Jim the book, cela signifie He sold Jim.

+1

Je regardais juste tous ces parseurs et j'ai trouvé un article écrit par Daniel à http://nlp.stanford.edu/pubs/lrecstanforddeps_final_final.pdf –

+4

Ouais, c'est en fait mon papier :) – dmcer

+0

Je m'interrogeais sur le Lien La performance de Grammer Parser mais je vois dans ton papier que tu l'as couvert sous l'analyseur RelEx. –

1

OpenNLP peut faire une partie de cela pour vous. Phrase chunking et l'analyse devrait vous aider avec ceci. Cependant, ce n'est pas un problème particulièrement simple, et les algorithmes ont tendance à être confus lorsque la structure de la phrase devient plus complexe et ambiguë. Vous devriez parfois être en mesure de réorganiser les phrases dans une phrase et maintenir un sens.