# -*- coding: utf-8 -*- """ Created on Thu Oct 3 10:37:23 2024 @author: Arnd Hemlut Hafner """ #テキストファイル形式の釈文を、文字単位でxmlのエレメントに変換する。 #本スクリプトは、釈読の比較を可能にする準備作業として位置づけられる import sys # for sys.exit after error import re from re import compile, search from bs4 import BeautifulSoup from classes import Div, Mojiretu, Head, Honbun, Glyph from tags import Tags #Glyph辞書とTags辞書を初期化しておく glyphs = Glyph() tags = Tags() #Global Variables filenames = ['Igokutojo(Zenjoho)02.txt']#リストにするのは、エディション比較を行う際に複数の釈文を同時に読み込むため convertedData = []#釈文ファイルごとに、複数のDivオブジェクトを含む一つのリストを追加する。 def readlinebyline(filename,n): """ 釈文ファイルを行単位で読み込み、本文と標題を区別した上、 変換モジュールを呼び出してエレメント変換を行わせる。 Parameters ---------- filename : str n : int ファイル名およびテキストを数える Returns ------- None """ convertedData.append([])#当該ファイルに関わるエンコーディングされたDIVオブジェクトを収めるためのリストを追加する。 datafile = open(filename, 'r', encoding='utf-8-sig') for line in datafile: line = re.sub('\n','',line) #空白行を排除 if line == '':continue #タイトル行と本文行の識別 m = re.search('^([^\t]+)\t(.+)$',line) if m:#本文行 convertedData[n][Div.divcount].honbun.addline(m.group(1),m.group(2))#既存のDivオブジェクトに一つの本文行を追加する。 else:#タイトル行 if Div.divcount >= 0: convertedData[n][Div.divcount].complete()#新しいDivオブジェクトが初期化される前に、古い方を完成させる。 convertedData[n].append(Div(line,glyphs,tags))#ここに新しいDivオブジェクトが初期化される。 convertedData[n][Div.divcount].complete() datafile.close() return def outputtextdata(n): """ エンコーディングされた釈文を出力する。 Parameters ---------- n : INT 釈文ファイルおよびエンコーディングされたオブジェクトの通し番号 filename[n]/convertedData[n] Returns ------- None. """ outputfile = open('output(TEI-Encoder(shakudoku02))Text{}.xml'.format(n), 'w', encoding='utf-8-sig') outputfile.write(tags.tagdict['textb'] + tags.tagdict['bodyb']) for m in range(len(convertedData[n])): outputfile.write(convertedData[n][m].zenbun) outputfile.write(tags.tagdict['bodye'] + tags.tagdict['texte']) outputfile.close() def outputdict(dict,filename): """ glyphとしてエンコーディングされた文字の辞書を出力する Parameters ---------- dict : dic エンコーディングにおいて生成された文字辞書(目下は原文句読記号のみ) filename : str Returns ------- None. """ outputfile = open(filename, 'w', encoding='utf-8-sig') for kii in dict.keys(): outputfile.write(kii + ':' + dict[kii] + '\n') outputfile.close() if __name__ == "__main__": for n in range(len(filenames)): readlinebyline(filenames[n],n) for n in range(len(filenames)): outputtextdata(n) outputdict(glyphs.glyphdict,'output(glyphditc).txt')