工具分享: 中文實體標注工具


發現了一款比較方便標注的工具 https://github.com/jiesutd/SUTDAnnotator ,使用python2編寫的界面,相對比較輕量,適合個人使用。但如果是團體使用的,還是web界面的會比較好。
 
運行Annotator_backup.py得到如下界面:open導入文件,選中要標注的詞語,按下已設定好的快捷鍵A-V,即可完成對應的標注
              
 修改添加上自己所需的實體名:在對應的快捷鍵的右邊輸入實體名,按下remap按鈕即可重新分配快捷鍵對應的實體名
 導出結果:export
                        
                        
 
 
其他更詳細的操作參照github中的描述
 
將標注好的ann文件轉成常用的訓練樣本的格式,以下有python3實現
 
 
import re

# txt2ner_train_data turn label str into ner trainable data
# s :labeled str  eg.'我來到[@1999年#YEAR*]的[@上海#LOC*]的[@東華大學#SCHOOL*]'
# save_path: ner_trainable_txt name
def str2ner_train_data(s,save_path):
    ner_data = []
    result_1 = re.finditer(r'\[\@', s)
    result_2 = re.finditer(r'\*\]', s)
    begin = []
    end = []
    for each in result_1:
        begin.append(each.start())
    for each in result_2:
        end.append(each.end())
    assert len(begin) == len(end)
    i = 0
    j = 0
    while i < len(s):
        if i not in begin:
            ner_data.append([s[i], 0])
            i = i + 1
        else:
            ann = s[i + 2:end[j] - 2]
            entity, ner = ann.rsplit('#')
            if (len(entity) == 1):
                ner_data.append([entity, 'S-' + ner])
            else:
                if (len(entity) == 2):
                    ner_data.append([entity[0], 'B-' + ner])
                    ner_data.append([entity[1], 'E-' + ner])
                else:
                    ner_data.append([entity[0], 'B-' + ner])
                    for n in range(1, len(entity) - 1):
                        ner_data.append([entity[n], 'I-' + ner])
                    ner_data.append([entity[-1], 'E-' + ner])

            i = end[j]
            j = j + 1

    f = open(save_path, 'w', encoding='utf-8')
    for each in ner_data:
        f.write(each[0] + ' ' + str(each[1]))
        f.write('\n')
    f.close()
# txt2ner_train_data turn label str into ner trainable data
# file_path :labeled multi lines' txt  eg.'我來到[@1999年#YEAR*]的[@上海#LOC*]的[@東華大學#SCHOOL*]'
# save_path: ner_trainable_txt name
def txt2ner_train_data(file_path,save_path):
    fr=open(file_path,'r',encoding='utf-8')
    lines=fr.readlines()
    s=''
    for line in lines:
        line=line.replace('\n','')
        line=line.replace(' ','')
        s=s+line
    fr.close()
    str2ner_train_data(s, save_path)

if(__name__=='__main__'):
    s = '我來到[@1999年#YEAR*]的[@上海#LOC*]的[@東華大學#SCHOOL*]'
    save_path = 's.txt'
    str2ner_train_data(s, save_path)
    file_path='D:\\codes\\python_codes\\SUTDAnnotator-master\\demotext\\ChineseDemo.txt.ann'
    txt2ner_train_data(file_path,'s1.txt')

  

 
 
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM