我是第四位软件工程师学生,我的最终项目是关于转换用户故事。 我正在使用“Stanford Core NLP”;我的道具列表是“tokenize,ssplit,pos,lemma,ner,parse”,而ner prop使它非常慢。
我在java中编写代码,我想询问是否有一些方法可以将实现stanford管道的类用作线程。 这有利于我的运行时间吗? 对于每个用户故事,我从一开始就加载实现StanfordNLP的类。 如何让它一次性加载?
答案 0 :(得分:0)
您应该只构建一次管道,然后对每个故事进行管道处理。如果您发布一些示例代码,我可以帮助您改进它。您还可以在多线程模式下运行管道,并同时处理多个核心。
答案 1 :(得分:0)
这是实施StanfordNLP的课程 - " SentimentAnalyzer"。 对于不同的算法,我想几次使用这个类。 我应该在哪里打电话给这个课程,以便在我运行项目时不会伤害我?
公共类SentimentAnalyzer {private StanfordCoreNLP pipeline;
//private Hashtable<String, ArrayList<String>> POS_TaggingArray; // k, v
public void initializeCoreNLP() {
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse");
pipeline = new StanfordCoreNLP(props);
}
public void getSentiment(String text) {
int index = 0;
Annotation annotation= new Annotation(text);
pipeline.annotate(annotation);
Hashtable<String, ArrayList<String>> POS_array = new Hashtable<String, ArrayList<String>>();
List<String> sentances_list=new ArrayList<>( );
List<Tree> constituencyParse = new ArrayList<>( );
List<String> W_lemmas= new ArrayList<>( );
String[] ner;
ner = new String[text.length()];
List<CoreMap> sentences = annotation.get( CoreAnnotations.SentencesAnnotation.class ); //divide to sentences
for (CoreMap sentence : sentences) {
sentances_list.add( sentence.toString() );
constituencyParse.add( sentence.get(TreeCoreAnnotations.TreeAnnotation.class) ) ;
for (CoreLabel token : sentence.get( CoreAnnotations.TokensAnnotation.class )) {
String word = token.get( CoreAnnotations.TextAnnotation.class );//get the word
String pos = token.get( CoreAnnotations.PartOfSpeechAnnotation.class );//get part of sentance
String key = String.valueOf( POS_array.get(pos) );
if(key.equals( "null" )) {
POS_array.put(pos, new ArrayList<String>());
POS_array.get(pos).add(word);
} else{
POS_array.get(pos).add(word);
}
if(pos.equals( "NN" ) || pos.equals( "NNS" ) || pos.equals( "NNP" ) || pos.equals( "NNSP" )){ //for w list
W_lemmas.add( token.get(CoreAnnotations.LemmaAnnotation.class) );
String role = token.get( CoreAnnotations.NamedEntityTagAnnotation.class );
if (!(role==null)) {
ner[index]=role;
}
else {
ner[index]="empty";
}
}
index+=1;
}
}
}
}