词性分析
所谓词性分析,是指给已经分词的句子的每一个单词,附上他们的词性。从这个角度来说,词性分析的问题是一个序列标注的问题。
数据集与标注集
若要使用统计分析的方法,实现词性分析。则必须有一个已经分好词,并且打好词性的数据集。
问题来了:由于众人对词性的说法各不相同。国内有国内的标准,国外有国外的说法。更何况如何进行标注,在学术界中至今没有准确的说法。所以,若是用的数据集不同,则训练出来的模型也是不同的。模型所采用的标注集也是不尽相同的。
《人民日报》与 PKU 标注集
一个开源的汉语语料库 SIGHAN05 就包括了《人民日报》。但该数据集没有标注词性。HanLP 接受的语料库和预测的结构化句子都是 PKU 格式。
国家语委语料库与 863 标注集
《诛仙》语料库与CTB标注集
这个语料库是从网络小说中收集、标注的。很适合用于网络文体的问题中。
实现
用 PKU 数据集实现:
from pyhanlp import *
corpus_path = 'E:\\Anaconda3\\lib\\site-packages\\pyhanlp\\static\\data\\test\\pku98\\199801.txt' #语料库路径
HMMPOSTagger = JClass('com.hankcs.hanlp.model.hmm.HMMPOSTagger')
FirstOrderHiddenMarkovModel = JClass('com.hankcs.hanlp.model.hmm.FirstOrderHiddenMarkovModel')
SecondOrderHiddenMarkovModel = JClass('com.hankcs.hanlp.model.hmm.SecondOrderHiddenMarkovModel')
tagger_1 = HMMPOSTagger(FirstOrderHiddenMarkovModel()) #创建词性标注模型(一阶隐马尔科夫模型)
tagger_2 = HMMPOSTagger(SecondOrderHiddenMarkovModel()) #创建词性标注模型(二阶隐马尔科夫模型)
tagger_1.train(corpus_path) #训练模型
tagger_2.train(corpus_path) #训练模型
print(', '.join(tagger_1.tag("他", "的", "希望", "是", "希望", "上学")))