1. 程式人生 > >結巴分詞+詞性標註(電子病歷資料)

結巴分詞+詞性標註(電子病歷資料)

結巴分詞+詞性標註

方法一:只使用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等,對專業詞性進行擴充套件。
繼續琢磨琢磨有沒有更好的詞性標註工具可以使用。