使用Stanford Word Segmenter and Stanford Named Entity Recognizer (NER)实现中文命名实体识别

http://nlp.stanford.edu/software/CRF-NER.shtml 
这里对Stanford Named Entity Recognizer作了基本的介绍,提供了下载的链接,并且为其他编程语言如php、python、R、Scala(http://stanfordnlp.github.io/CoreNLP/other-languages.html)等提供了使用接口。并且这里提供了对于英语之外的其他自然语言,如德语、西班牙语、中文等,也提供了模型供下载。

简介

    Stanford NER是命名实体识别(NER,Named Entity Recognizer)的一个Java实现。NER可以标记文本中词的序列,如人名、公司名、基因名或者蛋白质名等。它自带精心设计的用于NER的特征提取器,和用于定义特征提取器的许多选项。在“下载”处,这里有许多好的英文命名实体识别器,特别是对于有三类的(人名、组织机构名、地名),并且我们也提供对于不同语言和情况的各种其他模型,包括仅仅在CoNLL 2003英文训练数据的模型。 
    Stanford NER作为CRFClassifier(条件随机场分类器)也是著名的。此软件提供一个对于(任意序列)线性链条件随机场(CRF)序列模型的通用实现。通过标记数据,可以训练自己的模型,你可以使用这个代码,为NER或者其他任务,建立序列模型。 
    Stanford NER可供下载,在GNU General Public license (V2 or later)许可下。源码也提供在下面。下载包中包含了命令行调用组件(请查看下载中包含的shell脚本和批处理文件),运行作为一个服务(查看源码jar文件中的NERServer),一个java应用程序接口(查看一个简单例子——NERDemo.java

引用

    这里提供的CRF序列模型没有精准对应于任何已经出版的文章,但是文章或者软件可以这样引用:Jenny Rose Finkel, Trond Grenager, and Christopher Manning. 2005. Incorporating Non-local Information into Information Extraction Systems by Gibbs Sampling. Proceedings of the 43nd Annual Meeting of the Association for Computational Linguistics (ACL 2005), pp. 363-370. http://nlp.stanford.edu/~manning/papers/gibbscrf3.pdf

开始操作

你可以尝试Stanford NER CRF classifiers或者Stanford NER 作为Stanford CoreNLP中的一部分,从而理解Stanford NER是什么,它是否对于您有帮助。去使用此软件在您的电脑上,首先下载zip压缩文件。用其他软件解压此压缩包或者使用unzip命令来解压。通常创建一个”stanford-ner”空目录,将文件直接解压到此目录。这里不需要安装步骤,可以直接在此目录中运行Stanford NER。一般地,Stanford NER可以从命令行运行。当前最新版本的Stanford NER要求使用java 1.8或者更新的java版本。确定你已经安装了java1.8版本或者更新版本,否则还可以运行一个旧版本的Stanford NER(Stanford NER 3.4.1支持java 6或者java 7).

NER GUI

确保java在电脑的环境变量中,就可以运行NER图形用户界面程序,通过双击或者运行./ner-gui.sh(在Linux系统中)来打开程序。也可以通过双击stanford-ner.jar文件去运行程序,但是很可能会因为操作系统没有为我们的NER系统分配足够多的java内存,而导致运行失败。所以,通过双击ner-gui.bat(Windows中)或者ner-gui.sh(Linux/Unix/mac中)。然后,打开了程序之后,使用顶部的菜单栏中“Classifier”菜单,从“classifiers”目录加载一个CRF分类器。可以通过“File”菜单加载一个文本文件或者web网页,或者使用程序自带的默认文本。最后,能够点击“Run NER”按钮,对文本做出实体标记。

单个CRF NER分类器从命令行

在命令行中完成,你需要在操作系统的环境变量中包含了java的目录,并且stanford-ner.jar被包含在CLASSPATH中。具体操作方式依赖于具体的操作系统。 
对系统中自带的sample.txt进行NER测试,可以在命令行中使用以下代码 
Windows中

java -mx600m -cp "*;lib\*" edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers/english.all.3class.distsim.crf.ser.gz -textFile sample.txt
  • 1

Linux/Unix中

java -mx600m -cp "*:lib/*" edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers/english.all.3class.distsim.crf.ser.gz -textFile sample.txt
  • 1

运行以上命令,可以得到如下结果 
这里写图片描述

当然,也可将结果保存到一个tsv文件中,前两列对应实体以及它们的类别,代码如下

java -mx600m -cp "*:lib/*" edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers/english.all.3class.distsim.crf.ser.gz -outputFormat tabbedEntities -textFile sample.txt > sample2017-01-24.tsv
  • 1

查看产生的tsv文件 
这里写图片描述

完全Stanford NER 功能

这个Stanford distribution也允许访问Stanford CoreNLP管道的全部NER 功能。这些功能可以被使用通过NERClassifierCombiner类。NERClassifierCombiner允许多CRFs一起被使用,并且也提供选项识别数字序列模型和时间模型,基于SUTime的基于规则NER。 
使用NERClassifierCombiner在命令行,在lib目录中的jar文件,必须被在CLASSPATH中。这里是一个例子

java -mx1g -cp "*:lib/*" edu.stanford.nlp.ie.NERClassifierCombiner -textFile sample.txt -ner.model classifiers/english.all.3class.distsim.crf.ser.gz,classifiers/english.conll.4class.distsim.crf.ser.gz,classifiers/english.muc.7class.distsim.crf.ser.gz
  • 1

这里写图片描述 
这里有一个不同之处,这里的sunday被识别为“DATE”

通过使用API实现可编程的

你能够在自己的代码中调用Stanford NER。NERDemo.java说明了集中调用的方式。我们建议你从这里例子开始,然后在需要的时候看javadoc等。

通过服务来编程

Stanford NER也能够被设置去运行作为一个服务,此服务需要在socket上监听。

其他问题

你可以查看ppt上关于NER的介绍。PPT下载地址是nlp.stanford.edu/software/jenny-ner-2007.ppt 
这里也有一系列的FAQ(Frequently Asked Questions)可查看

原网页是http://nlp.stanford.edu/software/CRF-NER.shtml ,我没有完全翻译此网页,比如原网页中还提供了邮件地址等,我忽略了。

参考网页 
http://www.2cto.com/kf/201612/575894.html

相关文章
相关标签/搜索