MediaLab Love Chapter 2

Assistance of MediaLab Love about Javascript test and more...

はてなダイアリーで良い文章を書くためのユーザスクリプト

良い文章の条件とはどのようなものでしょうか。いろいろ調べていくうちに、文章内の漢字の比率に着目している方がいらっしゃいました。

 漢字が多いと、その文章は、硬い印象を与えます。反対に、ひらがなが多いと幼稚に見えます。

 文章の中で、漢字の割合が5割を超えると硬い印象になり、3割以下だと幼稚に見えます。漢字が4割前後の文章が、読みやすいと言われています。文章を作ったら、漢字とひらがなの割合を、数えてみてください。漢字の割合が5割近くあったら要注意です。ひらがなで書いても問題がないところは、ひらがなにして調整します。文書の最後で調整する方法もあります。例えば、
 「〜お願い致します」 ⇒ 「〜お願いいたします」
というようにします。

http://www.stwds.com/active/lesson/document_creation/index.html

そこで、少しテストをしてみました。

1.漢字の比率が50%の場合
 明日の天気は晴れ。明後日の天気は生憎の曇りになります。この1週間の天気は、概ね良好です。
2.漢字の比率が39%の場合
 明日の天気は晴れ。明後日の天気はあいにくの曇りになります。この1週間の天気は、おおむね良好です。
3.漢字の比率が28%の場合
 明日の天気は晴れ。あさっての天気はあいにくのくもりになります。この1週間の天気は、おおむね良好です。

いかがでしょうか。漢字の比率が増えるほど、読みにくく固めの文章になるのではないでしょうか。比率が低すぎても、文字数が増えて読みにくくなり、幼稚な印象にならないでしょうか。

そこで、漢字の比率を確認するために、ユーザスクリプトとブックマークレットを作成しました。
漢字比率が50%以上を固めの文章、30%以下を柔らかめの文章*1。それ以外を理想的な漢字比率としております。また、カタカナがひらがなより多い場合は専門用語が多すぎるという警告があります。

ユーザスクリプト

http://userscripts.org/scripts/show/122883

Firefox(Greasemonkey), Chrome, Operaで動作確認済みです。記事入力画面の左上に評価が出ます。

ブックマークレット

javascript:(function(){traceFrames(window);function%20traceFrames(w){getSelectedText(w);var%20flen=w.frames.length;for(var%20i=0;i<flen;i++){traceFrames(w[i]);}}function%20getSelectedText(w){var%20t;try{t=w.getSelection().toString();}catch(e){return;}if(t){openWindow(t);}else{var%20tias=getTextInputAreas(w);for(var%20i=0;i<tias.length;i++){var%20tia=tias[i];var%20s=tia.selectionStart;var%20e=tia.selectionEnd;if(s!=e){openWindow(tia.value.substr(s,e-s));}}}}function%20openWindow(q){var%20keyword='';var%20hirc=0;var%20katc=0;var%20suuc=0;var%20kanc=0;keyword%20=%20q;allletter=q.length;for(i=0;i<keyword.length;i++){p=keyword.charAt(i);if(p.match(/^[%E3%81%81-%E3%82%93]$/)){hirc++;}else%20if(p.match(/^[%E3%82%A1-%E3%83%B3%EF%BD%A7-%EF%BE%9D%EF%BE%9E%EF%BE%9F]$/)){katc++;}else%20if(p.match(/^[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]/)){kanc++;}else%20if(p.match(/^[\uff10-\uff19\d]$/)){suuc++;}else{allletter--;}}if(kanc/allletter%20>=%200.5){message='%E6%BC%A2%E5%AD%97%E3%81%AE%E6%AF%94%E7%8E%87%E3%81%8C50%%E4%BB%A5%E4%B8%8A%E3%81%A7%E3%81%99%E3%80%82%E7%A1%AC%E3%82%81%E3%81%AE%E6%96%87%E7%AB%A0%E3%81%A0%E3%81%A8%E6%80%9D%E3%82%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82';}else%20if(kanc/allletter%20<=%200.3){message='%E6%BC%A2%E5%AD%97%E3%81%AE%E6%AF%94%E7%8E%87%E3%81%8C30%%E4%BB%A5%E4%B8%8B%E3%81%A7%E3%81%99%E3%80%82%E6%9F%94%E3%82%89%E3%81%8B%E3%82%81%E3%81%AE%E6%96%87%E7%AB%A0%E3%81%A7%E3%81%99%E3%80%82';}else{message='%E6%BC%A2%E5%AD%97%E3%81%AE%E6%AF%94%E7%8E%87%E3%81%8C%E9%81%A9%E5%88%87%E3%81%AA%E6%96%87%E7%AB%A0%E3%81%A7%E3%81%99%E3%80%82';}if(hirc<katc){message='%E3%81%B2%E3%82%89%E3%81%8C%E3%81%AA%E3%82%88%E3%82%8A%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A%E3%81%8C%E5%A4%9A%E3%81%84%E3%81%A7%E3%81%99%E3%80%82%E5%B0%82%E9%96%80%E7%94%A8%E8%AA%9E%E3%81%8C%E5%A4%9A%E3%81%99%E3%81%8E%E3%82%8B%E3%81%8B%E3%82%82%E3%81%97%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82';}if(keyword){result='%E3%81%B2%E3%82%89%E3%81%8C%E3%81%AA%20%20'+(hirc/allletter*100).toFixed(2)+"%\n"+'%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A%20%20%20'+(katc/allletter*100).toFixed(2)+"%\n"+'%E6%95%B0%E5%AD%97%20%20%20%20%20%20%20'+(suuc/allletter*100).toFixed(2)+"%\n"+'%E6%BC%A2%E5%AD%97%20%20%20%20%20%20%20'+(kanc/allletter*100).toFixed(2)+"%\n\n"+message;}else{result='%E6%96%87%E7%AB%A0%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82';}alert(result);}function%20getTextInputAreas(w){var%20elms=w.document.getElementsByTagName('*');var%20tias=[];for(var%20i=0,e;e=elms[i];i++){var%20tag=e.tagName.toLowerCase();if(tag=='textarea'){tias[tias.length]=e;}else%20if(tag=='input'){var%20ty=e.type.toLowerCase();if%20(!ty||ty=='text')%20{tias[tias.length]=e;}}}return%20tias;}})();

Firefox, Opera, Chromeで動作確認済みです。IEでは文字数制限により動きません。文章を選択した後に、このブックマークレットを実行すれば漢字の比率とそのメッセージが表示されます。

テキスト入力版

http://koumeis.hatenablog.jp/entry/2012/01/08/022401

まず、簡単に試したいという方はこちらを御覧ください。IE,Firefox,Opera,Chrome,Safari(Mac, iOS)で動作確認済みです。Androidでは動きません。

*1:これはビジネス文章の場合です。一般的な小説は30%ぐらいが良いのかもしれません。