CBook-150K:复旦大学NLP实验室的大规模中文图书语料库
近日,复旦大学自然语言处理实验室推出了一个名为CBook-150K的大规模中文图书语料库项目。该项目汇集了约15万本中文电子图书,为自然语言处理领域的研究者提供了宝贵的语料资源。
项目概述
CBook-150K是一个基于网上开源MD5图书链接收集而成的中文图书语料集合。项目的主要内容包括:
- 大规模的中文图书MD5链接
- 图书下载和使用方法说明
- 常见电子书格式(PDF、EPUB、MOBI)的解析代码示例
该项目的目标是为中文自然语言处理研究提供高质量、大规模的文本语料,促进相关领域的技术进步。
MD5链接结构
项目提供的MD5链接按照以下结构组织:
├── CBOOK_MD5
├── MD5_0_9999
├── MD5_0_999.txt
├── MD5_1000_1999.txt
├── ...
├── MD5_9000_9999.txt
├── MD5_10000_19999
├── MD5_10000_10999.txt
├── MD5_11000_11999.txt
├── ...
├── ...
├── MD5_140000_149999
├── MD5_140000_140999.txt
├── MD5_141000_141999.txt
├── ...
├── MD5_149000_149999.txt
这种结构使得用户可以方便地按需下载和使用部分数据。
图书获取方法
为了方便用户获取图书内容,项目推荐使用MD5快传插件。具体步骤如下:
- 下载并安装MD5快传插件
- 在百度云盘中使用该插件
- 将MD5链接复制到插件的秒传窗口中进行转存
- 转存成功后即可下载图书文件
图书解析方法
CBook-150K项目还提供了常见电子书格式(PDF、EPUB、MOBI)的解析示例代码,方便研究者提取图书文本内容。以下是几种格式的解析方法简介:
PDF格式解析
项目推荐使用复旦大学自然语言处理实验室开发的DocAI工具来处理PDF文件。此外,也可以使用Python的PyPDF2库进行解析:
import PyPDF2
import os
# 保存每页文本信息
page_info = []
try:
# 指定pdf文件路径
book_path = os.path.join(pdf_chinese_md5_dir, PDF_MD5)
with open(book_path, 'rb') as pdf_fp:
pdf_reader = PyPDF2.PdfReader(pdf_fp)
if pdf_reader.is_encrypted:
# 如果PDF文档是加密的,则需要提供密码才能继续处理
pass
else:
# 遍历每一页并提取文本信息
for i in range(len(pdf_reader.pages)):
page = pdf_reader.pages[i]
text = page.extract_text()
# 如果提取到的文本信息非空,则认为该PDF文档包含文本信息
if text.strip():
page_info.append(text.strip()+'\n')
except Exception as e:
print(e)
EPUB格式解析
对于EPUB格式的电子书,可以使用以下代码进行解析:
import zipfile
from bs4 import BeautifulSoup
import os
# 每个chapter文本
chapter_content_list = []
# 指定epub文件路径
book_path = os.path.join(epub_chinese_md5_dir, EPUB_MD5)
# 使用ZipFile库打开epub文件
book = zipfile.ZipFile(book_path)
# 获取书籍的文本HTML名称
xhtml_data = [string for string in book.namelist() if string.endswith('xhtml') or string.endswith('html') or string.endswith('xml')]
# 解析每个HTML文本格式
for k in range(len(xhtml_data)):
try:
chapter_file = book.open(unquote(xhtml_data[k]))
chapter_content = chapter_file.read().decode('utf-8')
chapter_content = BeautifulSoup(chapter_content, 'html')
chapter_content_list.append(chapter_content.get_text().strip())
except Exception as e:
print(e)
continue
MOBI格式解析
MOBI格式的电子书可以通过以下方式解析:
import mobi
import shutil
from bs4 import BeautifulSoup
import os
# 指定mobi文件路径
book_path = os.path.join(mobi_chinese_md5_dir, MOBI_MD5)
# 提取TMP文件路径
tempdir, filepath = mobi.extract(book_path)
# 获取HTML文件内容后删除中间文件
try:
with open(filepath, 'r', encoding='utf-8') as mobi_fp:
chapter_content = mobi_fp.read()
shutil.rmtree(tempdir)
# 利用BeautifulSoup提取HTML文本信息并作格式化后重新提取
chapter_content = BeautifulSoup(chapter_content, 'html.parser')
chapter_content = chapter_content.prettify()
chapter_content = BeautifulSoup(chapter_content, 'html.parser')
file_content = chapter_content.get_text().strip()
except Exception as e:
print(e)
项目意义与展望
CBook-150K项目的推出为中文自然语言处理研究提供了一个宝贵的大规模语料资源。这些图书涵盖了广泛的主题和领域,可以支持多种NLP任务的研究和开发,如:
- 语言模型预训练
- 文本分类
- 主题建模
- 信息抽取
- 问答系统
- 文本摘要
此外,该项目还为研究者提供了便捷的图书获取和解析方法,大大降低了数据处理的门槛。这不仅有助于加速相关研究的进展,也为跨学科的合作创造了条件。
然而,需要注意的是,CBook-150K项目明确声明"本语料集合仅供科研用途"。使用者在利用这些资源时,应当严格遵守相关的法律法规和道德准则,尊重原作者的知识产权。
未来,我们可以期待看到基于CBook-150K的更多创新性研究成果。同时,也希望有更多类似的开放语料资源项目涌现,推动中文自然语言处理技术的不断进步。
结语
CBook-150K项目的推出无疑是中文NLP领域的一个重要进展。它不仅为研究者提供了宝贵的语料资源,也为今后类似项目的开展树立了良好的范例。我们期待看到更多研究者能够充分利用这一资源,在中文自然语言处理的各个方向上取得突破性进展。
同时,也希望学术界和产业界能够携手合作,在保护知识产权的基础上,推动更多高质量语料资源的开放共享,为中文NLP的发展注入持续动力。