最近在做ner,需要随机抽取语料划分训练集和测试集,没有找到现成方法,自己写了一个。
Conll-2003格式用空行区别句子
EU NNP B-NP B-ORG
rejects VBZ B-VP O
German JJ B-NP B-MISC
call NN I-NP O
to TO B-VP O
boycott VB I-VP O
British JJ B-NP B-MISC
lamb NN I-NP O
. . O O
Peter NNP B-NP B-PER
Blackburn NNP I-NP I-PER
BRUSSELS NNP B-NP B-LOC
1996-08-22 CD I-NP O
用pandas读取空行元素会被识别的NAN,所以重点就是找到NAN,以其作为切分点,这里使用numpy的split函数。第一个参数是DataFrame,第二个参数是一个List,List中放置切割点(index)。pandas.isna输出一个Series存储布尔值。nan为True其他False,numpy.where输出[[p1,p2,p3]]其中P是na的index,所以需要找其第一个元素。
完整代码如下
"""
Created on Sun Mar 21 17:28:56 2021
@author: KaireyX1C6th
"""
# 切割为句子
sentences = np.split(dataset,np.where(pd.isna(dataset[0])==1)[0