Skip to content

一个能够将轻小说的原文及译本对应句子配对的工具,基于动态时间规整(DTW)算法,使用Rust实现。

Notifications You must be signed in to change notification settings

3tic-project/TextAlignTool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TextAlignTool(文本对齐工具)

一个能够将轻小说的原文及译本对应句子配对的工具,基于动态时间规整(DTW)算法,使用Rust实现。

结果展示

概述

TextAlignTool(TAT)旨在解决日语原文和中文对应文本对齐的问题。适用于:

  • 从事日语和中文文学翻译的译者
  • 研究这些语言之间语言模式的研究人员
  • 为机器翻译训练创建语料库(本项目的初衷)
  • 对翻译作品进行语言学分析

该工具从文本段落中提取特征,计算相似度分数,并使用优化的DTW算法找到最佳对齐路径。

特点

  • 高性能:使用Rayon实现并行处理
  • 智能对齐:使用多种特征进行相似度计算:
    • 日语和中文文本之间的长度比例
    • 匹配数字和数值表达式
    • 对话结构相似性
    • 标点符号模式
  • 灵活处理
    • 通过自动预处理处理各种文本格式
    • 支持批量处理多个书籍对
    • 剪枝优化以限制搜索空间,加快处理速度
  • 全面输出
    • 多种输出格式(TXT, CSV, JSON, HTML)
    • 详细的对齐质量评估
    • 性能统计

使用方法

构建项目

cargo build --release

命令行界面

该工具提供了几个子命令,适用于不同的使用场景:

对齐文本文件

cargo run --release -- align-text --jpn-file 日文文件路径.txt --chs-file 中文文件路径.txt --output-dir 输出目录路径 --formats txt,csv,json,html

批量对齐多个书籍对

cargo run --release -- batch-align --books-json data/books.json --books-dir 书籍目录路径 --output-dir 输出目录路径

注意:本工具无法100%对齐文章所有句子,尤其是开头和结尾部分,对齐准确率可能会低一些,中间准确度很高,使用时建议手动删除结果中头部和尾部5~70句。

在预计算的相似度矩阵上运行

cargo run --release -- align --sim-matrix 相似度矩阵路径.json --output 对齐结果路径.json

性能基准测试

cargo run --release -- benchmark --jpn-size 1000 --chs-size 1000 --repetitions 5 --use-pruning

高级选项

  • --max-dist <值>:最大允许跳跃距离(默认:10)
  • --use-pruning:启用剪枝优化以加快处理速度
  • --resume:从检查点恢复批处理(用于batch-align)

技术细节

对齐算法

该工具使用经过修改的动态时间规整(DTW)算法,具有以下优化:

  1. 剪枝:将搜索空间限制在对角线周围的带状区域
  2. 跳跃惩罚:可自定义的段落跳过惩罚
  3. 多线程:并行特征提取和相似度计算

性能

Rust实现显著优于等效的Python实现(未开源),尤其是对于大型文本文件。基准测试结果显示:

  • 与Python相比,处理速度提高了10-20倍
  • 通过优化的数据结构实现高效内存使用
  • 由于剪枝优化,与文本大小呈线性扩展

使用示例

cargo run --release -- align-text --jpn-file 'testdata/お隣の天使様にいつの間にか駄 目人間にされていた件.txt' --chs-file 'testdata/[佐伯さん].关于我在无意间被隔壁的天使变成废柴这件事.txt' --output-dir 'testdata' --formats txt,csv,json,html

输出

Starting text alignment pipeline
Processing Japanese file: "testdata/お隣の天使様にいつの間にか駄目人間にされていた件.txt"
Processing Chinese file: "testdata/[佐伯さん].关于我在无意间被隔壁的天使变成废柴这件事  01(台).txt"
File reading completed in 1.42ms
Extracting paragraphs from Japanese text
Found paragraph start at line 78: 「……なにやってるん
Japanese text content starts at line 78
Extracted 3166 paragraphs from Japanese text
Found 3166 Japanese paragraphs
Extracting paragraphs from Chinese text
Found possible content start at line 51: 下载后请在24小时内
Chinese text content starts at line 51
Extracted 3255 paragraphs from Chinese text
Found 3255 Chinese paragraphs
Paragraph extraction completed in 3.44ms
Aligning paragraphs...
Starting paragraph alignment
Japanese paragraphs: 3166
Chinese paragraphs: 3255
Extracting features...
Extracting features for 3166 Japanese paragraphs
Extracted features for Japanese in 13.41ms
Extracting features for 3255 Chinese paragraphs
Extracted features for Chinese in 8.81ms
Feature extraction completed in 22.27ms
Creating similarity matrix...
Creating similarity matrix (3166 x 3255)
Using 12 threads with batch size 264
Similarity matrix creation completed in 672.92ms
Running DTW alignment with max_dist=10, pruning=false
DTW matrix size: 3166 × 3255 = 10305330 cells
DTW initialization completed in 13.54ms
Using 3255 bandwidth for search
DTW matrix filling completed in 3.34s
Processed 10305330 cells out of 10305330 total (100.0%)
Processing rate: 3085961.8 cells/sec
Backtracking completed in 324.07µs
Total DTW processing time: 3.35s
Final alignment cost: -2092.0327
DTW alignment completed in 3.36s
DTW alignment found 3165 paragraph pairs

Performance Summary:
--------------------
Feature extraction:    22.27ms
Similarity calculation: 672.92ms
DTW alignment:         3.36s
Total processing time: 4.05s
--------------------
Alignment completed in 4.09s
Found 3165 aligned pairs
Evaluating alignment quality...
Extracting features for 3166 Japanese paragraphs
Extracted features for Japanese in 7.45ms
Extracting features for 3255 Chinese paragraphs
Extracted features for Chinese in 7.68ms
Evaluating alignment quality
Alignment evaluation: Average similarity=0.675, Japanese coverage=1.000, Chinese coverage=0.972
Alignment evaluation completed in 17.25ms
Alignment evaluation results:
  Average similarity: 0.6754
  Japanese coverage:  99.97%
  Chinese coverage:   97.24%
Saving results to "testdata"
Alignment result saved to text file: "testdata/dtw_rust_alignment.txt"
Saved txt format to "testdata/dtw_rust_alignment.txt"
Alignment result saved to CSV file: "testdata/dtw_rust_alignment.csv"
Saved csv format to "testdata/dtw_rust_alignment.csv"
Alignment result saved to JSON file: "testdata/dtw_rust_alignment.json"
Saved json format to "testdata/dtw_rust_alignment.json"
Alignment result saved to HTML file: "testdata/dtw_rust_alignment.html"
Saved html format to "testdata/dtw_rust_alignment.html"
Saved evaluation summary
Results saved successfully
Saving results completed in 265.07ms

Performance Summary:
--------------------
File reading:        1.42ms
Paragraph extraction: 3.44ms
Paragraph alignment:  4.09s
Alignment evaluation: 17.25ms
Saving results:       265.07ms
Total processing time: 4.38s
--------------------

对齐效果: 结果展示

About

一个能够将轻小说的原文及译本对应句子配对的工具,基于动态时间规整(DTW)算法,使用Rust实现。

Resources

Stars

Watchers

Forks

Releases

No releases published

Languages