経緯
epubの電子書籍データがあるのですが ルビ(ふりなが)があると読み上げソフト(Aquile Reader)でおかしくなる
例えば 憎い のデータだと
「にくにくい」と読みます
ちょっとこれだと聞き取りにくいので 憎いにする必要があります
ステップ
EPUBファイルからルビ(ふりがな)を消すには、 EPUBファイルを編集する必要があります。EPUBは基本的にZIPフォーマットで圧縮された一連のHTMLファイルとメタデータから成るため、以下のステップでルビを消すことができます。
ステップ 1: EPUBファイルを解凍する
- EPUBファイルの拡張子を .zip に変更します。
- そのZIPファイルを解凍して、中のファイルにアクセスします。
ステップ 2: HTMLファイルを編集する
- 解凍したフォルダ内のHTMLファイルを探します。
- HTMLエディター(またはテキストエディター)を使用して、各HTMLファイルを開きます。
- ルビが使われている部分を見つけます。
通常、<ruby>タグや<rt>タグが使われています。例えば: html <ruby>漢字<rt>かんじ</rt></ruby>
- rubyタグとrtタグを削除または編集して、ルビを消します。ルビのテキストだけを削除する場合は、
上記の例では
<rt>かんじ</rt>
部分を消します。
ステップ 3: EPUBファイルを再圧縮する
- 編集が完了したら、全てのファイルを再びZIPフォーマットで圧縮します。
- 圧縮したファイルの拡張子を .zip から .epub に変更します。
ツールの使用
EPUBファイルの編集には、Sigilのような専用のEPUBエディタを使用すると便利です。SigilはEPUBファイルを直接開いて、内部のHTMLを編集できる無料のオープンソースソフトウェアです。
これでルビを消す作業が可能ですが、EPUBの構造に慣れていない場合は注意が必要です。 ファイルの構造を変えることで、EPUBが読めなくなる可能性もありますので、 作業前には必ずバックアップを取ります
プログラム
一個一個やるのは無理ゲーなのでpythonで対応します 必要なライブラリをインストールします。 このスクリプトではzipfileとBeautifulSoupを使用します。 BeautifulSoupはHTMLの解析と編集を簡単にするためのライブラリです。
pip install beautifulsoup4
次に、スクリプトです:
import os import zipfile from bs4 import BeautifulSoup def remove_ruby_tags(epub_path, output_path): # EPUBファイルを解凍するための一時ディレクトリを作成 with zipfile.ZipFile(epub_path, 'r') as zip_ref: zip_ref.extractall('temp_epub') # 解凍したディレクトリ内の全HTMLファイルを探索 for foldername, subfolders, filenames in os.walk('temp_epub'): for filename in filenames: if filename.endswith('.html'): file_path = os.path.join(foldername, filename) with open(file_path, 'r', encoding='utf-8') as file: soup = BeautifulSoup(file, 'html.parser') # <ruby>タグ内の<rt>タグを削除し、ベーステキストのみを保持 for ruby_tag in soup.find_all('ruby'): rt_tags = ruby_tag.find_all('rt') for rt in rt_tags: rt.decompose() # <rt>タグを削除 ruby_tag.unwrap() # <ruby>タグを削除し、中身だけを残す # 変更をファイルに保存 with open(file_path, 'w', encoding='utf-8') as file: file.write(str(soup)) if filename.endswith('.xhtml'): file_path = os.path.join(foldername, filename) with open(file_path, 'r', encoding='utf-8') as file: soup = BeautifulSoup(file, 'html.parser') # <ruby>タグ内の<rt>タグを削除し、ベーステキストのみを保持 for ruby_tag in soup.find_all('ruby'): rt_tags = ruby_tag.find_all('rt') for rt in rt_tags: rt.decompose() # <rt>タグを削除 ruby_tag.unwrap() # <ruby>タグを削除し、中身だけを残す # 変更をファイルに保存 with open(file_path, 'w', encoding='utf-8') as file: file.write(str(soup)) # 変更されたファイルを使って新しいEPUBファイルを作成 with zipfile.ZipFile(output_path, 'w') as zip_ref: for foldername, subfolders, filenames in os.walk('temp_epub'): for filename in filenames: file_path = os.path.join(foldername, filename) arcname = os.path.relpath(file_path, 'temp_epub') zip_ref.write(file_path, arcname) # 一時ディレクトリを削除 for foldername, subfolders, filenames in os.walk('temp_epub', topdown=False): for filename in filenames: os.remove(os.path.join(foldername, filename)) os.rmdir(foldername) # 使用例 remove_ruby_tags('path_to_your_epub.epub', 'output.epub')
このスクリプトは以下の機能を持っています: