Eva*_*nce 2 netbeans classification stanford-nlp
在我的代码中,我从第一个分类器获得Person识别,对于我创建的第二个分类器,我添加了一些要被识别或注释为Organization的单词,但它没有注释Person.
我需要从他们两个中获益,我该怎么做?
我正在使用Netbeans,这是代码:
String serializedClassifier = "classifiers/english.all.3class.distsim.crf.ser.gz";
String serializedClassifier2 = "/Users/ha/stanford-ner-2014-10-26/classifiers/dept-model.ser.gz";
if (args.length > 0) {
serializedClassifier = args[0];
}
AbstractSequenceClassifier<CoreLabel> classifier = CRFClassifier.getClassifier(serializedClassifier);
AbstractSequenceClassifier<CoreLabel> classifier2 = CRFClassifier.getClassifier(serializedClassifier2);
String fileContents = IOUtils.slurpFile("/Users/ha/NetBeansProjects/NERtry/src/nertry/input.txt");
List<List<CoreLabel>> out = classifier.classify(fileContents);
List<List<CoreLabel>> out2 = classifier2.classify(fileContents);
for (List<CoreLabel> sentence : out) {
System.out.print("\nenglish.all.3class.distsim.crf.ser.gz: ");
for (CoreLabel word : sentence) {
System.out.print(word.word() + '/' + word.get(CoreAnnotations.AnswerAnnotation.class) + ' ');
}
for (List<CoreLabel> sentence2 : out2) {
System.out.print("\ndept-model.ser.gz");
for (CoreLabel word2 : sentence2) {
System.out.print(word2.word() + '/' + word2.get(CoreAnnotations.AnswerAnnotation.class) + ' ');
}
System.out.println();
}
}
Run Code Online (Sandbox Code Playgroud)
问题来自我得到的结果:
english.all.3class.distsim.crf.ser.gz: What/O date/O did/O James/PERSON started/O his/O job/O in/O Human/O and/O Finance/O ?/O
dept-model.ser.gzWhat/O date/O did/O James/ORGANIZATION started/O his/O job/O in/O Human/ORGANIZATION and/O Finance/ORGANIZATION ?/O
Run Code Online (Sandbox Code Playgroud)
在那里它将名称识别为来自第二个分类器的组织,我需要将其注释为PERSON.有帮助吗?
你应该用这个容易的课程是NERClassifierCombiner.它的语义是它在你指定它们时按从左到右的顺序运行分类器(在构造函数中可以赋予它任何数字),并且后面的分类器不能注释与早期分类器的实体标记重叠的实体,但是可以自由添加注释.因此,较早的分类器在简单的偏好排名中是首选.我在下面给出一个完整的代码示例.
(如果您正在训练所有自己的分类器,通常最好将所有实体训练在一起,这样它们就可以在分配的类别中相互影响.但是这种简单的偏好排序通常很有效,我们自己使用它.)
import edu.stanford.nlp.ie.NERClassifierCombiner;
import edu.stanford.nlp.io.IOUtils;
import edu.stanford.nlp.ling.CoreLabel;
import java.io.IOException;
import java.util.List;
public class MultipleNERs {
public static void main(String[] args) throws IOException {
String serializedClassifier = "classifiers/english.all.3class.distsim.crf.ser.gz";
String serializedClassifier2 = "classifiers/english.muc.7class.distsim.crf.ser.gz";
if (args.length > 0) {
serializedClassifier = args[0];
}
NERClassifierCombiner classifier = new NERClassifierCombiner(false, false,
serializedClassifier, serializedClassifier2);
String fileContents = IOUtils.slurpFile("input.txt");
List<List<CoreLabel>> out = classifier.classify(fileContents);
int i = 0;
for (List<CoreLabel> lcl : out) {
i++;
int j = 0;
for (CoreLabel cl : lcl) {
j++;
System.out.printf("%d:%d: %s%n", i, j,
cl.toShorterString("Text", "CharacterOffsetBegin", "CharacterOffsetEnd", "NamedEntityTag"));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
779 次 |
| 最近记录: |