如何检测特定句子是否指向特定的定义概念,例如:
Start
:
E.g。 “我们可以开始”还是“让我们开始”
Definition
:
E.g。 “定义(一个单词)”或“一个单词是什么意思”或“一个单词的含义”
在第一种情况下,句子指向概念“开始”,而在第二种情况下,句子指向definition
的概念。
那么如何在句子中识别这些概念呢?我的一个类似问题是 nlp - How to detect if a word in a sentence is pointing to a color/body part /vehicle
我使用Stanford的NLP API制作名称实体识别器类,但它只能检测
LOCATION
ORGANIZATION
DATE
MONEY
PERSON
PERCENT
TIME
以下是代码:
public void NER() throws ClassCastException, ClassNotFoundException, IOException
{
String serializedClassifier = "english.muc.7class.distsim.crf.ser.gz";
AbstractSequenceClassifier<CoreLabel> classifier = CRFClassifier.getClassifier(serializedClassifier);
int i=0;
String PER = "";
String LOC = "";
String TIME = "";
String DATE = "";
String ORG = "";
for (String str : toComputeOn) {
for (List<CoreLabel> lcl : classifier.classify(str)) {
for (CoreLabel cl : lcl) {
System.out.print(i++ + ": ");
System.out.println(cl.toShorterString());
if(cl.get(CoreAnnotations.AnswerAnnotation.class).equals("TIME"))
TIME += "\n"+ cl.toString();
if(cl.get(CoreAnnotations.AnswerAnnotation.class).equals("PERSON"))
PER += "\n"+ cl.toString();
if(cl.get(CoreAnnotations.AnswerAnnotation.class).equals("ORGANIZATION"))
ORG += "\n"+ cl.toString();
if(cl.get(CoreAnnotations.AnswerAnnotation.class).equals("DATE"))
DATE += "\n"+ cl.toString();
if(cl.get(CoreAnnotations.AnswerAnnotation.class).equals("LOCATION"))
LOC += "\n"+ cl.toString();
}
}
}
if(!PER.equals("")) {
System.out.println("PERSON: "+ PER);
System.out.println("---");
}
if(!ORG.equals("")) {
System.out.println("ORGANIZATION: "+ ORG);
System.out.println("---");
}
if(!LOC.equals("")) {
System.out.println("LOCATION: "+ LOC);
System.out.println("---");
}
if(!TIME.equals("")) {
System.out.println("TIME: "+ TIME);
System.out.println("---");
}
if(!DATE.equals(""))
System.out.println("DATE: "+ DATE);
}
我需要能够检测其他概念的东西。我正在查看Stanford的API并找到了BasicRelationExtractor类。我不是100%肯定它做了什么,但是使用这个类可以帮助我解决我的问题,或者我会更好地训练我自己的NER分类器,或者使用MIT的Java Wordnet接口会更好吗?
感谢您的帮助