授業資料/Pythonでテキストデータ整形
をテンプレートにして作成
開始行:
[[総研大2024/言語資源学演習1]]
**準備 [#p5cef34f]
-Pythonのインストール
sudo apt install python3
-pip :Pythonのパッケージ管理ツール
sudo apt install pip
**青空文庫テキストを正規表現を使って整形する [#s0b635f0]
-サンプルデータのダウンロード
--夏目漱石「こころ」https://www.aozora.gr.jp/cards/000148...
--テキストデータ https://www.aozora.gr.jp/cards/000148/fi...
wget https://www.aozora.gr.jp/cards/000148/files/773_rub...
unzip 773_ruby_5968.zip
nkf -w kokoro.txt |less
nkf -w --overwrite kokoro.txt
-[[青空文庫形式>https://www.aozora.gr.jp/aozora-manual/in...
-chatGPTに聞いてみる
--https://chatgpt.com/share/6743f4eb-a7f8-800f-80ff-cca25...
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/00...
--テキストデータ https://www.aozora.gr.jp/cards/000879/fi...
wget https://www.aozora.gr.jp/cards/000879/files/43016_r...
unzip 43016_ruby_16663.zip
nkf -w --overwrite torokko.txt
python3 clean_aozora.py torokko.txt torokko_c.txt
終了行:
[[総研大2024/言語資源学演習1]]
**準備 [#p5cef34f]
-Pythonのインストール
sudo apt install python3
-pip :Pythonのパッケージ管理ツール
sudo apt install pip
**青空文庫テキストを正規表現を使って整形する [#s0b635f0]
-サンプルデータのダウンロード
--夏目漱石「こころ」https://www.aozora.gr.jp/cards/000148...
--テキストデータ https://www.aozora.gr.jp/cards/000148/fi...
wget https://www.aozora.gr.jp/cards/000148/files/773_rub...
unzip 773_ruby_5968.zip
nkf -w kokoro.txt |less
nkf -w --overwrite kokoro.txt
-[[青空文庫形式>https://www.aozora.gr.jp/aozora-manual/in...
-chatGPTに聞いてみる
--https://chatgpt.com/share/6743f4eb-a7f8-800f-80ff-cca25...
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/00...
--テキストデータ https://www.aozora.gr.jp/cards/000879/fi...
wget https://www.aozora.gr.jp/cards/000879/files/43016_r...
unzip 43016_ruby_16663.zip
nkf -w --overwrite torokko.txt
python3 clean_aozora.py torokko.txt torokko_c.txt
ページ名: