hankcs / HanLP

Natural Language Processing for the next decade. Tokenization, Part-of-Speech Tagging, Named Entity Recognition, Syntactic & Semantic Dependency Parsing, Document Classification
https://hanlp.hankcs.com/en/
Apache License 2.0
33.91k stars 10.15k forks source link

pyhanlp CRF词法分析中词性显示不全? #927

Closed yaleimeng closed 6 years ago

yaleimeng commented 6 years ago

注意事项

请确认下列注意事项:

版本号

当前最新版本号是:1.6.7
我使用的版本是:1.6.7 pyhanlp 0.1.44

我的问题

使用CRF词法分析时,得到的词性标注信息不完整。但以前使用CRFSegment时词性标注正常。是不是两者的词性体系不一样?

复现问题

步骤

  1. 首先……
  2. 然后……
  3. 接着……

触发代码

from pyhanlp import *

sent = '''哪些项目可以享受优惠政策,如何申请?'''

# CRF词法分析
CRFAnalyzer =  JClass("com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer")
seg = CRFAnalyzer().enableCustomDictionary(True)
out = seg.analyze(sent)
print(out)  

# CRF分词
Config = JClass("com.hankcs.hanlp.HanLP$Config")
Config.ShowTermNature = True
CRFSegment = JClass("com.hankcs.hanlp.seg.CRF.CRFSegment")
seger = CRFSegment().enableCustomDictionary(True)
words =[str(term) for term in  seger.seg(sent)]
print(' '.join(words))

期望输出

每个词语标注完整的词性,比如 如何/ryv   

实际输出

部分词语的标注只有开头一两个字母。例如:
CRF词法分析结果:
- 哪些/r 项目/n 可以/v 享受/v 优惠政策/nz ,/w 如何/r 申请/v ?/w
- 每年/r 在/p 青海湖/ns 迁徙/v 停留/v 的/u 候鸟/n 有/v 92/m 种/q 。/w
老版本CRFSegment结果:
- 哪些/ry 项目/n 可以/v 享受/v 优惠政策/nz ,/w 如何/ryv 申请/v ?/w
- 每年/t 在/p 青海湖/ns 迁徙/v 停留/vi 的/ude1 候鸟/n 有/vyou 92/mq 种/q 。/w

其他信息

hankcs commented 6 years ago

标注集的确不同,新版训练自98年人民日报,PKU98词性标注集仅含有46个标签。旧版训练自14年人民日报,有140多个标签

  1. 但14年人民日报语料库的质量较低,虽然类别很多,但推测是机器标注的,没有经过人工校对。
  2. 这些词类的设计也并不科学,必须许多学科名词以g开头,破坏了名词以n开头的惯例。
  3. 另外,该语料库授权不明,恐怕有版权风险。

基于这3个原因,新版不再采用14年人民日报。

yaleimeng commented 6 years ago

谢谢您的回答。 @hankcs