很抱歉打扰您,我是小白,最近才开始学习hanlp,对命名实体识别结果中实体的start 和end有些疑问。
我的代码是这样的:
-- coding:utf-8 --
import hanlp
import requests
def hanlp_test(texts):
HanLP = hanlp.load(hanlp.pretrained.mtl.CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH) # 世界最大中文语料库
r=HanLP(texts)
#’(‘阎锡山’, ‘PERSON’, 22, 23)
#print(r[“ner/msra”])
for sen_split in r[“ner/msra”]:
for word_ner in sen_split:
if word_ner[1]==“PERSON”:
print(word_ner)
text=r"第二战区东路第十八集团军(八路军)和第二十七、四十军于12月10日开始攻击,一度收复山西黎城、潞城、涉县;南路第四、五、十四集团军与日军第三十七师团在中条山地区激战月余,克闻喜、绛县、翼城附近日军据点多处;西、北两路由于第二战区司令长官阎锡山指挥主力投入反共作战,冬季攻势计划落空。第八战区于12月18日以第三十五、八十一军、骑兵第六军等部发动进攻,遭日军反扑,次年4月初击退日军,收复临河、五原等地。冀察、鲁苏战区部队分别破坏平汉铁路北段及津浦、胶济铁路,袭击日军据点。
hanlp_test(text.split(","))
我的结果是这样的:
(‘阎锡山’, ‘PERSON’, 22, 23)
我的疑问如下:
在nlp说明文档中解释ner的结果是(实体,实体名称,start,end)
start是否表示实体在句子中的起始位置,end是否表示在句子中的结尾位置?如果是的话,为什么end-start不等于实体的长度呢?而且start的数字也与实体所在的位置有差别?是由于中文的编码导致的吗?