java - Stanford-NER 自定义对软件编程关键字进行分类

标签 java nlp classification stanford-nlp

我是 NLP 新手,我使用 Stanford NER 工具对一些随机文本进行分类,以提取软件编程中使用的特殊关键字。

问题是,我不知道如何更改 Stanford NER 中的分类器和文本注释器以识别软件编程关键字。例如:

today Java used in different operating systems (Windows, Linux, ..)

分类结果应该是这样的:

Java "Programming_Language"
Windows "Operating_System"
Linux "Operating_system"

您能否帮助我了解如何自定义 StanfordNER 分类器以满足我的需求?

最佳答案

我认为它在斯坦福 NER 常见问题解答部分 http://nlp.stanford.edu/software/crf-faq.shtml#a 中有很好的记录.

步骤如下:

  • 在您的属性文件中更改 map 以指定您的训练数据的注释方式(或 结构化)

map = word=0,myfeature=1,answer=2

  • src\edu\stanford\nlp\sequences\SeqClassifierFlags.java

    添加一个标志,表明你想使用你的新功能,我们称之为 useMyFeature 在 public boolean useLabelSource = false 下面,添加 public boolean useMyFeature= true;

    setProperties(Properties props, boolean printProps) 方法之后的同一文件中 else if (key.equalsIgnoreCase("useTrainLexicon")) { ..} 告诉工具,这个标志是否为你打开/关闭

    else if (key.equalsIgnoreCase("useMyFeature")) {
          useMyFeature= Boolean.parseBoolean(val);
    }
    
  • src/edu/stanford/nlp/ling/CoreAnnotations.java 中,添加以下内容 节

    public static class myfeature implements CoreAnnotation<String> {
      public Class<String> getType() {
        return String.class;
      }
    }
    
  • src/edu/stanford/nlp/ling/AnnotationLookup.javapublic enumKeyLookup{..} 在底部添加

    MY_TAG(CoreAnnotations.myfeature.class,"myfeature")

  • src\edu\stanford\nlp\ie\NERFeatureFactory.java 中,取决于 它是特征的“类型”,添加到

    protected Collection<String> featuresC(PaddedList<IN> cInfo, int loc)
    
    if(flags.useRahulPOSTAGS){
        featuresC.add(c.get(CoreAnnotations.myfeature.class)+"-my_tag");
    }
    

调试: 除此之外,还有一些方法可以将功能转储到文件中,使用它们来查看事情是如何在幕后完成的。另外,我认为您也必须花一些时间在调试器上 :P

关于java - Stanford-NER 自定义对软件编程关键字进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22950995/

相关文章:

nlp - 跨多种语言的语义相似性

python - tensorflow 对多个图像进行分类

classification - WEKA - 分类 - 训练和测试集

java - 尝试学习Java中的继承

java - 在第一个用户登录 android 后显示空值

javascript - 日语/字符编程技巧

python - 将 HashEmbeddings 的想法与 sklearn 的 HashingVectorizer 结合使用

testing - Weka:为什么用我的测试集重新评估没有给出任何结果而不抛出错误消息?

java - 在 Java 中,什么时候应该使用 "Object o"而不是泛型?

java - Hibernate PostUpdateEvent null 旧状态