你好我想使用stanford解析器wuth线程,但我不知道如何使用线程池。我希望所有线程都能这样做:
LexicalizedParser.apply(Object in)
但我不想一直创建LexicalizedParser的新对象,因为它会加载 lp = new LexicalizedParser(“englishPCFG.ser.gz”); 每个物体需要2秒钟。 我该怎么办?
谢谢!
答案 0 :(得分:2)
猜猜为时已晚,但有一个线程安全的版本:http://nlp.stanford.edu/software/lex-parser.shtml
答案 1 :(得分:1)
您可以使用ThreadLocal。 它允许您为每个线程保留一个解析器实例。因此,任何创建的解析器实例都不会从多个线程中使用。
通常它不应该创建比CPU *核心更多的实例。
对我来说这是4-5个实例(如果我在我的四核上禁用超线程)。
P.S。 与StanfordNLP无关。有时,较差的类实现包含静态字段并以非线程安全的方式修改它们。这种实现的一般安全并行化方法是: