最近遇到了与古文NLP有关的任务,在这里记录一下用beautifulsoup处理html格式的古文数据集的过程。
古文数据来源于中文核心典籍CCT,链接:中文核心典籍 这个网站中提供了包括《周易》、《论语》、《老子》、《韩非子》等在内的中国古文典籍。
点击“下载全部”后会得到一个包含所有典籍的文件夹,其中对于每一部典籍又是一个单独的文件夹,里面存放了html格式的各章原文。文件结构如下:
下面使用beautilfulsoup来进行解析:
from bs4 import BeautifulSoup
html_doc=open('./core_texts/han_fei_zi/0001.htm','r',encoding='utf-8')
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup)
得到结果如下:
发现在一章文章中,各节之间有分隔符<br/> 据此我们可以先将soup转换为字符串格式,然后用split函数将每一节分开。同时注意到,在html格式中会有<html><head>之类与html格式有关的的字符在首尾分布,因此在转换成字符串列表后,将前几项和后几项剔除即可。代码如下:
text_list = str(soup)
text_list = text_list.split('<br/>')
text_list = text_list[3:-1]
print(text_list)
在这里即成功地将文本转换为字符串,并把每一节区分开了。结果如下:
最后一步,将数据集添加我后续分类任务中需要使用到的label,并用pandas将其写入到csv格式的文件中。代码如下:
# 在这里设置label!!!
label = [2 for x in range(len(total_list))] # 韩非子数据集,属于法家
dic = {'sentence':total_list, 'label':label}
df = pd.DataFrame(dic)
df.to_csv('./hanfeizi.csv')