结巴分词+词性标注(电子病历数据)

结巴分词+词性标注


方法一:只使用python中的jieba分词以及词性标注工具

示例文本:

结巴分词+词性标注(电子病历数据)_第1张图片

加入自定义词典

结巴分词+词性标注(电子病历数据)_第2张图片

代码

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结巴分词+词性标注(电子病历数据)_第3张图片

方法二:jieba分词+哈工大词性标注pyltp

示例文本

结巴分词+词性标注(电子病历数据)_第4张图片

代码

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()

运行结果

结巴分词+词性标注(电子病历数据)_第5张图片

运行结果对比

1.总体来说,jieba分词和词性标注的结果相对比较靠谱。如"明显好转",jieba词性标注结果为“i 成语”,ltp标注为“v 动词”。
2.两种词性标注都存在前后词性不一致的现象。
在这里插入图片描述
在这里插入图片描述
3.也可以在用户自定义字典中加入新的词性分类,比如disease/drug等,对专业词性进行扩展。
继续琢磨琢磨有没有更好的词性标注工具可以使用。

你可能感兴趣的:(电子病历)