如何检测句子是否指向特定的定义概念

时间:2015-07-21 18:00:27

标签: java nlp stanford-nlp lexical-analysis pattern-recognition

如何检测特定句子是否指向特定的定义概念,例如:

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接口会更好吗?

感谢您的帮助

0 个答案:

没有答案