69 lines
2.3 KiB
JavaScript
69 lines
2.3 KiB
JavaScript
|
const fs = require("fs");
|
|||
|
//青空文庫から落としたファイルの場合、一度shift-jisからutf-8に変換すること。
|
|||
|
//例で使用したのはフランツ・カフカ「変身」
|
|||
|
//https://www.aozora.gr.jp/cards/001235/card49866.html
|
|||
|
const src = "henshin.txt";
|
|||
|
//ファイルをテキストデータとして読み込み
|
|||
|
const txt = fs.readFileSync(src).toString();
|
|||
|
|
|||
|
//長いデータの中身を見てみたい場合は、頭の1000文字だけ取り出してコンソールに流すなどする
|
|||
|
// const summary = txt.slice(0,1000);
|
|||
|
// console.log(summary)
|
|||
|
|
|||
|
// 主人公の名前だけを抜き出して空白に置き換える
|
|||
|
const no_gregor = txt.replace(/グレゴール/gm, "《 》");
|
|||
|
|
|||
|
fs.writeFileSync("henshin_nogregor.txt", no_gregor);
|
|||
|
|
|||
|
let only_gregor = "";
|
|||
|
let lines = txt.split(/\n/);
|
|||
|
|
|||
|
//逆に、主人公の名前以外は全て◻︎で置き換えてみよう
|
|||
|
for (l of lines) {
|
|||
|
const array = l.split("グレゴール");
|
|||
|
if (array.length > 1) {
|
|||
|
only_gregor += array.map((s) => "□".repeat(s.length)).join('グレゴール');
|
|||
|
} else {
|
|||
|
only_gregor += "□".repeat(array[0].length)
|
|||
|
}
|
|||
|
only_gregor += "\n"
|
|||
|
}
|
|||
|
fs.writeFileSync("henshin_onlygregor.txt", only_gregor);
|
|||
|
|
|||
|
//会話だけを抜き出してみる
|
|||
|
let only_spoken_words = "";
|
|||
|
for (l of lines) {
|
|||
|
// let matches= l.match(/「(.*)」/g);
|
|||
|
let matches = l.match(/「([^」]+)」/g);
|
|||
|
if (matches != null) {
|
|||
|
only_spoken_words += matches.join("\n") + "\n"
|
|||
|
}
|
|||
|
}
|
|||
|
fs.writeFileSync("henshin_onlyspokenwords.txt", only_spoken_words);
|
|||
|
|
|||
|
//会話の中で!で終わるものだけを抜き出してみる
|
|||
|
let excramation = "";
|
|||
|
for (l of lines) {
|
|||
|
let matches = l.match(/(?!。| |「)([^。 「]*?)!/g);
|
|||
|
if (matches != null) {
|
|||
|
excramation += matches.join("\n") + "\n"
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
fs.writeFileSync("henshin_excramation.txt", excramation);
|
|||
|
|
|||
|
|
|||
|
//テキストを文字の配列として扱い、後半に行くにつれて文字コードを確率的にずらしていく
|
|||
|
let nextunicode = "";
|
|||
|
let probability = 0.0;
|
|||
|
const tarray = Array.from(txt);
|
|||
|
for (const c of tarray) {
|
|||
|
if (c.at(0) == "\n") {
|
|||
|
nextunicode += "\n";
|
|||
|
} else {
|
|||
|
nextunicode += String.fromCodePoint(c.codePointAt(0) + Math.floor(Math.random() * probability * 6));
|
|||
|
}
|
|||
|
probability += 1 / tarray.length;
|
|||
|
}
|
|||
|
|
|||
|
fs.writeFileSync("henshin_nextunicode.txt", nextunicode);
|