add code example

This commit is contained in:
2023-12-04 15:37:01 +09:00
parent 7c6297bac9
commit a9dc6549b1
10 changed files with 359 additions and 15 deletions

View File

@ -12,3 +12,168 @@ params:
## スライド
{{< embed_pdf >}}
## テキスト操作のサンプルコード
### load_text.js(ファイルの読み込み)
```js
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
console.log(txt);
```
{{< button href="load_text.js">}}load_text.js{{< /button >}}
### text_as_array.js (文字列から文字をインデックスで取り出す)
文字列オブジェクトはJavascriptの中では配列のように`str[idx]`として先頭から`idx`番目の文字を取り出せます。
```js
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//配列として先頭から100文字コンソールに表示
for (let i =0;i<100;i++) {
console.log(txt[i])
}
```
{{< button href="text_as_array.js">}}text_as_array.js{{< /button >}}
### text_as_array2.js (文字列を文字の配列オブジェクトにする)
より明確に1文字ずつを要素とした配列オブジェクトにすることもできます。
こちらのやり方だと、配列を変換する`map``filter``reduce`などの便利な関数が使えます。
```js
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//文字の配列にする
const arr = Array.from(txt);
console.log(arr);
```
{{< button href="text_as_array2.js">}}text_as_array2.js{{< /button >}}
### text_sort.js (文字列を文字コード順でソート)
```js
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//文字の配列にする
const arr = Array.from(txt);
//配列を文字コード順でソート
const sorted = arr.sort();
//ソートした配列を(区切り文字なしで)結合
const sorted_str = sorted.join("");
//ファイルに保存
fs.writeFileSync("henshin_sorted.txt",sorted_str);
```
{{< button href="text_sort.js">}}text_sort.js{{< /button >}}
### text_reversed.js (文字列を前後逆転)
```js
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//文字の配列にする
const arr = Array.from(txt);
//配列を反転
const reversed = arr.reverse();
//反転した配列を(区切り文字なしで)結合
const reversed_str = reversed.join("");
//ファイルに保存
fs.writeFileSync("henshin_reversed.txt",reversed_str);
```
{{< button href="text_reversed.js">}}text_reversed.js{{< /button >}}
### text_unicode_shift.js 文字列のUnicodeコードポイントを一つずつずらす
```js
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//文字の配列にする
const arr = Array.from(txt);
//配列の文字コードを1つ隣へずらす
const shifted = arr.map( c => String.fromCodePoint(c.codePointAt(0)+1));
//ソートした配列を(区切り文字なしで)結合
const shifted_str = shifted.join("");
//ファイルに保存
fs.writeFileSync("henshin_shifted.txt",shifted_str);
```
{{< button href="text_unicode_shift.js">}}text_unicode_shift.js{{< /button >}}
### text_unicode_shift_grad.js 文字列のUnicodeコードポイントをずらす確率を段々上げていく
```js
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//文字の配列にする
const arr = Array.from(txt);
//文字コードをずらす確率
let probability = 0.0;
const shifted = arr.map(c => {
//配列の最初0%-最後:100%になるように確率を変更していく
probability += 1 / arr.length;
//randomは0~1の乱数
if (Math.random() < probability) {
//配列の文字コードを1つ隣へずらす
return String.fromCodePoint(c.codePointAt(0) + 1)
} else {
return c
}
});
//ソートした配列を(区切り文字なしで)結合
const shifted_str = shifted.join("");
//ファイルに保存
fs.writeFileSync("henshin_shifted_grad.txt", shifted_str);
```
{{< button href="text_unicode_shift_grad.js">}}text_unicode_shift_grad.js{{< /button >}}

View File

@ -0,0 +1,9 @@
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
console.log(txt);

View File

@ -0,0 +1,69 @@
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);

View File

@ -0,0 +1,12 @@
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//配列として先頭から100文字コンソールに表示
for (let i =0;i<100;i++) {
console.log(txt[i])
}

View File

@ -0,0 +1,11 @@
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//文字の配列にする
const arr = Array.from(txt);
console.log(arr);

View File

@ -0,0 +1,16 @@
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//文字の配列にする
const arr = Array.from(txt);
//配列を反転
const reversed = arr.reverse();
//反転した配列を(区切り文字なしで)結合
const reversed_str = reversed.join("");
//ファイルに保存
fs.writeFileSync("henshin_reversed.txt",reversed_str);

View File

@ -0,0 +1,16 @@
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//文字の配列にする
const arr = Array.from(txt);
//配列を文字コード順でソート
const sorted = arr.sort();
//ソートした配列を(区切り文字なしで)結合
const sorted_str = sorted.join("");
//ファイルに保存
fs.writeFileSync("henshin_sorted.txt",sorted_str);

View File

@ -0,0 +1,16 @@
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//文字の配列にする
const arr = Array.from(txt);
//配列の文字コードを1つ隣へずらす
const shifted = arr.map( c => String.fromCodePoint(c.codePointAt(0)+1));
//ソートした配列を(区切り文字なしで)結合
const shifted_str = shifted.join("");
//ファイルに保存
fs.writeFileSync("henshin_shifted.txt",shifted_str);

View File

@ -0,0 +1,28 @@
//ファイル読み込みライブラリを使用
const fs = require("fs");
//ファイル名の指定(./はこのjsファイルと同階層にあることを明示
const src = "./henshin.txt";
//ファイルを読み込み
const bytes = fs.readFileSync(src);
//バイト列から文字列に
const txt = bytes.toString();
//文字の配列にする
const arr = Array.from(txt);
//文字コードをずらす確率
let probability = 0.0;
const shifted = arr.map(c => {
//配列の最初0%-最後:100%になるように確率を変更していく
probability += 1 / arr.length;
//randomは0~1の乱数
if (Math.random() < probability) {
//配列の文字コードを1つ隣へずらす
return String.fromCodePoint(c.codePointAt(0) + 1)
} else {
return c
}
});
//ソートした配列を(区切り文字なしで)結合
const shifted_str = shifted.join("");
//ファイルに保存
fs.writeFileSync("henshin_shifted_grad.txt", shifted_str);