概要
二つのテキスト間の差分を抽出するプログラムを作成しました。以下のGoogle Colabからご利用いただけます。
https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/校異情報の生成.ipynb
有名なサービスとして「difff」がありますが、今回はPythonを用いて実装しています。
difff《デュフフ》
テキスト間の差分の算出には、difflib.SequenceMatcherを使用しています。
difflib --- 差分の計算の補助
ソースコード: Lib/difflib.py This module provides classes and functions for comparing sequences. Most of them compare sequences of text lines (for example lists of strings, or file objects) and produce d...
使い方
出力方式として、HTMLファイルとTEIファイルの2種類を選ぶことができます。
HTML
HTMLファイルの出力結果例は以下です。

XML
XMLファイルの出力例は以下です。
<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="https://raw.githubusercontent.com/ldasjp8/tei-example/main/tei_all.rng" schematypens="http://relaxng.org/ns/structure/1.0" type="application/xml"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<titleStmt>
<title>Title</title>
</titleStmt>
<publicationStmt>
<p>Publication</p>
</publicationStmt>
<sourceDesc>
<listWit>
<witness xml:id="t1">中村式五十音</witness>
<witness xml:id="t2">中村式五十音又様</witness>
</listWit>
</sourceDesc>
</fileDesc>
</teiHeader>
<text>
<body>
<p>あいうえお <lb/>
<app xml:id="a1">
<lem wit="#t1">か</lem>
<rdg wit="#t2">こけ</rdg>
</app>きく <app xml:id="a2">
<lem wit="#t1">けこ</lem>
<rdg wit="#t2">か</rdg>
</app>
<lb/>
さしすせそ <lb/>
た <app xml:id="a3">
<lem wit="#t1">ちぬ</lem>
<rdg wit="#t2">じづ</rdg>
</app>てと <app xml:id="a4">
<lem wit="#t1"/>
<rdg wit="#t2"/>
</app>
</p>
</body>
</text>
</TEI>
工夫した点として、TEI(Text Encoding Initiative)で定められているappタグを用いて出力します。そのため、appタグに対応したツールで可視化を行うことができます。
例えば、以下の「TEI Critical Apparatus Toolbox」を使用してみます。
TEI Critical Edition Toolbox
Google ColabでダウンロードされるXMLファイルを上記のリンク先にアップロードすることにより、以下のような可視化結果を得ることができます。

まとめ
二つのテキスト間の差分を取り扱う際の参考になれば幸いです。



コメント
…