
【Claude】文字数を自動的に調整する
先日、ChatGPTのo3-mini-highを使って、文字数をなるべく厳密に守らせながら文章生成する方法を書いてみた。ChatGPTは(試したことがないo1 proを除き)どのモデルも、文章力は今ひとつだと思っていた。
ただ、改めてo3-mini-highが出力した文章を読んでみると、かなり「許せるレベル」に近づいている気がする。とはいえ、やはりまだClaudeを使うメリットはある。
そこで今度は、Claudeで文字数調整を自動的にやらせる方法を追求してみた。元の文章は、テキストファイルにしてアップロードしておく。
Artifactで以下の「コード」を使って、アップロードしたファイルの文章を「指定文字数」の条件に合うように、「手順」にしたがってリライトしてください。
### 指定文字数
900〜1000文字
### 手順
1. アップロードしたファイルの文章の文字数を「コード」を使ってカウントする
2. その文字数と「指定文字数」を比較し、その範囲内であれば文章を出力して処理を終了する
3. カウントした文字数が「指定文字数」より少なければ、ファイルの文章をリライトして内容を追加する
4. カウントした文字数が「指定文字数」より多ければ、ファイルの文章をリライトして内容を一部減らす
5. 手順2に戻る
### コード
(以下のコードを参照)
function countCharacters(text) {
let count = 0;
// 半角文字および半角記号の正規表現(ASCIIと半角カタカナ)
const halfWidthRegex = /[\u0020-\u007E\uFF61-\uFF9F]/;
for (const char of text) {
if (char === "\n") {
// 改行はカウントしない
continue;
}
// 半角なら0.5、そうでなければ全角とみなして1を加算
count += halfWidthRegex.test(char) ? 0.5 : 1;
}
return count;
}
// 使用例
const sampleText = "Hello こんにちは\nWorld!";
console.log(countCharacters(sampleText));
プロンプトの「指定文字数」は適当に書き換えて欲しい。
これで、自動的に文字数を調整してくれる。外部プログラムからClaudeのAPIを呼び出せば、もっと楽に文字数調整が可能になるだろう。ただ、これでも十分楽だ。
なお、計算をもっと厳密にやりたいなら、REPLという機能を使う方法もある。プロンプトの最初で「REPLを使って」などと書いておけばいい。