1.5.2 Stanford命名实体识别-《NLP自然语言处理原理与实践》

1.下载中文命名实体识别模块(若下载了Stanford全套语言包则不用下载这个,但可以下载下来学习):

书上链接:https://nlp.stanford.edu/software/CRF-NER.shtml
注意:虽然这个链接和1.4.2的中文模型链接一样,但是下载的内容不同,请注意观察图片。
在这里插入图片描述
我下载后传到百度网盘上了,也可用这个:
链接:https://pan.baidu.com/s/1jMdnhu3NWZHDLq8cmidNdg
提取码:d0pf

2.解压这个文件夹

我们能发现,里面的结构和stanford-tagger很像,里面也有一个nar.bat文件,我们可以打开,虽然书中没有介绍这个bat文件的内容,但是仿照1.4.2那一节也可以进行大概的理解。

java -mx1000m -cp stanford-ner.jar;lib/* edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers\english.all.3class.distsim.crf.ser.gz -textFile %1

仍然可以分出三个需要改的部分:
java -mx1000m -cp stanford-ner.jar;lib/* edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers\english.all.3class.distsim.crf.ser.gz -textFile %1

①第一处放jar文件的路径:因为bat文件和jar放在同一个文件夹下所以不用写具体的路径,可以同1.4.2一样用引号引上。
②第二处放模型的路径:最好写完整路径
③第三处用作声明从什么文件读取内容,最后结果输出到哪里去

3.使用bat实现实例

①首先新建一个sample.txt,里面写入:
欧洲 东部 的 罗马尼亚 , 首都 是 布加勒斯特 , 也 是 一 座 世界性 的 城市 。
②编写bat文件,内容如下:

java -mx1000m -cp "stanford-ner.jar的路径(stanford-ner下);" edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier "chinese.misc.distsim.crf.ser.gz的路径(stanford-corenlp下)" -textFile sample.txt > result.txt
pause

我都放在D盘了,我的写法如下

java -mx1000m -cp "D:/stanford-ner-4.0.0/stanford-ner.jar;" edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier "D:/stanford-corenlp/models/ner/chinese.misc.distsim.crf.ser.gz" -textFile sample.txt > result.txt
pause

也可以使用Stanford全套语言包,我的写法如下

java -mx1000m -cp "D:/stanford-corenlp/stanford-corenlp-4.0.0.jar;" edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier "D:/stanford-corenlp/models/ner/chinese.misc.distsim.crf.ser.gz" -textFile sample.txt > result.txt
pause

③双击bat运行,完成后会生成一个result文本,里面有我们的输出结果。

4.编写一个python命名实体类

追加在1.4.2节的stanford.py后面。

class StanfordNERTagger(StanfordCoreNLP):
    def __init__(self, modelpath, jarpath):
        StanfordCoreNLP.__init__(self, jarpath)
        self.modelpath = modelpath
        self.classifier = "edu.stanford.nlp.ie.crf.CRFClassifier"
        self.__buildcmd()
    
    # 构建命令行
    def __buildcmd(self):
        self.cmdline = 'java -mx1000m -cp "' + self.jarpath + '" ' + self.classifier + ' -loadClassifier "' + self.modelpath + '"'
        print(self.cmdline)
    
    # 标注句子
    def tag(self, sent):
        self.savefile(self.tempsrcpath, sent)
        tagtxt = os.popen(self.cmdline + ' -textFile ' + self.tempsrcpath, 'r').read() # 输出到变量中
        self.delfile(self.tempsrcpath)
        return tagtxt
    
    # 标注文件
    def tagfile(self, sent, outpath):
        self.savefile(self.tempsrcpath, sent)
        os.system(self.cmdline + ' -textFile ' + self.tempsrcpath + ' > ' + outpath )
        self.delfile(self.tempsrcpath)

5.执行代码

调用前面我们写的接口

# -*- coding: utf-8 -*-
import sys
import os
from stanford import StanfordNERTagger
import importlib
importlib.reload(sys)

root = 'D:/stanford-ner-4.0.0/stanford-ner.jar;' #jar路径,若想使用全套语言包:D:/stanford-corenlp/stanford-corenlp-4.0.0.jar;也可,但是由于init()函数可以拼接jar地址,所以只用写到jar的上一级即可,即:D:/stanford-corenlp/
modelpath = 'D:/stanford-corenlp/models/ner/chinese.misc.distsim.crf.ser.gz' #模型路径

st = StanfordNERTagger(modelpath , root)
seg_sent = "欧洲 东部 的 罗马尼亚 , 首都 是 布加勒斯特 , 也 是 一 座 世界性 的 城市 。"
taglist = st.tagfile(seg_sent, "ner_test.txt")
print(taglist)

6.补充

模型文件夹里都会有个实例的txt我们可以用它来尝试bat编写结果。例如:stanford-ner-4.0.0中的sample.txt,我们可以用它来尝试英文分词。模型记得换为英文的即可。

java -mx1000m -cp "stanford-ner.jar;" edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier "classifiers\english.all.3class.distsim.crf.ser.gz" -textFile sample.txt > result.txt
pause
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值