hanlp学习三:自定义命名体识别


前言:自然语言处理入门(何晗著)第8章  识别专门领域中的命名实体

一 自定义命名实体操作流程:

1.建立专门领域命名实体识别语料库

         a.收集该领域的文本,作为标注语料库的原料,称为生语料

         b.标注生语料,形成熟语料

2.训练领域模型

3.利用模型进行预测

        模型预测流程:

       1.对句子分词

       2.对分词好了之后的句子,进行词性标注

       3.识别命名体,再把命名实体标注出来

二 相关代码解析

from pyhanlp import *
import os
from pyhanlp.static import download, remove_file, HANLP_DATA_PATH
import zipfile



NERTrainer = JClass('com.hankcs.hanlp.model.perceptron.NERTrainer')
AbstractLexicalAnalyzer = JClass('com.hankcs.hanlp.tokenizer.lexical.AbstractLexicalAnalyzer')
PerceptronSegmenter = JClass('com.hankcs.hanlp.model.perceptron.PerceptronSegmenter')
CWSTrainer = JClass('com.hankcs.hanlp.model.perceptron.CWSTrainer')
PerceptronPOSTagger = JClass('com.hankcs.hanlp.model.perceptron.PerceptronPOSTagger')
PerceptronNERecognizer = JClass('com.hankcs.hanlp.model.perceptron.PerceptronNERecognizer')
POSTrainer = JClass('com.hankcs.hanlp.model.perceptron.POSTrainer')
PLANE_ROOT = 'C:\\Users\\DELL\\Desktop\\NL'
PLANE_CORPUS = os.path.join(PLANE_ROOT, 'test_ner.txt')
PLANE_MODEL = os.path.join(PLANE_ROOT, 'model.bin')

if __name__ == '__main__':
    #训练模型并保存模型
    
    trainer = NERTrainer()#命令实体分词器
    trainer.tagSet.nerLabels.clear()  # 不识别nr、ns、nt
    trainer.tagSet.nerLabels.add("purchaser")  # 目标是识别purchase
    trainer.train(PLANE_CORPUS, PLANE_MODEL).getModel() #生成命令实体分词模型,并保存
    #
    #加载模型
    recognizer = PerceptronNERecognizer(os.path.join(PLANE_ROOT, 'model.bin')) #加载命令实体分词模型
    

##分词训练 在NER预测前,需要一个分词器,最好训练自同源语料库 CWS_CORPUS= 'C:\\Users\\DELL\\Desktop\\NL\\test_ner.txt' PLANE_EMPTY_MODEL='C:\\Users\\DELL\\Desktop\\NL\\cws.bin' CWS_MODEL = CWSTrainer().train(CWS_CORPUS,PLANE_EMPTY_MODEL).getModel() #普通分词器训练后得到的分词模型并保存模型 CWS_MODEL = os.path.join(PLANE_ROOT, 'cws.bin')#分词模型保存路径 # 词性训练 corpus = 'C:\\Users\\DELL\\Desktop\\NL\\test_pos.txt' POS_MODEL = 'C:\\Users\\DELL\\Desktop\\NL\\pos.bin' trainer = POSTrainer() POSMODEL = trainer.train(corpus, POS_MODEL).getModel() # 标注训练并保存文件 POSMODEL = 'C:\\Users\\DELL\\Desktop\\NL\\pos.bin' # 词性模型文件保存路径 analyzer = AbstractLexicalAnalyzer(PerceptronSegmenter(CWS_MODEL), PerceptronPOSTagger(POSMODEL), recognizer).enableCustomDictionary(True) print(analyzer.analyze("2、采购人名称:;福建福州人民医院;")) #print(analyzer.analyze("F-22横空出世。"))

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM