Question

Est-il possible de décomposer des phrases complexes en phrases simples NLTK ou d'autres bibliothèques de traitement du langage naturel?

Par exemple:

Le parc est si merveilleux quand le soleil se couche et une brise fraîche souffle ==> Le soleil se couche. une brise fraîche souffle. Le parc est si merveilleux.

Était-ce utile?

La solution

Ceci est beaucoup plus compliqué qu'il n'y paraît, vous avez peu de chances de trouver une méthode parfaitement propre.

Cependant, en utilisant l'analyseur anglais dans OpenNLP , je peux prendre votre phrase d'exemple et d'obtenir un arbre de grammaire suivante :

  (S
    (NP (DT The) (NN park))
    (VP
      (VBZ is)
      (ADJP (RB so) (JJ wonderful))
      (SBAR
        (WHADVP (WRB when))
        (S
          (S (NP (DT the) (NN sun)) (VP (VBZ is) (VP (VBG setting))))
          (CC and)
          (S
            (NP (DT a) (JJ cool) (NN breeze))
            (VP (VBZ is) (VP (VBG blowing)))))))
    (. .)))

A partir de là, vous pouvez le prendre à part que vous aimez. Vous pouvez obtenir vos sous-clauses en extrayant le haut niveau (NP *) (VP *) moins la section (SBAR *). Et vous pouvez diviser la conjonction à l'intérieur du (SBAR *) dans les deux autres déclarations.

Note, l'analyseur OpenNLP est formé en utilisant Penn Treebank corpus de. J'ai obtenu une analyse assez précise sur votre phrase d'exemple, mais l'analyseur est pas parfait et peut être sauvagement tort sur d'autres phrases. Regardez ici pour une explication de ses balises. Il suppose que vous avez déjà une certaine compréhension de base de la linguistique et la grammaire anglaise.

Edit: BTW, voici comment j'accéder OpenNLP de Python. Cela suppose que le pot OpenNLP et les fichiers de modèle dans un dossier opennlp-tools-1.4.3.

import os, sys
from subprocess import Popen, PIPE
import nltk

BP = os.path.dirname(os.path.abspath(__file__))
CP = "%(BP)s/opennlp-tools-1.4.3.jar:%(BP)s/opennlp-tools-1.4.3/lib/maxent-2.5.2.jar:%(BP)s/opennlp-tools-1.4.3/lib/jwnl-1.3.3.jar:%(BP)s/opennlp-tools-1.4.3/lib/trove.jar" % dict(BP=BP)
cmd = "java -cp %(CP)s -Xmx1024m opennlp.tools.lang.english.TreebankParser -k 1 -d %(BP)s/opennlp.models/english/parser" % dict(CP=CP, BP=BP)
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
stdin, stdout, stderr = (p.stdin, p.stdout, p.stderr)
text = "This is my sample sentence."
stdin.write('%s\n' % text)
ret = stdout.readline()
ret = ret.split(' ')
prob = float(ret[1])
tree = nltk.Tree.parse(' '.join(ret[2:]))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top