Skip to content

Latest commit

 

History

History

复现

复现步骤

纯古文原文和双语数据的处理过程有所区别,所以下面分别介绍处理步骤。

环境需求

git clone https://github.com/NiuTrans/Classical-Modern.git
cd Classical-Modern/复现
pip install -r requirements.txt  

一、双语数据

1. 爬取数据

python crawl_classical.py

上面脚本主要爬取古诗文网的双语数据,运行后会在当前文件夹下生成 双语数据log 文件夹,分别用来存储原始数据和运行日志文件。

:因爬虫网络请求原因,运行一次上述指令不能获取全部数据,当发生网络中断时,等待10分钟后,重复执行上述指令即可。

2. 删除空文件夹

python clear_valid_dir.py --base_dir "双语数据"

在步骤1中可能会生成很多无数据的空文件夹,本步骤运行后可以清空这些空文件夹。

3. 句子切分

python divide_sentence.py --base_dir "双语数据"

本步骤运行后会在每个书籍具体章节目录文件夹下生成 temp_ori_sentence.txttemp_trans_sentence.txt 文件。

在步骤1中爬取的原始数据大多为段落句子,为了方便后续得到以句子级别为对齐的双语数据,首先进行句子切分,具体来说是以“。!?”这样的子句进行切分。

:引号被处理了空格符。

例句:

子曰:“学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎?”

有子曰:“其为人也孝弟,而好犯上者,鲜矣;不好犯上而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为仁之本与!”

在本步骤将处理成:

子曰: 学而时习之,不亦说乎?

有朋自远方来,不亦乐乎?

人不知而不愠,不亦君子乎?

有子曰: 其为人也孝弟,而好犯上者,鲜矣;不好犯上而好作乱者,未之有也。

君子务本,本立而道生。

孝弟也者,其为仁之本与!

:原始数据中有大量不规则标点符号情况,上述脚本可以处理大多数情况,但仍有规则涵盖不足的地方。实际操作时我们采用人工方式,手动处理了几处检查出来的不合格句子。在脚本文件 divide_sentence.py 中的第93-104行中预留了参考中断处理代码,这部分需要重新实现。

4. 句子对齐

本步骤主要针对步骤3中的句子进行原文-译文对齐,具体对齐方法与思路采用归一化编辑距离算法与长度比指标。

:因算法时间复杂度较高,因此推荐将存放数据文件夹拆分成多份,多进程运行或多设备运行。单进程单设备处理完全部数据预计花费数月时间!

# 有服务器或linux系统推荐使用下列指令处理数据
nohup python -u align.py --base_dir "双语数据"\
 >双语数据.log 2>&1 &
# 小tips:可以将存放数据的文件夹 “双语数据” 里面的数据平均分成n份,命名成 双语数据1 ~ 双语数据n,这执行上面命令n次(命令中的两处 双语数据 需替换成新文件夹名 双语数据n),可分成n个进程同时处理对齐脚本。
# 也可以直接用python指令运行
python align.py --base_dir "双语数据"
# 分成n份处理方式参考上面的tips

本步骤运行后会在每个书籍具体章节目录文件夹下生成 my_ori.txtmy_trans.txt 文件。

5. 删除中间文件

python delete_and_rename.py --base_dir "双语数据"

本步骤会将一些临时文件删除,最终每个书籍文件夹下保存着 source.txttarget.txtbitext.txt

二、古文原文

1. 爬取数据

python crawl_classical_src.py

上面脚本主要爬取古诗文网的双语数据,运行后会在当前文件夹下生成 古文原文log 文件夹,分别用来存储原始数据和运行日志文件。

:因爬虫网络请求原因,运行一次上述指令不能获取全部数据,当发生网络中断时,等待10分钟后,重复执行上述指令即可。

2. 删除空文件夹

python clear_valid_dir.py --base_dir "古文原文"

在步骤1中可能会生成很多无数据的空文件夹,本步骤运行后可以清空这些空文件夹。