gpt4 book ai didi

java - CRFClassifier java.lang.NoSuchFieldError : maxAdditionalKnownLCWords

转载 作者:行者123 更新时间:2023-12-01 10:41:21 31 4
gpt4 key购买 nike

我正在尝试使用斯坦福 NLP 库的 CRFClassifier。

经过训练的模型应该位于 .ser 文件中,但是当我将反序列化对象传递给 CRFClassifier 构造函数时,出现错误:

java.lang.NoSuchFieldError: maxAdditionalKnownLCWords

这是我尝试过的,我还尝试使用同一目录中给出的属性文件。不管我是否传递 prop 文件,我都会得到相同的错误:

import edu.stanford.nlp.process.*;
import java.util.Collection;
import edu.stanford.nlp.ling.*;
import java.util.List;
import java.io.*;
import edu.stanford.nlp.io.*;
import edu.stanford.nlp.ie.*;
import edu.stanford.nlp.ie.crf.*;
import java.util.*;

public class StanfordParserTest {

public static void main(String[] args) {
// TODO Auto-generated method stub

String propfile = "/Users/--------/Documents/Programming/Java/stanford-ner-2015-12-09/classifiers/english.all.3class.distsim.prop";
FileReader p_file_reader = null;
Properties prop = new Properties();
try{
p_file_reader = new FileReader(propfile);
}catch(FileNotFoundException e){
e.printStackTrace();
}
if (p_file_reader != null){
try{
prop.load(p_file_reader);
p_file_reader.close();
}catch(IOException e){
e.printStackTrace();
}

}

ObjectInputStream o_in = null;
String serializedClassifier = "/Users/--------/Documents/Programming/Java/stanford-ner-2015-12-09/classifiers/english.all.3class.distsim.crf.ser";
try{
FileInputStream f_in = new FileInputStream(serializedClassifier);
o_in = new ObjectInputStream(f_in);
f_in.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
System.out.println(o_in);
System.out.println(prop);
AbstractSequenceClassifier<CoreLabel> classifier = null;
try{
classifier = CRFClassifier.getClassifier(o_in, prop);
}catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
System.out.println(classifier);

}

}

这是输出:

java.io.ObjectInputStream@6ff3c5b5
{useDisjunctive=true, useSequences=true, serializeTo=english.all.3class.distsim.crf.ser.gz, useOccurrencePatterns=true, unknownWordDistSimClass=0, useClassFeature=true, testFile=/u/nlp/data/ner/column_data/all.3class.test, useQN=true, useTypeSeqs=true, usePrevSequences=true, featureDiffThresh=0.05, wordFunction=edu.stanford.nlp.process.AmericanizeFunction, distSimLexicon=/u/nlp/data/pos_tags_are_useless/egw4-reut.512.clusters, wordShape=chris2useLC, usePrev=true, maxLeft=1, useNextRealWord=true, useTypeSeqs2=true, map=word=0,answer=1, disjunctionWidth=5, useWord=true, QNsize=25, useLastRealWord=true, numberEquivalenceDistSim=true, useDistSim=true, useNGrams=true, saveFeatureIndexToDisk=true, useLongSequences=true, useObservedSequencesOnly=true, readerAndWriter=edu.stanford.nlp.sequences.ColumnDocumentReaderAndWriter, maxNGramLeng=6, normalize=true, trainFileList=/u/nlp/data/ner/column_data/ace23.3class.train,/u/nlp/data/ner/column_data/muc6.3class.ptb.train,/u/nlp/data/ner/column_data/muc7.3class.ptb.train,/u/nlp/data/ner/column_data/conll.3class.train,/u/nlp/data/ner/column_data/wikiner.3class.train,/u/nlp/data/ner/column_data/ontonotes.3class.train,/u/nlp/data/ner/column_data/english.extra.3class.train, useNext=true, noMidNGrams=true, useTypeySequences=true, type=crf}
Exception in thread "main" java.lang.NoSuchFieldError: maxAdditionalKnownLCWords
at edu.stanford.nlp.ie.AbstractSequenceClassifier.reinit(AbstractSequenceClassifier.java:185)
at edu.stanford.nlp.ie.AbstractSequenceClassifier.<init>(AbstractSequenceClassifier.java:152)
at edu.stanford.nlp.ie.crf.CRFClassifier.<init>(CRFClassifier.java:174)
at edu.stanford.nlp.ie.crf.CRFClassifier.getClassifier(CRFClassifier.java:2967)
at StanfordParserTest.main(StanfordParserTest.java:66)

有人知道这里出了什么问题吗?

最佳答案

请查阅 NERDemo.java 中给出的代码,了解如何以编程方式加载 CRFClassifier。

如果在分发目录中运行这些命令应该可以正常运行:

javac -cp "*" NERDemo.java
java -mx400m -cp "*:.:lib/*" NERDemo classifiers/english.all.3class.distsim.crf.ser.gz sample.txt

一般来说,请确保您的 CLASSPATH 仅使用该分发目录中的当前 jar。如果您的 CLASSPATH 中有过时的 jar,您可能会收到一些错误。

如果您有正确的 CLASSPATH,这应该可以工作:

String serializedClassifier = "classifiers/english.all.3class.distsim.crf.ser.gz";
AbstractSequenceClassifier<CoreLabel> classifier = CRFClassifier.getClassifier(serializedClassifier);

并且正在反序列化当前发行版提供的模型,这些模型位于分类器文件夹中。

关于java - CRFClassifier java.lang.NoSuchFieldError : maxAdditionalKnownLCWords,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34398773/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com