nlp:是CRFClassifier.segmentString线程安全吗?

时间:2015-03-31 12:35:22

标签: java nlp

我有一个web服务,输入是一个句子,我想用CRFClassifier获取这句话的段。 所以我使用了以下代码。

public class SegmentParser {
    private CRFClassifier<CoreLabel> classifier;
    public SegmentParser() {
        Properties props = new Properties();
        props.setProperty("sighanCorporaDict", "/Users/zhifan/Downloads/stanford-segmenter-2015-01-30/data");
        props.setProperty("NormalizationTable", "/Users/zhifan/Downloads/stanford-segmenter-2015-01-30/data/norm.simp.utf8");
        props.setProperty("normTableEncoding", "UTF-8");
        props.setProperty("serDictionary", "/Users/zhifan/Downloads/stanford-segmenter-2015-01-30/data/dict-chris6.ser.gz");
        props.setProperty("inputEncoding", "UTF-8");
        props.setProperty("sighanPostProcessing", "true");
        classifier = new CRFClassifier<CoreLabel>(props);
        classifier.loadClassifierNoExceptions("/Users/zhifan/Downloads/stanford-segmenter-2015-01-30/data/ctb.gz", props);
    }

    public List<String> parse(String sentence) {
        return classifier.segmentString(sentence);
    }
}

对于每个Web请求,我都可以使用新的SegmentParser()。parse(句子)。实际上新的SegmentParser()需要很长时间,所以这是一个非常糟糕的设计。

所以我的问题是:

  1. 我可以为所有请求初始化1个SegmentParser实例吗?是SegmentParser.parse线程安全吗? (我认为也可以说CRFClassifier.segmentString是线程安全的)

  2. 通常,我怎么知道Java中的class.method()是否是线程安全的? 对于c ++,通常我认为如果将f()声明为以下情况,则C.f()是线程安全的。由于c.f()的执行是相互依赖的,所以即使使用相同的C实例调用f()也是如此。

    C班{     public void f()const {} }

0 个答案:

没有答案