J'ai joué avec des arbres d'analyse en langage naturel et je les ai manipulés de diverses manières. J'ai utilisé les outils Tregex et Tsurgeon de Stanford, mais le code est en désordre et ne s'accorde pas bien avec mon environnement principalement Python (ces outils sont Java et ne sont pas idéaux pour le peaufinage). J'aimerais avoir un jeu d'outils qui permettrait un piratage facile lorsque j'ai besoin de plus de fonctionnalités. Y a-t-il d'autres outils qui sont bien adaptés pour faire un appariement de motifs sur des arbres et ensuite manipuler ces branches appariées?Comment manipuler les arbres d'analyse?
Par exemple, je voudrais prendre l'arbre suivant en entrée:
(ROOT
(S
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP America))))
(VP (VBD used)
(S
(VP (TO to)
(VP (VB be)
(VP (VBN called)
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP Italy)))))))))))
et (ce qui est un exemple simplifié):
- Trouver un nœud avec l'étiquette NP qui a un premier enfant avec l'étiquette NP et un descendant nommé "Banque", et un deuxième enfant avec l'étiquette PP.
- Si cela correspond, alors prenez tous les enfants du nœud PP et déplacez-les à la fin des enfants de NP correspondants.
Par exemple, prenez cette partie de l'arbre:
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP America))))
et la transformer en ceci:
(NP
(NP (NNP Bank) (IN of) (NP (NNP America))))
Depuis mes arbres d'entrée sont S-expressions que je l'ai pensé à utiliser Lisp (intégré dans mon programme Python) mais ça fait tellement longtemps que j'ai écrit quelque chose de significatif dans Lisp que je n'ai aucune idée par où commencer.
Quelle serait une bonne façon de décrire les motifs? Quel serait un bon moyen de décrire les manipulations? Quelle est une bonne façon de penser à ce problème?
Existe-t-il une documentation pour utiliser SP tree regex? Ou les javadocs sont-ils la seule documentation jusqu'ici? – sholsapp
Ah, salut professeur Manning, désolé de critiquer votre travail sans fournir de raisons concrètes. Je veux pirater le code mais je trouve 100 000 lignes un peu décourageantes pour juste ajouter une petite couche d'abstraction. Je suis très reconnaissant pour l'existence de Tregex/Turgeon. Je suis juste curieux de savoir si un DSL faisant quelque chose de similaire peut être écrit beaucoup plus succinctement. Il y a toujours le problème de Java <-> Interactions Python que j'ai résolues d'une manière insatisfaisante, mais ça marche (un peu). – guidoism
@gnucom: J'avoue que la documentation pourrait être meilleure/plus complète. Mais il y a quelques autres ressources. Les diapositives ppt http://nlp.stanford.edu/software/tregex/The_Wonderful_World_of_Tregex.ppt sont le meilleur endroit où aller pour une introduction aux modèles de tregex. Il y a des écrans d'aide utiles dans l'application GUI. Pour plus d'informations, voir: http://nlp.stanford.edu/software/tregex-faq.shtml#b. –