前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Stanford NLP工具实现中文命名实体识别

使用Stanford NLP工具实现中文命名实体识别

作者头像
sparkexpert
发布2022-05-07 13:53:14
1.5K0
发布2022-05-07 13:53:14
举报
文章被收录于专栏:大数据智能实战

一、     系统配置

Eclipseluna、 JDK 1.8+

二、分词介绍

使用斯坦福大学的分词器,下载地址http://nlp.stanford.edu/software/segmenter.shtml,从上面链接中下载stanford-segmenter-2014-10-26,解压之后,如下图所示

data目录下有两个gz压缩文件,分别是ctb.gz和pku.gz,其中CTB:宾州大学的中国树库训练资料 ,PKU:中国北京大学提供的训练资料。

三、     NER

使用斯坦福大学的NER,下载地址:http://nlp.stanford.edu/software/CRF-NER.shtml,在该页面下分别下载stanford-ner-2014-10-26和stanford-ner-2012-11-11-chinese两个包。

解压后分别可以看到:

同时下载commons-io-2.4.jar、commons-lang3-3.3.2.jar、junit-4.10.jar三个Java包。

四、     中文命名实体识别

新建Java项目,将data目录拷贝到项目根路径下,再把stanford-ner-2012-11-11-chinese解压的内容全部拷贝到classifiers文件夹下,将第三步中的三个Java包以及stanford NER和分词器的Java包都导入classpath中,然后,在:http://nlp.stanford.edu/software/ corenlp.shtml下载stanford-corenlp-full-2014-10-31,将解压之后的stanford-corenlp-3.5.0也加入到classpath之中。将stanfordner中src添加到项目目录下,并添加一下两个代码:

ExtractDemo.java

importedu.stanford.nlp.ie.AbstractSequenceClassifier;

importedu.stanford.nlp.ie.crf.CRFClassifier;

importedu.stanford.nlp.ling.CoreLabel;

/*

ClassNameExtractDemo

加载NER模块

*/

publicclassExtractDemo

   {

privatestaticAbstractSequenceClassifier<CoreLabel>ner;

publicExtractDemo()

      {

      InitNer();

      }

publicvoidInitNer()

   {

      String serializedClassifier ="classifiers/chinese.misc.distsim.crf.ser.gz";//chinese.misc.distsim.crf.ser.gz

if (ner ==null)

         {

ner =CRFClassifier.getClassifierNoExceptions(serializedClassifier);

         }

   }

public StringdoNer(Stringsent)

      {

returnner.classifyWithInlineXML(sent);

      }

publicstaticvoid main(Stringargs[])

      {

      String str = "今天下雨,不去打球。";

      ExtractDemoextractDemo =newExtractDemo();    System.out.println(extractDemo.doNer(str));

      System.out.println("Complete!");

      }

}

ZH_SegDemo.java

importjava.io.File;

importjava.io.IOException;

importjava.util.Properties;

importorg.apache.commons.io.FileUtils;

importedu.stanford.nlp.ie.crf.CRFClassifier;

importedu.stanford.nlp.ling.CoreLabel;

/*

* ClassNameZH_SegDemo

* Description 使用StanfordCoreNLP进行中文实体识别

*/

public class ZH_SegDemo {

public staticCRFClassifier<CoreLabel>segmenter;

static {

// 设置一些初始化参数

Propertiesprops = new Properties();

props.setProperty("sighanCorporaDict","data");

props.setProperty("serDictionary","data/dict-chris6.ser.gz");

props.setProperty("inputEncoding","UTF-8");

props.setProperty("sighanPostProcessing","true");

segmenter = newCRFClassifier<CoreLabel>(props);

segmenter.loadClassifierNoExceptions("data/ctb.gz",props);

segmenter.flags.setProperties(props);

}

public static String doSegment(String sent) {

String[] strs =(String[]) segmenter.segmentString(sent).toArray();

StringBufferbuf= new StringBuffer();

for (String s :strs) {

buf.append(s +" ");

}

System.out.println("segmentedres: " + buf.toString());

returnbuf.toString();

}

public staticvoid main(String[] args) {

try {

StringreadFileToString = FileUtils.readFileToString(newFile("IFENG-8.txt"));

StringdoSegment = doSegment(readFileToString);

System.out.println(doSegment);

ExtractDemoextractDemo= new ExtractDemo();

System.out.println(extractDemo.doNer(doSegment));

System.out.println("Complete!");

} catch(IOException e) {

e.printStackTrace();

}

}

}

最后项目结构如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档