teach-matsuuratomoya-com/content/docs/2023/mediaart-programming2/5/map2_txt_basic.js

69 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

2023-12-04 06:37:01 +00:00
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);