Bu, göründüğünden çok daha karmaşıktır, dolayısıyla mükemmel bir temiz yöntem bulma olasılığınız yoktur.
Ancak OpenNLP İngiliz ayrıştırıcı kullanarak, senin örnek bir cümle alıp, şu dilbilgisi ağacı alabilirsiniz: istediğiniz gibi
(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)))))))
(. .)))
Oradan sen ayrı alabilirsiniz. Alt-maddelerini, (SBAR *) eksi (SBAR *) bölümünün üst seviyesini (NP *) (VP *) çıkararak alabilirsiniz. Ve sonra, (SBAR *) içindeki bağlantıyı diğer iki ifadeye bölebilirsiniz.
Not, OpenNLP ayrıştırıcısına Penn Treebank corpus kullanılarak eğitim verilir. Örnek cümlenin üzerine oldukça doğru bir ayrıştırma yaptım, ama ayrıştırıcı mükemmel değil ve diğer cümlelerde çılgınca yanlış olabilir. Etiketlerinin açıklaması için Look here. Dilbilim ve İngilizce dilbilgisi hakkında bazı temel anlayışınız olduğunu varsayar.
Düzenleme: Btw, Python'dan OpenNLP'ye bu şekilde erişiyorum. Bu, bir opennlp-tools-1.4.3 klasöründe OpenNLP jar ve model dosyalarını olduğunu varsayar.
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:]))
Teşekkürler Chris, Çalışır! – Sharmila
Örnek cümleyi Stanford corenlp ile ayrıştırdım ve alt madde doğru ayrıştırılmadı. Cerin'in de belirttiği gibi, modeller% 100 doğru değildir ve yanlış ayrıştırma ağaçları verilebilir. –