小编Ass*_*saf的帖子

使用Stanford CoreNLP(3.5.2)进行并发处理

我在同时注释多个句子时面临并发问题.我不清楚我是做错了还是CoreNLP中有错误.

我的目标是使用并行运行的多个线程使用管道"tokenize,ssplit,pos,lemma,ner,parse,dcoref"来注释句子.每个线程分配自己的StanfordCoreNLP实例,然后将其用于注释.

问题是在某些时候抛出异常:

java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
	at java.util.ArrayList$Itr.next(ArrayList.java:851)
	at java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1042)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:463)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:488)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:488)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:488)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:488)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:488)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:488)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:488)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:488)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:488)
	at edu.stanford.nlp.trees.GrammaticalStructure.analyzeNode(GrammaticalStructure.java:488)
	at edu.stanford.nlp.trees.GrammaticalStructure.<init>(GrammaticalStructure.java:201)
	at edu.stanford.nlp.trees.EnglishGrammaticalStructure.<init>(EnglishGrammaticalStructure.java:89)
	at edu.stanford.nlp.semgraph.SemanticGraphFactory.makeFromTree(SemanticGraphFactory.java:139)
	at edu.stanford.nlp.pipeline.DeterministicCorefAnnotator.annotate(DeterministicCorefAnnotator.java:89)
	at edu.stanford.nlp.pipeline.AnnotationPipeline.annotate(AnnotationPipeline.java:68)
	at edu.stanford.nlp.pipeline.StanfordCoreNLP.annotate(StanfordCoreNLP.java:412)
Run Code Online (Sandbox Code Playgroud)

我附上了一个应用程序的示例代码,该代码在我的Core i3 370M笔记本电脑(Win 7 64位,Java 1.8.0.45 64位)上大约20秒内重现问题.此应用程序读取识别文本蕴涵(RTE)语料库的XML文件,然后使用标准Java并发类同时解析所有句子.需要将本地RTE XML文件的路径作为命令行参数提供.在我的测试中,我使用了公开的XML文件:http: //www.nist.gov/tac/data/RTE/RTE3-DEV-FINAL.tar.gz

package semante.parser.stanford.server;

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import …
Run Code Online (Sandbox Code Playgroud)

concurrency multithreading stanford-nlp

6
推荐指数
1
解决办法
3346
查看次数

在 SMT-LIB 中表示时间约束

我试图在 SMT-LIB 中表示时间约束,以检查它们的可满足性。我正在寻找有关我正在采取的方向的反馈。我对 SMT-LIB 比较陌生,我非常感谢输入。

我的限制是关于事件的时间和持续时间。例如,考虑以下自然语言中给出的约束:

  1. 约翰从 13:03:41 开始写一篇文章,他花了 20 分钟才完成。

  2. 写完之后,他检查了他的电子邮件,这花了他 40 多分钟。

  3. 查完邮件后,他给妻子打了电话。

  4. 14:00:00后他给妻子打了电话。

很容易看出这组约束是可稳定的,我正在尝试使用 SMT 求解器推断出这一点。

为了对时间和持续时间的概念进行一些封装,我定义了用数组表示它们的新类型。一些宏被定义为用作结构:

(define-sort Time () (Array Int Int))
(define-fun new_time_ns ((hours Int) (minutes Int) (seconds Int) (nanos Int)) Time
    (store (store (store (store ((as const (Array Int Int)) 0) 1 hours) 2 minutes) 3 seconds) 4 nanos)
)
(define-sort Duration () (Array Int Int))
(define-fun new_duration_ns ((seconds Int) (nanos Int)) Duration
    (store (store ((as const (Array Int Int)) 0) 1 seconds) 2 …
Run Code Online (Sandbox Code Playgroud)

logic temporal smt z3

4
推荐指数
1
解决办法
737
查看次数

标签 统计

concurrency ×1

logic ×1

multithreading ×1

smt ×1

stanford-nlp ×1

temporal ×1

z3 ×1