👻

二つのテキスト間の差分を抽出するプログラムを作成しました。

2022/07/14に公開

概要

二つのテキスト間の差分を抽出するプログラムを作成しました。以下のGoogle Colabからご利用いただけます。

https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/校異情報の生成.ipynb

有名なサービスとして「difff」がありますが、今回はPythonを用いて実装しています。

https://difff.jp/

テキスト間の差分の算出には、difflib.SequenceMatcherを使用しています。

https://docs.python.org/ja/3/library/difflib.html

使い方

出力方式として、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」を使用してみます。

http://teicat.huma-num.fr/witnesses.php

Google ColabでダウンロードされるXMLファイルを上記のリンク先にアップロードすることにより、以下のような可視化結果を得ることができます。

まとめ

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

Discussion