结巴分词+词性标注
方法一:只使用python中的jieba分词以及词性标注工具
示例文本:
加入自定义词典
代码
import jieba
import jieba.posseg as pseg
import re
filename='seglist.txt'
fileneedcut='result.txt'
f=open(filename,'w+',encoding='utf-8')
fn=open(fileneedcut,'r',encoding='utf-8')
#jieba.load_userdict(file_name)
jieba.load_userdict('mydict.txt')
for eachline in fn:
line=eachline.strip()
#words=jieba.cut(line,cut_all=False)
#words=[word.encode('utf-8') for word in words]
words = pseg.cut(line)
for word,flag in words:
f.writelines(word + ' ' + flag + '\n')
f.close()
fn.close()
运行结果:
tp
方法二:jieba分词+哈工大词性标注pyltp
示例文本
代码
import jieba
from pyltp import Postagger
import os
MODELDIR = "ltp_data"
def fenci_ltp():
fin = open('result.txt', 'r',encoding='utf-8') # 需要进行分词的文件,每行一句话
f=open('seglist.txt','w+',encoding='utf-8')
jieba.load_userdict('mydict.txt')
postagger = Postagger() # 初始化实例
postagger.load(os.path.join(MODELDIR, "pos.model")) # 加载模型
for eachLine in fin:
line = eachLine.strip()
words = jieba.cut(line) # jieba分词返回的是可迭代的generator,里面的词是unicode编码
words = [word for word in words] # 将unicode编码的单词以utf-8编码
postags = postagger.postag(words) # 词性标注
#words_postags = []
for word,postag in zip(words, postags):
#words_seg=words_postags.append(word + '/' + postag)
#for word in words_seg:
f.writelines(word + ' ' + postag + '\n')
#print(' '.join(words_postags))
postagger.release() # 释放模型
if __name__ == '__main__':
fenci_ltp()
运行结果
运行结果对比
1.总体来说,jieba分词和词性标注的结果相对比较靠谱。如"明显好转",jieba词性标注结果为“i 成语”,ltp标注为“v 动词”。
2.两种词性标注都存在前后词性不一致的现象。
3.也可以在用户自定义字典中加入新的词性分类,比如disease/drug等,对专业词性进行扩展。
继续琢磨琢磨有没有更好的词性标注工具可以使用。