当前位置:  开发笔记 > 编程语言 > 正文

在nltk中打破/分解复杂和复合句子

如何解决《在nltk中打破/分解复杂和复合句子》经验,为你挑选了1个好方法。

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

例如:

当太阳落山,凉风吹来时,公园真是太棒了==>太阳落山了.凉风吹来.公园太棒了.



1> Cerin..:

这比看起来要复杂得多,所以你不太可能找到一个非常干净的方法.

但是,在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*)内的连接分成其他两个语句.

注意,使用Penn Treebank 语料库训练OpenNLP解析器.我在你的例句中获得了非常准确的解析,但解析器并不完美,在其他句子上可能会出现严重错误.在这里查看其标签的说明.它假设您已经对语言学和英语语法有了一些基本的了解.

编辑:顺便说一句,这是我从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:]))

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有