NER Stanford可以调用java文件吗?

时间:2016-04-13 09:37:00

标签: java stanford-nlp named-entity-recognition pos-tagger

我试图通过Stanford Named Entity Recognizer (NER)Stanford Log-linear Part-Of-Speech Tagger的文字提供NER和POS代码。

让我举一个POStag的例子

import edu.stanford.nlp.tagger.maxent.MaxentTagger;

public class POSTag {
    static MaxentTagger tagger =  new MaxentTagger("english_language_pos.tagger");

    public static void main(String[] args) throws IOException{
        String text = "Sarah and I go to Samsung office in Korea."
        String tagged = tagger.tagString(text);

        System.out.println(tagged);
    }
}

输出:

Sarah_NNP and_CC I_PRP go_VBP to_TO Samsung_NNP office_NN in_IN Korea_NNP ._.  

对于NER Stanford,我必须在命令行中运行:

java -mx500m -cp stanford-ner-3.5.2.jar edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier indonesian_language_ner.gz -textFile E:/file.txt > E:/file_ner.txt

我的问题是如何用java扩展名(file.java)在文件中调用Stanford NER?有没有办法从命令行调用斯坦福NER? 或者我可以使用任何其他工具或库来提供从java文件调用的NER?

*****编辑:
我需要NER的输出变成这样:

Sarah_PERSON and_O I_O go_O to_O Samsung_ORGANIZATION office_O in_O Korea_PLACE ._O 

*****修改

** fyi:我使用Windows 8.1

2 个答案:

答案 0 :(得分:1)

你可以这样做:

    String model = "english.all.3class.distsim.crf.ser.gz";
    String text = "file.txt";

    AbstractSequenceClassifier<CoreLabel> classifier = CRFClassifier.getClassifier(model);
    classifier.classifyAndWriteAnswers(text);

我希望它有所帮助。

答案 1 :(得分:0)

由于我们中的一些人可能需要标记字符串而不是直接打印到控制台,因此以下是相同的代码:

public void doTagging(CRFClassifier model, String input) {
  input = input.trim();
  System.out.println(input + "=>"  +  model.classifyToString(input));
}

希望这有帮助。

如果你需要关于如何在jave中使用Stanford NER的完整代码,这里有一个很好的博客:

https://dataturks.com/blog/stanford-core-nlp-ner-training-java-example.php?s=so