#author("2024-11-25T16:35:13+09:00","default:ogiwiki","ogiwiki")
#author("2024-11-26T14:31:01+09:00","default:ogiwiki","ogiwiki")
[[総研大2024/言語資源学演習1]]

**準備 [#p5cef34f]
-Pythonのインストール
 sudo apt install python3

-pip :Pythonのパッケージ管理ツール
 sudo apt install pip


**青空文庫テキストを正規表現を使って整形する [#s0b635f0]

-サンプルデータのダウンロード
--夏目漱石「こころ」https://www.aozora.gr.jp/cards/000148/card773.html
--テキストデータ https://www.aozora.gr.jp/cards/000148/files/773_ruby_5968.zip

 wget https://www.aozora.gr.jp/cards/000148/files/773_ruby_5968.zip
 unzip 773_ruby_5968.zip
 nkf -w kokoro.txt |less

 nkf -w --overwrite kokoro.txt

-[[青空文庫形式>https://www.aozora.gr.jp/aozora-manual/index-input.html?utm_source=chatgpt.com#markup]]

-chatGPTに聞いてみる
--https://chatgpt.com/share/6743f4eb-a7f8-800f-80ff-cca25fdbd130

 
 import re  # 正規表現を使うためのモジュール
 import argparse  # コマンドライン引数を扱うためのモジュール
 
 # ファイルを読み込む関数
 def read_aozora_file(file_path):
     """
     青空文庫形式のテキストファイルを読み込む関数。
     :param file_path: 読み込むファイルのパス
     :return: ファイルの内容を1行ずつリストにして返す
     """
     with open(file_path, 'r', encoding='utf-8') as file:
         lines = file.readlines()  # ファイルの各行をリストとして取得
     return lines
 
 # ヘッダーとフッターを削除する関数
 def remove_metadata(lines):
     """
     青空文庫形式のテキストの中からヘッダーとフッター部分を削除する。
     :param lines: テキストデータ(リスト形式)
     :return: ヘッダーとフッターを除去したテキストデータ
     """
     start = 0  # 本文が始まる行のインデックス
     end = len(lines)  # 本文が終わる行のインデックス(初期値は最後まで)
     
     # ヘッダーの終了を示す「-------」を探す
     for i, line in enumerate(lines):
         if line.startswith('-------'):
             start = i + 1  # ヘッダー終了後の行から本文が始まる
             break
 
     # フッターの開始を示す「底本:」を探す
     for i, line in reversed(list(enumerate(lines))):  # リストを逆順に走査
         if line.startswith('底本:'):
             end = i  # フッターの手前で本文が終わる
             break
     
     # 本文の部分だけを切り出して返す
     return lines[start:end]
 
 # ルビや注釈を削除する関数
 def clean_annotations(lines):
     """
     青空文庫形式のテキストからルビや注釈を削除して整形する。
     :param lines: 整形前のテキストデータ(リスト形式)
     :return: 整形後のテキストデータ
     """
     cleaned_lines = []  # 整形後の各行を格納するリスト
     
     for line in lines:
         # ルビ(例:|小説《しょうせつ》)を削除
         line = re.sub(r'|.*?《.*?》', '', line)
         
         # 外字(例:※[#「言+青」、第3水準1-2-3])を削除
         line = re.sub(r'※[#.*?]', '', line)
         
         # 傍点(例:[#傍点]強調[#傍点終わり])を削除
         line = re.sub(r'[#.*?]', '', line)
         
         # 整形した行をリストに追加
         cleaned_lines.append(line)
     
     return cleaned_lines
 
 # 整形したテキストをファイルに保存する関数
 def save_cleaned_text(cleaned_lines, output_file):
     """
     整形後のテキストを新しいファイルに保存する。
     :param cleaned_lines: 整形後のテキストデータ(リスト形式)
     :param output_file: 保存するファイルのパス
     """
     with open(output_file, 'w', encoding='utf-8') as file:
         file.writelines(cleaned_lines)  # 各行をファイルに書き込む
 
 # プログラム全体を動かすメイン関数
 def main(input_file, output_file):
     """
     青空文庫形式のテキストファイルを整形するメインの処理。
     :param input_file: 整形前のファイルのパス
     :param output_file: 整形後のファイルのパス
     """
     lines = read_aozora_file(input_file)  # ファイルを読み込む
     lines = remove_metadata(lines)       # ヘッダーとフッターを削除
     lines = clean_annotations(lines)     # ルビや注釈を削除
     save_cleaned_text(lines, output_file)  # 整形後のテキストを保存
 
 # プログラムのエントリーポイント
 if __name__ == "__main__":
     # コマンドライン引数を処理するための準備
     parser = argparse.ArgumentParser(description="青空文庫形式のテキストを整形するプログラム")
     parser.add_argument("input_file", help="入力ファイルのパス(青空文庫形式のテキストファイル)")
     parser.add_argument("output_file", help="出力ファイルのパス(整形後のテキストファイル)")
     
     # 引数を解析
     args = parser.parse_args()
     
     # メイン関数を実行
     main(args.input_file, args.output_file)

-実行してみる
 python3 clean_aozora.py kokoro.txt kokoro_c.txt
 
-問題点を修正させる
--最初の注記説明を取る
--ふりがなを削除する


-UniDic+MeCabで形態素解析してみる
 mecab -d ~/unidic-cwj/ -Ochamame kokoro_c.txt |code -


-他の青空文庫のファイルも整形してみる

--芥川龍之介「トロッコ」https://www.aozora.gr.jp/cards/000879/card43016.html
--テキストデータ https://www.aozora.gr.jp/cards/000879/files/43016_ruby_16663.zip

 wget https://www.aozora.gr.jp/cards/000879/files/43016_ruby_16663.zip
 unzip 43016_ruby_16663.zip
 nkf -w --overwrite torokko.txt
 python3 clean_aozora.py torokko.txt torokko_c.txt


**青空文庫XHTMLファイルをライブラリを使って整形する [#i5eee962]
-lxml :XMLパーザ(parser)(XMLの構造を解釈してプログラムから利用しやすいようにする)
// pip install lxml
 sudo apt install python3-lxml

-Beautiful Soup :HTMLやXMLファイルからデータを抽出・解析する
// pip install beautifulsoup4
 sudo apt install python3-bs4

//--mecabをpythonから使うモジュール
// pip install mecab


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS