1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# 貼った文章を外部APIに送らず、気になる言い回しを点検する「ことばレンズ」をJavaScriptで作った

1
Posted at

1.png

受け取ったDMが、やたらと決断を急がせてくる。自分の投稿が、読み手にきつく見えないか気になる。

そんなときに、文章の中のどの言い回しが気になるのかを整理するため、「ことばレンズ」を作りました。

ことばレンズを開く

貼り付けた文章をブラウザー内のJavaScriptで処理し、感情に関わる言葉、言葉づかい、詐欺や強引な勧誘でも使われる表現を、根拠の文とともに表示します。

この記事では、使い方と、投稿の分割・辞書とルールによる集計・任意のAI連携で工夫した点を紹介します。機能と表示は2026年10月21日の確認時点です。

調べる目的を、最初に選ぶ

入口は2つです。

モード 見直す対象 結果で先に見せる内容
受け取った文章を調べる DM、メッセージ、投稿など 注意したい言い回しや組み合わせ
自分の投稿を見直す 自分が書いた文章 感情の手がかり、言葉づかい、読み手への見え方

どちらも対象は、貼り付けた文章です。書き手の人格、健康状態、信用を判定するものではありません。書かれた内容が事実かどうかも、この処理だけでは分かりません。

1. すぐに測らず、「こう読みました」を挟む

操作は次の3段階です。

  1. モードを選び、文章を貼って「読み込む」
  2. 「こう読みました」で、投稿の区切りと対象を確認する
  3. 「この内容で測る」で結果を表示する

SNSや会話画面からコピーした文字列には、本文のほかに表示名、日付、引用、プロフィールなどが混ざることがあります。

そこで、測定の前に、ツールがどう分割したかを利用者が確認する画面を置きました。各投稿のチェックを外す、削除する、上の投稿と結合する、といった調整ができます。

区切りが合わなければ、空行、1行1投稿、全体を1件という方式で割り直せます。

これは、文章を扱うツールで特に大切な工程です。他人の引用を本人の発言に混ぜたり、1つのメッセージを別々に分けたりすると、結果の意味も変わるからです。自動判定だけで確定せず、測定対象を確認できる形にしています。

2. 「何点だったか」と一緒に、当たった言葉を出す

2.png

結果画面には、主に次のパネルがあります。

  • この文章のまとめ
  • 赤信号/相手にどう見えるか
  • 感情の地図
  • ことばのクセ
  • 接し方/直し方のメモ

結論の文章を先に置き、細かな数値は折りたたみの中にまとめています。目立った項目には、該当した語や実際の文を添えます。

たとえば、次の架空の文章を入力するとします。

必ず利益が出ます。本日中に申し込んでください。詳しくはDMで案内します。

確認時点の動作では、この表現を含む教材文に対して「金銭と儲け」「急かし」「DM誘導」の3種類が表示されました。それぞれの根拠として、該当する言い回しも読めます。

ただし、これは犯罪の成立や書き手の意図を判定した結果ではありません。同じ表現は、注意喚起、引用、創作にも登場します。表示した根拠を読み、文章の使われ方を確認するための手がかりです。

3. 単語だけでなく、組み合わせと重なりを見る

「DM」「本日中」「利益」という単語は、それぞれ普通の文章にも出てきます。

赤信号の検査では、カテゴリごとに定義した語の組や、重みを付けた言い回しを使います。複数のカテゴリが同時に現れるかも確認します。

実装では、1投稿の中で当たったカテゴリに加え、連続する3投稿の範囲も調べます。1通分の案内を複数の短いメッセージに分けた場合を扱うためです。ただし、弱い手がかりを投稿をまたいで無制限に足す処理にはしていません。

画面に出る「重なりの点数」は、このツールのルールで計算した値です。詐欺である確率や、相手の危険度を表す数値ではありません。 該当しなかった場合も、安全だと証明されたわけではありません。

この方式では、辞書にない言い換えや、遠回しな誘導を取りこぼします。一方で、文脈によっては普通の文章にも反応します。点数と根拠をセットで見せるのは、利用者がその違いを確認できるようにするためです。

4. 文章の長さと、手がかりの少なさを考慮する

「ことばのクセ」では、自分を指す言葉、相手に向けた言葉、まとめて言い切る表現、断定とぼかし、時間に関する表現、疲れや体調の言葉、感謝やつながりの言葉を数えます。

出現回数を比べる指標では、文章の長さが違っても比較しやすいように、100文字あたりの回数へ換算しています。計算の考え方を簡略化すると、次の形です。

function per100(count, totalChars) {
  return totalChars > 0 ? count * 100 / totalChars : 0;
}

ただし、長さをそろえれば信頼できる分析になるわけではありません。短文に1語あるだけでも割合は大きく動きます。

そのため、断定とぼかしの比、時間に関する比率などは、対象語が少なければ判定を控えます。投稿が10件未満の場合も、傾向として読むには少ないという注意を表示します。

この「10件」や指標の区切りは、ツール内の目安です。10件を超えれば心理的な性質を正しく測れる、という意味ではありません。

感情の表示も、文章中の手がかりを分類・集計したものです。書き手が実際にその感情を抱いているか、誰の感情を書いているか、皮肉なのか、といった文脈を十分に判断するものではありません。

5. 入力の整理・集計・表示を分ける

3.png

実装はHTMLとJavaScriptを中心に構成し、グラフにはChart.jsを使っています。役割は、おおむね次のように分けています。

ファイル 役割
parse.js 入力を投稿単位へ分割し、本文や付随情報を整理する
lexicon.js 語彙、検出ルール、指標の設定を持つ
analyze.js 語の出現やカテゴリの重なりを集計する
summary.js 測定結果から説明文を組み立てる
app.js 確認画面、結果表示、保存などを扱う
prompt.js・detail.js AIへ渡す文の作成と、回答の貼り戻しを扱う

入力の整理では、URL、メンション、ハッシュタグなどを本文から分けます。URLの中の記号を、文章の言葉として数えてしまうことを避けるためです。

ハッシュタグは別に保持し、赤信号の検査に含めるかを画面で選べます。用途ごとに検査対象を分けることで、タグを本文の文字数や言葉づかいへ一律に混ぜずに扱えます。

なお、これは完全な匿名化の仕組みではありません。本文中に書かれた名前や個人情報まで自動で消せるとは限らないため、入力前にも不要な情報を取り除きます。

6. ブラウザー内の測定と、任意のAI連携を分ける

通常の測定では、貼り付けた本文を外部の分析APIへ送らず、ブラウザー内で辞書とルールを使って処理します。ページやスクリプトをWebサーバーから取得することと、入力本文を分析のために送ることは別です。

文脈を含めて読み直したい場合には、「Claudeに読ませる用にコピー」を使えます。測定値と本文に、次のような指示を添えた文章を作ります。

  • 書いた人の人格や健康状態を断定しない
  • 解釈を複数挙げる
  • その解釈が外れる条件を書く
  • 読み取れないことを補わない

このボタンはClaudeへの自動送信ではありません。利用者がコピーした内容を確認し、別サービスへ貼り付けて使う方式です。コピーされる内容には本文も含まれるので、渡す範囲を確認できるようにしています。

さらに、12×5×6の360項目からなる感情分類の枠組みを渡し、回答を貼り戻す機能もあります。これはツールで用意した分類体系であり、人の感情を客観的に確定する診断基準ではありません。

ローカル処理で数える語の出現と、AIが文脈から判断する分類は、方法が異なります。数字が一致するものとしては扱っていません。

AI向けの指示文では、入力本文を分析対象として区切り、その中にある命令へ従わないよう明記しています。改行を整理して本文の境界を分かりやすくする処理もあります。ただし、これだけでプロンプトインジェクションを完全に防げるとはいえません。

7. 保存するのは、本文ではなく測定のスナップショット

4.png

測定結果は、利用者がボタンを押したときにJSONファイルとして保存できます。前回のJSONを読み込み、今回との差を表示することもできます。

手元の実装では、保存対象を投稿数、文字数、数値、分類などに絞り、本文や話者の表示名は書き出しません。本文を含むAI向けコピーと、数値中心の保存JSONを分けています。

比較するときも、文章の話題や場面が違えば数値が変わります。差が出たことを、そのまま書き手の心理状態の変化と解釈しないことが大切です。

まずは、短い架空の文章で試す

最初は、自分で作った短い例文を貼り、区切りを確認してから、どの語が結果の根拠になったかを見てみてください。

受け取った案内を点検するなら「受け取った文章を調べる」、自分の表現を見直すなら「自分の投稿を見直す」が入口になります。

ことばレンズを試す

パスワードや認証コード、口座番号などは不要です。結果は相手にラベルを貼るためではなく、気になる表現を見つけて本文へ戻り、確認するために使ってください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?