gpt4 book ai didi

python - 在 nltk 中打断/分解复杂和复合句子

转载 作者:太空狗 更新时间:2023-10-29 20:52:56 25 4
gpt4 key购买 nike

在nltk或者其他自然语言处理库中有没有办法把复杂的句子分解成简单的句子?

例如:

夕阳西下,凉风习习,公园美不胜收 ==> 夕阳西下。一阵凉风吹来。公园太棒了。

最佳答案

这比看起来要复杂得多,因此您不太可能找到一个完全干净的方法。

但是,在 OpenNLP 中使用英语解析器,我可以拿你的例句得到如下语法树:

  (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)))))))
(. .)))

从那里,您可以根据需要将其拆开。您可以通过提取顶级 (NP *)(VP *) 减去 (SBAR *) 部分来获得您的子条款。然后您可以将 (SBAR *) 中的连词拆分为其他两个语句。

请注意,OpenNLP 解析器是使用 Penn Treebank 训练的语料库。我对你的例句进行了相当准确的解析,但解析器并不完美,对其他句子可能会大错特错。 Look here对其标签的解释。它假设您已经对语言学和英语语法有一些基本的了解。

编辑:顺便说一句,这是我从 Python 访问 OpenNLP 的方式。这假设您在 opennlp-tools-1.4.3 文件夹中有 OpenNLP jar 和模型文件。

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:]))

关于python - 在 nltk 中打断/分解复杂和复合句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com