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