import nltk
from nltk.tree import ParentedTree
from nltk.parse.corenlp import CoreNLPParser
parser = CoreNLPParser(url='http://localhost:9000')
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer
-annotators "parse" -port 9000 -timeout 30000
默认情况下,CoreNLP选择的解析器(当完整的英文模型可用时)是Shift-Reduce(SR)解析器,它有时被认为比CoreNLP PCFG解析器更准确、更快。令人印象深刻的是,我可以用我自己的经验来证实这一点,我几乎只处理维基百科文本。
然而,我注意到,解析器经常错误地选择将实际上是完整的句子(即有限的矩阵子句)解析为子句成分,而不是NP
。换句话说,解析器应该在根级别输出S
标签(root(S...))
,但是句子语法的复杂性促使解析器说一个句子不是句子(root(NP...))
等。
对于这类问题句子的解析也总是包含另一个(通常是明显的)错误。下面是几个例子。为了节省空间,我将只粘贴在每棵树的顶部几个级别。每个句子都是完全可以接受的英语句子,因此解析都应该以(ROOT(S...))
开始。但是,在每种情况下,其他一些标签会代替s
,而树的其余部分是乱码。
弗拉格:超过三分之一的看医生的人接受了抗生素处方,这对抗生素耐药性有影响。(ROOT(FRAG(NP(NP超过三分之一))(看医生的人接受抗生素处方,这对抗生素耐药性有影响))(.))
UCP:咖啡是一种由烘焙的咖啡豆制成的冲泡饮料,咖啡豆是某些咖啡属植物的浆果种子。(ROOT(UCP(S Coffee是由烘焙的咖啡豆制成的冲泡饮料)(,,)(NP某些咖啡属植物浆果的种子)(.))
最后,我提出了一个问题,我相信上面的证据证明了这个问题是有用的:假设我的数据包含少量的片段或其他格式不佳的句子,我如何对CoreNLP解析器施加高级约束,使其算法优先于在s
根的正下方分配一个s
节点?
我很想知道在处理数据时施加这样的约束(人们知道要满足它)是否也能治愈在产生的解析中观察到的其他无数弊病。据我所知,解决方案不在于指定ParserAnnotations.ConstraintAnnotation
。会吗?
你可以指定一定的范围,必须以一定的方式标记。所以你可以说整个范围必须是一个's'。但我认为您必须在Java代码中做到这一点。
下面是演示设置约束的示例代码。
https://github.com/stanfordnlp/corenlp/blob/master/itest/src/edu/stanford/nlp/parser/shiftreduce/shiftreduceparseritest.java
null 编辑: 这是我的连接代码。我没有使用推荐的懒惰getter的原因是,我希望在其中一个节点出现故障时连接/重新连接,这与我的解决方案非常吻合。
我有log4j2.xml,它部分配置为: 但是,跟踪消息并不存在于两个文件附加符(fileinfo/filedebug)中。当我更改FileDebug log level=“TRACE”时,就会出现跟踪消息。
问题内容: 我有以下代码: 此功能在专用的go例程中执行,并每秒发送一次心跳消息。取消上下文后,整个过程应立即停止。 现在考虑以下情形: 这将在关闭的上下文中启动心跳例程。在这种情况下,我不希望传输任何心跳。因此,应该立即输入选择中的第一个块。 但是,似乎无法保证对块进行评估的顺序,并且即使上下文已取消,该代码有时也会发送心跳消息。 实施这种行为的正确方法是什么? 我可以在第二个中添加“ isCo
请创建一个算法,它获取一个类列表,并以某种方式对它们进行排序 > A类是B类的子类 A类实现接口B B 的索引小于 A。 到目前为止我尝试的是, 我不确定这是否有效。
Linux 是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。但是 CPU 在一个时钟周期内只能运算一条指令(现在的 CPU 采用了多线程、多核心技术,所以在一个时钟周期内可以运算多条指令。 但是同时运算的指令数也远远小于系统中的进程总数),那问题来了:谁应该先运算,谁应该后运算呢?这就需要由进程的优先级来决定了。 另外,CPU 在运算数据时,不是把一个集成算完成,再进行下一个进程的运
我有一个,名为,其中包含类型的对象。 您可以在所有车辆上调用该方法。 我要做的是排序,这样车辆被赋予更高的优先级,并被放在队列的前面。 我假设我必须在这里使用一个比较器,但不知道怎么做。