環境
- Microsoft Windows 10.0.22000.318(21H2)
- Python 3.8.12.final.0
- Google Chrome 96.0.4664.110(Official Build) (64 ビット)
手順
1. 使用する作品のページにアクセス
ここでは、著作権フリーの作品「アルメシア 〜神に選ばれし転移者たちの英雄譚〜」を扱う。
著作権フリーの小説の探し方は以下を参照(コードを実行するのが面倒な場合は、ソースコードの出力例の中から選ぶ)
2. ページのソースをテキストファイルに保存
本文が書かれているページで「F12」キーを押してデベロッパーツールを開く。「<div id="novel_honbun">
を右クリック -> Copy -> Copy element」でコピーし、narou.txt
に保存する。
narou.txt
narou.txt
<div id="novel_honbun" class="novel_view" style="line-height: 180%; font-size: 100%;">
<p id="L1"><br></p>
<p id="L2"><br></p>
<p id="L3">夏も終わりを迎え、秋の到来を感じさせる気候となった9月27日の昼下がり………。</p>
<p id="L4"><br></p>
<p id="L5"><br></p>
<p id="L6">大手企業への就職や大学進学等、様々な志を抱く高校生たちが数多く通うとある街の高校にて、</p>
<p id="L7"><br></p>
<p id="L8"><br></p>
<p id="L9"><br></p>
<p id="L10">「……はぁー、だるいわー、なげぇ一日だった………」</p>
<p id="L11"><br></p>
<p id="L12"><br></p>
<p id="L13"><br></p>
<p id="L14">一人の黒髪褐色肌の青年がポツリと気怠そうにそう呟きながら校門の近くの道を歩いている。</p>
<p id="L15"><br></p>
<p id="L16"><br></p>
<p id="L17">「登校すんのも面倒くせぇし、なんか良い事起きねぇもんかなー」</p>
<p id="L18"><br></p>
<p id="L19"><br></p>
<p id="L20">なんとも退屈げな様子を見せる青年は、両手をズボンのポケットに入れつつゆっくりと高校の中へ入っていった。</p>
<p id="L21"><br></p>
<p id="L22"><br></p>
<p id="L23">……………………………………………………</p>
<p id="L24"><br></p>
<p id="L25"><br></p>
<p id="L26"><br></p>
<p id="L27">「うしッ! 帰ったら二時間以内に腹筋一万回だッ!! うおおぉ! 頑張るぞッ!!」</p>
<p id="L28"><br></p>
<p id="L29"><br></p>
<p id="L30"><br></p>
<p id="L31">こちらも同じくある街の高校へ続く道路を一人、太い眉毛をした黒髪の青年が気合いに満ちた顔で大きく独り言を口にしながら歩いている。</p>
<p id="L32"><br></p>
<p id="L33"><br></p>
<p id="L34">「俺はもっともっと強くなるッ!! 毎日鍛えて鍛えてッ、鍛えまくるんだァァーーッ!!!」</p>
<p id="L35"><br></p>
<p id="L36"><br></p>
<p id="L37">何故かうおおぉーー!と住宅街の道の真ん中で大声で叫んだ後、青年は自転車にも匹敵する程の速さで走りだした。</p>
<p id="L38"><br></p>
<p id="L39"><br></p>
<p id="L40">…………………………………………………………………</p>
<p id="L41"><br></p>
<p id="L42"><br></p>
<p id="L43"><br></p>
<p id="L44">「………、もう嫌だ。行くんじゃなかった………」</p>
<p id="L45"><br></p>
<p id="L46"><br></p>
<p id="L47"><br></p>
<p id="L48"><br></p>
<p id="L49">こちらは河川敷に程近い長閑な田舎町……。</p>
<p id="L50">その西部に位置する高校の地区で黒縁の眼鏡をかけた黒髪の青年が、とぼとぼと項垂れながら明かりのない薄暗い路地を進んでいる。</p>
<p id="L51"><br></p>
<p id="L52"><br></p>
<p id="L53"><br></p>
<p id="L54">「誰も彼もおれの努力を認めてくれない……、この世界は………なんてクソなんだ………」</p>
<p id="L55"><br></p>
<p id="L56"><br></p>
<p id="L57"><br></p>
<p id="L58">青年は最後にチッと舌打ちをすると、ブツブツと誰に対してかわからない陰口を言って路地の隅の排水溝の上に座り込んだ。</p>
<p id="L59"><br></p>
<p id="L60"><br></p>
<p id="L61"><br></p>
<p id="L62">…………………………………………………………………</p>
<p id="L63"><br></p>
<p id="L64"><br></p>
<p id="L65"><br></p>
<p id="L66">ある街の高校内……。</p>
<p id="L67"><br></p>
<p id="L68"><br></p>
<p id="L69"><br></p>
<p id="L70">「……授業終わったねー」</p>
<p id="L71"><br></p>
<p id="L72"><br></p>
<p id="L73"><br></p>
<p id="L74">授業終了のチャイムが鳴り響き、多くの生徒たちが行き交う校内の廊下にて、茶色の高校の制服を着た茶髪の少女が他の生徒と話している。</p>
<p id="L75"><br></p>
<p id="L76"><br></p>
<p id="L77">「うん、でもこの放課の時間って短いからすぐまた教室に戻らないといけないんだよね」</p>
<p id="L78"><br></p>
<p id="L79"><br></p>
<p id="L80">少女の友達の生徒は、学校内の廊下を歩きながら放課の時間について少しばかり不満に感じた事を茶髪の少女に明かす。</p>
<p id="L81"><br></p>
<p id="L82"><br></p>
<p id="L83"><br></p>
<p id="L84">「わかるー、あたしもそう感じるよー」</p>
<p id="L85"><br></p>
<p id="L86"><br></p>
<p id="L87"><br></p>
<p id="L88">茶髪の少女がそれに同調して若干眉を顰めつつ返事をした。</p>
<p id="L89"><br></p>
<p id="L90"><br></p>
<p id="L91">…………………………………………………………………</p>
<p id="L92"><br></p>
<p id="L93"><br></p>
<p id="L94">少し退屈げだったり、いつも全力だったり、常に元気だったり、ひどく暗かったりしつつも、何の脅威も危険もない平和な高校生活を送る青年少女たち。</p>
<p id="L95"><br></p>
<p id="L96"><br></p>
<p id="L97"><br></p>
<p id="L98">彼らはまだ知らない。</p>
<p id="L99"><br></p>
<p id="L100"><br></p>
<p id="L101"><br></p>
<p id="L102">自分たちがこれから先、数多くの困難を乗り越え、勇気と力、そして名誉を手にし、仲間と共に世界を救う長い長い冒険に出る事を。</p>
<p id="L103"><br></p>
<p id="L104"><br></p>
<p id="L105">これは……、現実世界より不思議な世界に飛ばされてしまった、青年たちの勇気と成長を描いた物語である。</p>
<p id="L106"><br></p>
<p id="L107"><br></p>
<p id="L108"><br></p>
</div>
3. 前処理&分かち書き
ディレクトリ構成
narou/
├─ text/
│ ├── narou.txt
│ └── (narou_splitted.txt)
└─ narou.py
narou.py
import re
import MeCab
PATH = r"C:\Users\USERNAME\...\narou\text\\" # 後ろから2つ目の「\」はエスケープのため
FILENAME = "narou"
# ファイルの読み込み
file_r = PATH + FILENAME + ".txt"
with open(file_r, encoding='utf-8') as f:
text = f.read()
# 前処理
text = re.sub(r"<rp>.*?</rp>", "", text) # ルビの記号を削除
text = re.sub(r"<rt>.*?</rt>", "", text) # ルビを削除
text = re.sub("…{5,}", "", text) # …の行を削除
text = re.sub("<.*?>", "", text) # HTMLタグを削除
text = re.sub("\n", "", text) # 改行を削除
text = re.sub(r"\u3000", "", text) # 全角スペースを削除
#text = re.sub("「", "", text) # 「を削除
text = re.sub("」", "」。", text) # 」を」。に置換
# text = re.sub("\(", "", text) # (を削除
text = re.sub("\)", ")。", text) # )を)。に置換
text = re.sub(r"。", "<period>", text) # 句点を<period>に
# 「」内の<period>を句点に置換
li = [r"「.*?」", "\(.*?\)"]
for x in li:
pattern = re.compile(x)
match_sents = pattern.findall(text)
for i, m_sent in enumerate(match_sents):
new_sent = m_sent.replace("<period>", "。")
text = text.replace(m_sent, new_sent)
text_splitted = text.split("<period>") # <period>で分割
text_splitted = list(filter(None, text_splitted)) # 空要素を取り除く
# 1文ずつ形態素解析
mecab = MeCab.Tagger("-Owakati")
for i in range(len(text_splitted)):
text_splitted[i] = mecab.parse(text_splitted[i]).split()
print(text_splitted) # 確認
# ファイルに書き込む
file_w = PATH + FILENAME + "_splitted.txt"
s = ""
with open(file_w, mode="w") as f:
for text in text_splitted:
s += " ".join(text) + "\n"
f.write(s)
4. 出力
[['"', 'アルメシア', '"……。'], ['それ', 'は', '、', '私', 'たち', 'が', '住む', '"', '地球', '"', 'という', '世界', ' と', 'は', '異なる', '不思議', 'な', '世界', '。'], ['そこ', 'で', 'は', '、', '人々', 'が', '何', '百', '年', 'もの', '間', '、', '様々', 'な', '種族', 'と', 'お互い', 'に', '協力', 'し', '合い', '時', 'に', 'は', '争い', 'ながら', 'も', '平和', 'に', '生き', 'て', 'き', 'た', '。'], ['だが', '、', '現在', 'この', '世界', 'で', 'は', '各地', 'で', '自然', '災害', 'や', '凶暴', 'な', '魔物', 'の', '出現', 'が', '相次い', 'で', '発生', 'し', 'て', 'いる', '。'], ['…', '…', 'それら', 'の', '原因', 'は', '、', '約', '40', '年', 'ほど', '前', 'に', '"', '勇者', '"', 'と', '呼ば', 'れる', '者', 'たち', 'によって', '封印', 'さ', 'れ', 'た', '邪悪', 'の', '権化', '・', '魔王', 'の', '力', 'の', '増幅', 'により', '引き起こさ', 'れ', 'て', 'いる', 'らしい', '。'], ['さらに', '、', '残り', '一', '年', '以内', 'に', 'は', '、', 'その', '魔王', 'の', '封印', 'が', '解か', 'れ', '復活', 'し', '、', 'アル', 'メシア', '全体', 'に', '恐怖', 'と', '絶望', 'を', '与える', 'と', 'いう', '。'], ['そんな', '未曾有', 'の', '危機', 'に', '晒さ', 'れ', 'て', 'いる', 'この', 'アル', 'メシア', 'だ', 'が', '、', '魔王', 'へ', 'の', '対抗', '策', 'として', '兼ね', 'て', 'より', '行っ', 'て', 'き', 'た', '実験', 'が', 'ある', '。'], ['それ', 'が', '、', '…', '…', 'おお', '!', '神', 'よ', '!', '!', '今', 'こそ', '我ら', 'に', '希望', 'の', '光', 'を', '与え', 'た', 'ま', 'えっ', '!', '!', '。'], ['ドッ', '!', '!', 'ピカーーーン', '!!"', '勇者', '召喚', '魔法', '"', 'で', 'ある', '。'], ['や', '、', 'やっ', 'た', '…', '…', 'やっ', 'た', 'ぞ', '!', 'な', '、', 'なんとか', '…', '…', '、', 'なんとか', '成功', 'し', 'た', 'ぞ', 'っ', '!', '!', '。'], ['バチバチ', 'と', '音', 'を', '立て', 'つつ', '天', 'から', 'さす', '光', 'に', '包ま', 'れ', 'て', 'いる', '遺跡', 'の', 'よう', 'な', '建造', '物', 'の', '方', 'を', '見', 'て', '、', 'ローブ', 'を', '羽織っ', 'た', '人物', 'が', '歓喜', 'に', '満ち', 'た', '表情', 'を', 'し', 'て', 'そう', '言っ', 'た', '。'], ['苦節', '五', '年', '…', '…', 'よう', 'や', 'くっ', '、', 'ようやく', 'この', '偉大', 'な', '魔法', 'を', '成功', 'さ', 'せる', 'こと', 'が', 'でき', 'たっ', '!', '。'], ['大きな', '声', 'で', '笑い', 'ながら', 'その', '場', 'で', '狂っ', 'た', 'か', 'の', 'よう', 'に', '踊り', 'だす', 'が', '、', '暫く', 'する', 'と', 'ローブ', 'の', '人物', 'は', 'ハッ', 'と', 'し', 'た', '顔', 'に', 'なり', '、', 'さきほど', '召喚', 'を', '行っ', 'た', '場所', 'に', '向き直る', '。'], ['…', '…', 'しまっ', 'た', '、', '私', 'と', 'し', 'た', 'こと', 'が', '…', '…', '、', '肝心', 'な', 'こと', 'を', '忘れ', 'て', 'い', 'た', '…', '…', '!', '。'], ['ローブ', 'の', '人物', 'は', '落ち着き', 'を', '取り戻し', 'て', 'そう', '呟い', 'た', '後', '、', 'ゆっくり', 'と', '遺跡', 'の', 'ある', '方', 'へ', '歩き', '始め', 'た', '。'], ['一', '面', 'が', '純白', '色', 'に', '包ま', 'れ', 'た', '不思議', 'な', '空間', 'に', '、', '朧', 'げ', 'ながら', '大きな', '人影', 'が', '映っ', 'て', 'いる', '。'], ['…', '…', '!', '!', '?', 'まさか', '破壊', 'さ', 'れ', 'て', 'い', 'た', 'と', 'は', '。'], ['驚い', 'た', 'な', '…', '…', '。'], ['その', '人影', 'は', '、', '空間', '内', 'に', '赤みがかっ', 'た', '霧', 'の', 'よう', 'な', 'もの', 'が', '充満', 'し', 'て', 'いる', 'の', 'を', '前', 'に', 'する', 'と', '驚愕', 'し', 'た', '様子', 'で', 'こう', '口', 'に', 'する', '。'], ['コレ', 'を', '壊す', 'だ', 'なんて', '…', '…', '。'], ['一体', '誰', 'が', '何', 'の', '目的', 'で', 'こんな', '事', 'を', '…', '…', '…', '…', '。'], ['人影', 'は', '赤い', '霧', 'を', 'しばらく', '見', 'ながら', '、', '実体', 'の', 'ない', '筈', 'の', '霧', 'を', '何故か', '何者', 'か', 'に', '壊さ', 'れ', 'た', '風', 'に', 'そう', '考える', 'と', '少し', '沈黙', 'し', 'た', '。'], ['…', '…', '、', '"', '秩序', 'の', '結晶', '"。'], ['この', '世界', 'そのもの', 'の', '平和', 'を', '保つ', '大事', 'な', '結晶', 'を', '壊し', 'たら', 'どう', 'なる', 'の', 'か', '、', 'わかっ', 'て', 'いる', 'の', 'か', '…', '…', '?', '。'], ['数', '秒', '黙り込み', '思案', 'し', 'た', 'ところ', 'で', '、', '人影', 'は', '再び', 'そう', '考え', '、', 'その', '霧', 'を', '"', '秩序', 'の', '結晶', '"', 'と', '呼び', '、', '怪訝', 'そう', 'な', '感じ', 'で', 'ボソッ', 'と', 'そう', '呟く', 'と', '、', 'スゥー', '…', '…', 'と', 'その', '場', 'から', '姿', 'を', '消し', 'て', 'いっ', 'た', '。'], ['うーん', '…', '…', '、', 'ん', 'ぬ', 'ッ', '!', '?', 'ハッ', '!', '!', '?', 'こ', '…', '…', '、', 'ここ', 'は', '…', '…', '…', '…', 'ッ', '!', '!', '。'], ['どこ', 'だ', 'ァーーーーーッ', '!', '?', '。'], ['遺跡', 'に', '差し', 'て', 'い', 'た', '光', 'が', '消え', '、', '先程', 'まで', 'の', '出来事', 'が', 'まるで', '嘘', 'の', 'よう', 'に', '静まり返る', '。'], ['すると', 'そこ', 'に', 'は', '、', '三', '人', 'の', '黒髪', 'の', '青年', 'が', '気', 'を', '失っ', 'た', 'まま', '横たわっ', 'て', 'おり', '、', 'その', 'うち', 'の', '一', '人', 'が', '早々', 'に', '目', 'を', '覚まし', '勢い', '良く', '立ち上がる', 'と', '、', '遺跡', 'の', '中心', '部', 'で', '訳', 'が', 'わから', 'な', 'さ', 'そう', 'に', '声', 'を', '張り上げ', 'て', 'そう', '叫ん', 'だ', '。'], ['この', '物語', 'は', '…', '…', '、', '現実', '世界', 'より', '不思議', 'な', '世界', 'に', '飛ばさ', 'れ', 'て', 'しまっ', 'た', '、', '青年', 'たち', 'の', '勇気', 'と', '成長', 'を', '描い', 'た', '物語', 'で', 'ある', '。']]
narou_splitted.txt
" アルメシア "……。
それ は 、 私 たち が 住む " 地球 " という 世界 と は 異なる 不思議 な 世界 。
そこ で は 、 人々 が 何 百 年 もの 間 、 様々 な 種族 と お互い に 協力 し 合い 時 に は 争い ながら も 平和 に 生き て き た 。
だが 、 現在 この 世界 で は 各地 で 自然 災害 や 凶暴 な 魔物 の 出現 が 相次い で 発生 し て いる 。
… … それら の 原因 は 、 約 40 年 ほど 前 に " 勇者 " と 呼ば れる 者 たち によって 封印 さ れ た 邪悪 の 権化 ・ 魔王 の 力 の 増幅 により 引き起こさ れ て いる らしい 。
さらに 、 残り 一 年 以内 に は 、 その 魔王 の 封印 が 解か れ 復活 し 、 アル メシア 全体 に 恐怖 と 絶望 を 与える と いう 。
そんな 未曾有 の 危機 に 晒さ れ て いる この アル メシア だ が 、 魔王 へ の 対抗 策 として 兼ね て より 行っ て き た 実験 が ある 。
それ が 、 … … おお ! 神 よ ! ! 今 こそ 我ら に 希望 の 光 を 与え た ま えっ ! ! 。
ドッ ! ! ピカーーーン !!" 勇者 召喚 魔法 " で ある 。
や 、 やっ た … … やっ た ぞ ! な 、 なんとか … … 、 なんとか 成功 し た ぞ っ ! ! 。
バチバチ と 音 を 立て つつ 天 から さす 光 に 包ま れ て いる 遺跡 の よう な 建造 物 の 方 を 見 て 、 ローブ を 羽織っ た 人物 が 歓喜 に 満ち た 表情 を し て そう 言っ た 。
苦節 五 年 … … よう や くっ 、 ようやく この 偉大 な 魔法 を 成功 さ せる こと が でき たっ ! 。
大きな 声 で 笑い ながら その 場 で 狂っ た か の よう に 踊り だす が 、 暫く する と ローブ の 人物 は ハッ と し た 顔 に なり 、 さきほど 召喚 を 行っ た 場所 に 向き直る 。
… … しまっ た 、 私 と し た こと が … … 、 肝心 な こと を 忘れ て い た … … ! 。
ローブ の 人物 は 落ち着き を 取り戻し て そう 呟い た 後 、 ゆっくり と 遺跡 の ある 方 へ 歩き 始め た 。
一 面 が 純白 色 に 包ま れ た 不思議 な 空間 に 、 朧 げ ながら 大きな 人影 が 映っ て いる 。
… … ! ! ? まさか 破壊 さ れ て い た と は 。
驚い た な … … 。
その 人影 は 、 空間 内 に 赤みがかっ た 霧 の よう な もの が 充満 し て いる の を 前 に する と 驚愕 し た 様子 で こう 口 に する 。
コレ を 壊す だ なんて … … 。
一体 誰 が 何 の 目的 で こんな 事 を … … … … 。
人影 は 赤い 霧 を しばらく 見 ながら 、 実体 の ない 筈 の 霧 を 何故か 何者 か に 壊さ れ た 風 に そう 考える と 少し 沈黙 し た 。
… … 、 " 秩序 の 結晶 "。
この 世界 そのもの の 平和 を 保つ 大事 な 結晶 を 壊し たら どう なる の か 、 わかっ て いる の か … … ? 。
数 秒 黙り込み 思案 し た ところ で 、 人影 は 再び そう 考え 、 その 霧 を " 秩序 の 結晶 " と 呼び 、 怪訝 そう な 感じ で ボソッ と そう 呟く と 、 スゥー … … と その 場 から 姿 を 消し て いっ た 。
うーん … … 、 ん ぬ ッ ! ? ハッ ! ! ? こ … … 、 ここ は … … … … ッ ! ! 。
どこ だ ァーーーーーッ ! ? 。
遺跡 に 差し て い た 光 が 消え 、 先程 まで の 出来事 が まるで 嘘 の よう に 静まり返る 。
すると そこ に は 、 三 人 の 黒髪 の 青年 が 気 を 失っ た まま 横たわっ て おり 、 その うち の 一 人 が 早々 に 目 を 覚まし 勢い 良く 立ち上がる と 、 遺跡 の 中心 部 で 訳 が わから な さ そう に 声 を 張り上げ て そう 叫ん だ 。
この 物語 は … … 、 現実 世界 より 不思議 な 世界 に 飛ばさ れ て しまっ た 、 青年 たち の 勇気 と 成長 を 描い た 物語 で ある 。
参考