webAi.JpSntnc - ソースコード

説明

Web AI」は、クロノス・クラウンの柳井政和が開発しているJavaScirptのライブラリです。「Web AI」を使うと、Web上からデータを取得して構築するWebページを、とても簡単に構築することができます。

「Web AI」は、Webからの検索結果やフィードの取得、短縮URLへのURLの変換、日本語文章からのキーワードや文章抽出、日本語文章のマルコフ連鎖、クエリーの管理などの機能を備えています。

このページでは、この「Web AI」のファイルの1つである「crocro.webAi.JpSntnc.js」のソースコードを掲載します。

「crocro.webAi.JpSntnc.js」

「crocro.webAi.JpSntnc.js」には、日本語の文字列から、使えそうな文章を抽出する機能がまとめられています。このファイルには「crocro.webAi.JpSntnc」オブジェクトが収録されています。

「crocro.webAi.JpSntnc」オブジェクトは、検索結果のような雑多な文章から、ある程度文体を揃えた文章を作成する校正機能を持っています。この校正機能は簡易的なものです。校正機能を利用せずに文章の抽出だけを行うこともできます。

使い方は、「Web AI」の各サンプルを参考にしてください。

ソースコード

以下、「crocro.webAi.JpSntnc.js」のソースコードです。

    // crocro.webAiの初期化
    if (! crocro) var crocro = {};
    if (! crocro.webAi) crocro.webAi = {};

    /**
     *    @variable    crocro.webAi.JpSntnc(arg)
     *    @title    日本語センテンス
     *    @description
     *
     *        Webから取得した雑多な日本語から、有効なセンテンスを抽出するオブジェクト。
     *        newで初期化してから利用する。
     */
    crocro.webAi.JpSntnc = function() {
        // 内部利用変数
        this.srcStr  = "";            // 文章文字列

        /*
         *--------------------------------------------------
         */

        /**
         *    @variable    JpSntnc.reset()
         *    @title    文章のリセット
         *    @description
         *
         *        文章をリセットする。
         *
         *    @return    なし
         */
        this.reset = function() {
            this.srcStr  = "";
        }

        /**
         *    @variable    JpSntnc.addSntnc(src)
         *    @title    文章の追加
         *    @description
         *
         *        文章を追加する。
         *
         *    @param    src        文字列、もしくは文字列配列。
         *    @return    なし。
         */
        this.addSntnc = function(src) {
            // 引数から、元文字列を作成
            var srcStr = "";
            if (src) {
                if (src instanceof Array) {
                    srcStr += src.join("。");
                } else {
                    srcStr += src;
                }
            }

            // 文字列を追加
            this.srcStr += srcStr;
        };

        /**
         *    @variable    JpSntnc.getSntncArr(arg)
         *    @title    抽出文章配列の取得
         *    @description
         *
         *        内部にためた文章から、文章の配列を抽出して戻す。
         *
         *    @param    arg.usePrfrd    校正の使用の有無(true/false)。
         *    @return    文章の配列。
         */
        this.getSntncArr = function(arg) {
            // 引数の展開
            var usePrfrd = true;
            if (arg) {
                if ("usePrfrd" in arg) usePrfrd = arg.usePrfrd;
            }

            // 内部にためた文章から、文章の配列を抽出
            return this.mkSntncArr(this.srcStr, {usePrfrd: usePrfrd});
        };

        /*
         *--------------------------------------------------
         */

        /**
         *    @variable    JpSntnc.mkSntncArr(src, arg)
         *    @title    文章の抽出
         *    @description
         *
         *        引数の文字列、もしくは配列から、文章の配列を抽出して戻す。
         *
         *    @param    src                文字列、もしくは文字列配列。
         *    @param    arg.usePrfrd    校正の使用の有無(true/false)。デフォルトはtrue。
         *    @return    文章の配列。
         */
        this.mkSntncArr = function(src, arg) {
            // 引数の展開
            var usePrfrd = true;
            if (arg) {
                if ("usePrfrd" in arg) usePrfrd = arg.usePrfrd;
            }

            // 引数から、元文字列を作成
            var srcStr = "";
            if (src) {
                if (src instanceof Array) {
                    srcStr += src.join("。");
                } else {
                    srcStr += src;
                }
            }

            // 変数の初期化
            var resArr = [];
            var resHsh = [];

            /*
             *--------------------------------------------------
             */

            // タグの除去
            srcStr = srcStr.replace(/<.+?>/g, "");

            // 前駆処理
            srcStr = srcStr.replace(/<[^>]+>/g, "");
            srcStr = srcStr.replace(/Yahoo!/gi, "Yahoo");        // 特殊
            srcStr = srcStr.replace(/([^.]). /g, "$1。");        // ピリオド+スペース
            srcStr = srcStr.replace(/!?!\?|\/g, "。");    // 文末記号
            srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー、]) +([0-zぁ-ヶ一-龠ー、])/g, "$1$2");    // 分割の復元
            //alert("100 : " + srcStr);

            srcStr = srcStr.replace(/([\W])([^0-zぁ-ヶ一-龠ー、]) /g, "$1。");    // 文末判定
            srcStr = srcStr.replace(/[・・]{2,}/g, "。");    // 省略記号文末
            srcStr = srcStr.replace(/.+/g, "。");            // 省略記号文末
            srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー])[・.]+/g, "$1。");        // 日本語文末
            srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー])[wWwW]+ /g, "$1。");    // 笑い文末
            srcStr = srcStr.replace(/([^0-zぁ-ヶ一-龠ー\w])+ /g, "。");        // 顔文字
            //alert("200 : " + srcStr);

            srcStr = srcStr.replace(/[“”]/g, "");                    // 括弧
            srcStr = srcStr.replace(/[「『」』]/g, "。");            // 括弧
            srcStr = srcStr.replace(/[【[[]]】]/g, "、");        // 括弧
            //alert("300 : " + srcStr);

            srcStr = srcStr.replace(/(\w+:)+\w+/g, "");        // 2chなどのID
            srcStr = srcStr.replace(/[^0-zぁ-ヶ一-龠ー、。\w ]+\w+[^0-zぁ-ヶ一-龠ー、。\w ]/g, "");    // 「#00;」などの文字列
            srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー])。(は|が)/g, "$1$2");    // 分割の復元
            srcStr = srcStr.replace(/(^|。) +| +(。|$)/g, "。");        // トリム
            //alert("400 : " + srcStr);

            srcStr = srcStr.replace(/。、/g ,"。");
            srcStr = srcStr.replace(/。{2,}/g ,"。");
            var newArr = srcStr.split("。");

            /*
             *--------------------------------------------------
             */

            // 格納
            for (var i = 0; i < newArr.length; i ++) {
                // 飛ばし条件
                var tgtStr = newArr[i];
                if (tgtStr.length <= 10) continue;

                // 削り
                tgtStr = tgtStr.replace(/[^0-zぁ-ヶ一-龠ー\w、。]+/g, "");
                tgtStr = tgtStr.replace(/%/g, "%");

                // 飛ばし条件
                if (tgtStr.length <= 10) continue;
                if (! tgtStr.match(/[にをはのでがも]/)) continue;
                if (tgtStr.indexOf("http") >= 0) continue;
                if (tgtStr.match(/[0-9]$/)) continue;
                if (tgtStr.match(/^[にをはのでがも]/)) continue;
                if (tgtStr.match(/書きかけ項目/)) continue;
                if (tgtStr.match(/当(社|店)/)) continue;

                // 括弧の対応
                if (tgtStr.split("(").length != tgtStr.split(")").length) continue;
                if (tgtStr.split("(").length != tgtStr.split(")").length) continue;

                // 校正
                if (usePrfrd) tgtStr = this.prfrdStr(tgtStr);

                // 格納
                resHsh[tgtStr] = 1;
            }

            /*
             *--------------------------------------------------
             */

            // ユニークにして配列化
            for (var key in resHsh){
                resArr.push(key);
            }

            // 長い順にソート
            resArr = this.sortLong(resArr);
            return resArr;

        }

        /*
         *--------------------------------------------------
         */

        /**
         *    @variable    JpSntnc.sortLong(srcArr)
         *    @title    長い順にソート
         *    @description
         *
         *        長い順にソートを行う。
         *        元の配列はソートされない。
         *
         *    @param    srcArr    文字列配列。
         *    @return    ソート後の配列。
         */
        this.sortLong = function(srcArr)  {
            resArr = srcArr.concat().sort(function(a, b) {
                return (b.length > a.length) ? 1 : -1;
            });
            return resArr;
        }

        /**
         *    @variable    JpSntnc.sortLen(srcArr, tgtLen)
         *    @title    指定文字列長でソート
         *    @description
         *
         *        指定文字列に近いものから順番にソートを行う。
         *        元の配列を複製してから使用するので、元の配列はソートされない。
         *
         *    @param    srcArr    文字列配列。
         *    @param    tgtLen    対象文字列長。
         *    @return    ソート後の配列。
         */
        this.sortLen = function(srcArr, tgtLen)  {
            resArr = srcArr.concat().sort(function(a, b) {
                var aDif = a.length - tgtLen; aDif *= aDif;
                var bDif = b.length - tgtLen; bDif *= bDif;
                return (aDif > bDif) ? 1 : -1;
            });
            return resArr;
        }

        /*
         *--------------------------------------------------
         */

        /**
         *    @variable    JpSntnc.prfrdStr(srcStr)
         *    @title    文章の校正
         *    @description
         *
         *        文章を校正して戻す。
         *
         *    @param    srcStr        文字列。
         *    @return    校正した文章
         */
        this.prfrdStr = function(srcStr) {
            if (srcStr == "") return "";

            var resStr = srcStr;
            for (var i = 0; i < this.prfrdArr.length - 1; i += 2) {
                resStr = resStr.replace(this.prfrdArr[i], this.prfrdArr[i + 1]);
            }

            return resStr;
        }

        /*
         *--------------------------------------------------
         */

        /*
         *    【文章校正用変数】
         */

        // 文字列
        var lcKn    = "[一-龠]";
        var lcGkn    = "[一-龠ァ-ヶ・ー々]";    // 語幹(漢字、片仮名)
        var lcHr    = "[ぁ-ん]";
        var lcKnHr    = "[一-龠ぁ-んー]";
        var lcKnKt    = "[一-龠ァ-ヶ・ー]";
        var lcJp    = "[一-龠ぁ-んァ-ヶ・ー々]";
        var lcBoA    = "[あかがさざただなはばまやらわ]";
        var lcBoI    = "[いきぎしじちぢにひびみり]";
        var lcBoU    = "[うくぐすずつづぬふぶむゆる]";
        var lcBoE    = "[えけげせぜてでねへべめれ]";
        var lcBoO    = "[おこごそぞとどのほぼもよろ]";
        var lcSiS    = "[さしすせそ]";
        var lcSiT    = "[たちつてと]";
        var lcEnNo    = "[a-zA-Z0-9a-zA-Z0-9]";
        var lcJs    = "(?:て|に|を|は|か|が|の|も|では)";
        var lcNotJs    = "(?:(?!て|に|を|は|か|が|の|も|では).)";

        var lcShg    = "俺";            // 主語
        var lc2sh    = "お前ら";        // 二人称

        // 変換
        var lcTHsh = {   "た":0,   "ち":1,   "つ":2,   "て":3,   "と":4,
                       0:"た",   1:"ち",   2:"つ",   3:"て",   4:"と"};
        var lcDHsh = {   "だ":0,   "ぢ":1,   "づ":2,   "で":3,   "ど":4,
                       0:"だ",   1:"ぢ",   2:"づ",   3:"で",   4:"ど"};
        var lcKHsh = {   "か":0,   "き":1,   "く":2,   "け":3,   "こ":4,   "い":5,
                       0:"か",   1:"き",   2:"く",   3:"け",   4:"こ",   5:"い"};
        var lcWHsh = {   "わ":0,   "き":1,   "く":2,   "け":3,   "こ":4,   "い":5,
                       0:"わ",   1:"い",   2:"う",   3:"え",   4:"お",   5:"っ"};

        // ~てい"ます" → ~てい"る"
        var lcMasuHsh = {
            "ます":            "る",
            "ましょう":        "るだろう",
            "ました":        "た",
            "ません":        "ない"};
        var lcMasuHsh2 = {
            "ます":            "る",
            "ましょう":        "よう",
            "ました":        "た",
            "ません":        "ない"};
        var lcMasuHsh3 = {
            "ます":        {a:"ある"       ,o:"いる"       ,s:"す"     ,s2:"する"   ,t:"つ"     ,n:"ぬ"     ,m:"む"     ,r:"る"     ,k:"くる"   ,k2:"く"     ,k3:"く"     ,i:"う"     ,b:"ぶ"    },
            "ましょう":    {a:"あるだろう" ,o:"いるだろう" ,s:"そう"   ,s2:"しよう" ,t:"とう"   ,n:"のう"   ,m:"もう"   ,r:"ろう"   ,k:"こよう" ,k2:"こう"   ,k3:"こう"   ,i:"おう"   ,b:"ぼう"  },
            "ました":    {a:"あった"     ,o:"いた"       ,s:"した"   ,s2:"した"   ,t:"った"   ,n:"んだ"   ,m:"んだ"   ,r:"った"   ,k:"きた"   ,k2:"いた"   ,k3:"った"   ,i:"った"   ,b:"んだ"  },
            "ません":    {a:"ない"       ,o:"いない"     ,s:"さない" ,s2:"しない" ,t:"たない" ,n:"なない" ,m:"まない" ,r:"らない" ,k:"こない" ,k2:"かない" ,k3:"かない" ,i:"わない" ,b:"ばない"}};
        function hshMasu(strBarLst, strKey) {
            var arr = strBarLst.split("|");
            if (strKey == "ます")     return arr[0];
            if (strKey == "ましょう") return arr[1];
            if (strKey == "ました")   return arr[2];
            if (strKey == "ません")   return arr[3];
        }
        var lcMasu = mkRegLst(lcMasuHsh);

        var regArr = [
            //=============================================================================
            // 前駆処理
            // 末尾の復旧処理
            "つもり$",                    "つもりである",
            "(" +lcBoI+ ")ま$",            "$1ます",
            "しまい$",                    "しまいます",
            "(くだ|下)さ$",                "ください",
            "(" +lcBoE+ ")な$",            "$1ない",
            "(" +lcHr+ ")てい$",        "$1ている",
            "(" +lcGkn+ ")(?:て|に|を|は|が|の|も|では|とは)$",        "$1だ",
            "て$",                        "た",
            "(?:て|に|を|は|が|の|も|では|とは)$",        "",
            "(" +lcGkn+ ")$",            "$1だ",
            "、$",                        "",
            // 先頭の復旧処理
            "^と(" +lcGkn+ "|、)$",        "",
            // 明らかな誤字の復旧処理
            "しますた",                    "しました",
            "なのれ(" +lcSiS+ ")",        "なので$1",
            "すいません",                "すみません",
            // 微妙な言い回しの修正
            "てま(" +lcSiS+ ")",        "ていま$1",
            "ってて",                    "っていて",

            "(" +lcHr+ ")(ーっ)+",        "$1ー",
            "(" +lcBoA+ ")(?:ー)+",        "$1あ",
            "(" +lcBoI+ ")(?:ー)+",        "$1い",
            "(" +lcBoU+ ")(?:ー)+",        "$1う",
            "(" +lcBoE+ ")(?:ー)+",        "$1え",
            "(" +lcBoO+ ")(?:ー)+",        "$1う",

            " が ",                            "が ",
            "(" +lcEnNo+ ") (" +lcHr+ ")",    "$1$2",

            //=============================================================================
            // 敬語の解除
            // お願い~
            "でお願い(?:いた)*?します",        "にして欲しい",
            "お願いし(て|た)",                function(all, $1) {return "頼ん" +lcDHsh[lcTHsh[$1]]},
            "お願い(?:いた)*?し" +lcMasu,    function(all, $1) {return "お願い" +lcMasuHsh3[$1]["s2"]},
            // 有難うございます
            "(有難う|ありがとう)ございます",    "ありがとう",
            // いたしま~
            "(から)いたし" +lcMasu,            function(all, $1, $2) {return $1 + "行" +lcMasuHsh3[$1]["i"]},
            // 終了いたします→終了する
            "いたし" +lcMasu,                function(all, $1) {return lcMasuHsh3[$1]["s2"]},
            // てい"ます"→てい"る"
            "てい" +lcMasu,                    function(all, $1) {return "てい" +lcMasuHsh[$1]},
            "てい(る|た|ない)か",            "てい$1のか",
            // 出来"ます"→でき"る"
            "(でき|出来)" +lcMasu,            function(all, $1, $2) {return "でき" +lcMasuHsh[$2]},
            // ござい"ます"→あ"る"
            "ござい" +lcMasu,                function(all, $1) {return lcMasuHsh3[$1]["a"]},
            // てみ"ます"→てみ"る"
            "てみ" +lcMasu,                    function(all, $1) {return "てみ" +lcMasuHsh2[$1]},
            // ご覧いただけます→見られる
            "ご覧になりた",                    "見た",
            "ご覧(" +lcHr+ "|下)",            "見て$1",
            // いらして→きて
            "いらし(" +lcSiT+ ")",            "き$1",
            //=====
            // いただく系
            // していただくことができ"ます"→でき"る"
            "していただく",                    "",
            "(" +lcHr+ ")ていただく",        "$1ることが",
            // していただけます→できる
            "(" +lcGkn+ "|して)いただけ" +lcMasu,    function(all, $1, $2) {return $1 + "でき" +lcMasuHsh[$2]},
            "(" +lcGkn+ "|して)いただける",            "$1できる",
            // ていただけます→ます
            "(て|で)いただけ(ます|ましょう|ました|ません|る)",    "$1もらえ$2",
            // もらえ"ます"→もらえ"る"
            "(" +lcBoE+ ")" +lcMasu,        function(all, $1, $2) {return $1 +lcMasuHsh[$2]},
            // (お)楽しみいただける→(お)楽しみます
            "(" +lcBoI+ ")いただけます",        "$1ます",
            "(" +lcBoI+ ")いただけましょう",    "$1ましょう",
            "(" +lcBoI+ ")いただけました",        "$1ました",
            "(" +lcBoI+ ")いただけません",        "$1ません",
            "(" +lcBoI+ ")いただける",            "$1ます",

            "(" +lcGkn+ ")いただけ(" +lcHr+ ")",                "してい$1",
            "(" +lcKn+ ")いただ(く)",                            function(all, $1, $2)     {return $1 + "してもら" +lcWHsh[lcKHsh[$2]]},
            "(" +lcKn+ ")いただ(か|き|け|こ|い)(" +lcHr+ ")",    function(all, $1, $2, $3) {return $1 + "してもら" +lcWHsh[lcKHsh[$2]] +$3},
            "いただ(く)",                                        function(all, $1)     {"もら" +lcWHsh[lcKHsh[$1]]},
            "いただ(か|き|け|こ|い)(" +lcHr+ ")",                function(all, $1, $2) {"もら" +lcWHsh[lcKHsh[$1]] +$2},
            //=====
            // あり(あり"ます"→あ"る")、おり(おり"ます"→お"る")
            "(あ)り" +lcMasu,    function(all, $1, $2) {return lcMasuHsh3[$2]["a"]},
            "(お)り" +lcMasu,    function(all, $1, $2) {return lcMasuHsh3[$2]["o"]},
            //=====
            // い音の平仮名「し」系
            // 語幹2文字以上    更新しました→する
            "(" +lcGkn+ "{2,}|" +lcBoI+ ")し" +lcMasu,    function(all, $1, $2) {return $1 +lcMasuHsh3[$2]["s2"]},
            // お/知ら/せします→知らせる
            "お(.+?)せし" +lcMasu,                        function(all, $1, $2) {return $1 + "せ" +lcMasuHsh2[$2]},
            // お/知ら/せして→知らせて
            "お(.+?)せして",                            "$1せて",
            //=====
            // 一漢字orあ音の平仮名+「し」     表します→表す
            "(" +lcHr+ ")(" +lcKn+ "|" +lcBoA+ ")し" +lcMasu,    function(all, $1, $2, $3) {return $1 + $2 +lcMasuHsh3[$3]["s"]},
            //=====
            // い音の平仮名「し」以外
            // 方言
            "(" +lcKn+lcBoE+ ")ちゃ",    "$1ては",
            "しちゃっ",                    "し",
            "しちゃう",                    "する",
            // 助詞+います    います→いる
            "(" +lcJs+ ")い" +lcMasu,                function(all, $1, $2) {return $1 + "い" +lcMasuHsh2[$2]},
            // ~います    思います→思う
            "(" +lcNotJs+lcKnHr+ ")い" +lcMasu,        function(all, $1, $2) {return $1 + lcMasuHsh3[$2]["i"]},
            // ~きます    行ってきます→行ってくる
            "(" +lcBoE+ "て|って|んで)き" +lcMasu,    function(all, $1, $2) {return $1 + lcMasuHsh3[$2]["k"]},
            // ~きます    聞きます→聞く
            "(" +lcNotJs+lcKnHr+ ")き" +lcMasu,        function(all, $1, $2) {return $1 + lcMasuHsh3[$2]["k2"]},
            // ~きます    いきます→いく
            "(い|行)き" +lcMasu,                    function(all, $1, $2) {return $1 + lcMasuHsh3[$2]["k3"]},
            // ~ちます(動タ上一→「落|墜|堕|朽|満|充」)    落ちます→落ちる
            "((?:落|墜|堕|朽|満|充))ち" +lcMasu,    function(all, $1, $2) {return $1 + "ち" +lcMasuHsh2[$2]},
            // ~ちます(その他→動タ五)    立ちます→立つ
            "(" +lcKnHr+ ")ち" +lcMasu,                function(all, $1, $2) {return $1 + lcMasuHsh3[$2]["t"]},
            // ~にます    死にます→死ぬ
            "((?:死|し))に" +lcMasu,                function(all, $1, $2) {return $1 + lcMasuHsh3[$2]["n"]},
            // ~びます    遊びます→飛ぶ
            "んでみ" +lcMasu,                        function(all, $1, $2) {return $1 + lcMasuHsh3[$2]["b"]},
            // ~みます    「見ます」を加えないように回避    噛みます→噛む
            "んでみ" +lcMasu,                        function(all, $1) {return lcMasuHsh3[$1]["m"]},
            "(" +lcNotJs+lcKnHr+ ")み" +lcMasu,        function(all, $1, $2) {return $1 + lcMasuHsh3[$2]["m"]},
            // 見ます→見る
            "(" +lcJs+ "|で)(み|見)" +lcMasu,        function(all, $1, $2, $3) {return $1 +lcMasuHsh2[$3]},
            // ~ります    取ります→取る
            "(" +lcNotJs+lcKnHr+ ")り" +lcMasu,        function(all, $1, $2) {return $1 + lcMasuHsh3[$2]["r"]},
            //=====
            // 一漢字or平仮名+え音の平仮名+し    見せ/ます→見せ/る
            "(" +lcKnHr+ ")(" +lcBoE+ ")" +lcMasu,    function(all, $1, $2, $3) {return $1 + $2 +lcMasuHsh2[$3]},
            "んでた",                                 "んだ",
            //=====
            // 一漢字+まし
            "(" +lcKn+ ")" +lcMasu,                 function(all, $1, $2) {return $1 +lcMasuHsh2[$2]},
            //=====
            // です系
            // ないんですけど→ないのだが
            "ないんです",            "ないのだ",
            "あるのです",            "ある",
            "のですか",                "のか",
            "のです",                "のである",
            "いです(から|が)",         "い$1",
            "((?:い|し|た|" +lcKnKt+ ")い)です",    "$1",
            "((?:い|し|た|" +lcKnKt+ ")い)でした",    "$1だった",
            "ったです",                "った",
            "ですから",                "だから",
            "ですが",                "だが",
            "しいです",                "しい",
            "でしょう",                "だろう",
            "じゃない(です)*",        "ではない",
            // 「~ですみません」があるので「み」を確認
            "(" +lcJp+ "|" +lcEnNo+ ")ですか",    "$1なのか",
            "(" +lcJp+ "|" +lcEnNo+ ")です((?:(?!ま|み).)| |$)",    "$1である$2",
            "(" +lcJp+ "|" +lcEnNo+ ")でした",    "$1だった",
            "ない(のである|んだ)",    "ないのだ",
            "ないでした",            "なかった",
            "なんだろ",                "なのだろ",
            "んだ(けど|が)",        "のだが",
            "(だ|た|る)けど",        "$1が",
            "であるけど",            "だが",
            "(ん|の)である",        "のだ",
            //=====
            // ください系
            "下さ",                                "くださ",        // 平仮名に開く
            //ご遠慮/ください→遠慮/して欲しい
            "(" +lcKn+ ")くださ" +lcHr+ "+",    "$1して欲しい",
            // み/てください→み/て欲しい
            "(て|で)くださ" +lcHr+ "+",            "$1欲しい",
            // お過ごしください→過ごして欲しい
            "しくださ" +lcHr+ "+",                "して欲しい",
            "(?:い|き|ち|り)くださ" +lcHr+ "+",    "って欲しい",
            "(?:に|び|み)くださ" +lcHr+ "+",    "んで欲しい",
            // お申し込みください→申し込みをして欲しい
            "(" +lcNotJs+ ")くださ" +lcHr+ "+",    "$1をして欲しい",
            //=====
            // 丁寧語の変換
            // お勧めする→勧める
            "(ご|お|御)(" +lcKn+ "+" +lcBoE+ ")" +lcSiS,    "$2",
            // ご確認→確認、お昼→昼、御確認→確認    お住まいでも→変換しない
            "お客(様|さま)",        "人",
            "(他|ほか)の方",        "他の人",
            "お(" +lcHr+ "+)(?:様|さま)",    "お$1",
            "お(" +lcKn+ "+)(?:様|さま)",    "$1",
            "(" +lcGkn+ ")(?:さま|さん|氏|先生|ちゃん)",    "$1",
            "お前",                "皆",

            "(ご|お|御)(" +lcKn+ "+" +lcHr+ "+(ても|でも)(?:(?!ら).)+)",    "&tmp;$1&tmp;$2",
            "(ご|お|御)(" +lcKn+ "+" +lcHr+ ")",    "$2",
            "&tmp",        "",

            //=============================================================================
            // その他
            // こそあど言葉
            "(こ|そ|あ|ど)ちらの",        "$1の",
            "(こ|そ|あ|ど)っち",        "$1ちら",
            // 助詞ほかの変換
            "(" +lcGkn+ ")とか",        "$1など",
            "(" +lcJp+ ")なんて",        "$1など",

            "いけれど(?:も)*",            "いが",
            "どうぞ",                    "ぜひ",
            "そりゃ(あ)*",                "それは",
            "っていう",                    "という",

            "(" +lcJp+ ")じゃ",            "$1では",
            "ほんま(" +lcJs+ ")",        "本当$1",
            "(" +lcJs+ ")ねえ",            "$1ない",

            "てらっしゃっ",                "てい",
            // 文末の調整
            "((?:だ|た|" +lcBoU+ "))(?:し)+($| )",    "$1$2",

            "(" +lcJp+ "{2})(?:よ|ね|な|ょ|ぉ|あ|お|っ)+($| )",        "$1$2",

            "(" +lcGkn+ "|" +lcBoI+ ")なの($| )",    "$1$2",
            "のさ($| )",                "のだ$1",
            "もんだ($| )",                "ものだ$1",
            // 文頭の調整
            "(^| )なんで",                "$1なぜ",
            "(^| )そういや(あ|ぁ)?",    "$1そういえば",

            "^" +lcHr+ " ",                "",    // 感嘆詞
            " " +lcJp+ "$",                "",    // ごみ
            //=====
            // 主語の変換
            "(?:僕|ぼく|ボク|俺|おれ|オレ|わし|わたし|ワタシ|わたくし|ワタクシ|あたい|あたし)(" +lcJs+ ")",        lcShg + "$1",
            "(?:うち)(は|が)",            lcShg + "$1",
            "私って",                    lcShg + "は",
            "(?:皆|みなさま|みなさん|てめえ|あなた)(" +lcHr+ ")",    lc2sh + "$1",
            //=====
            "end"    // 末尾(利用しない)
        ];
        this.prfrdArr = [];
        for (var i = 0; i < regArr.length - 1; i ++) {
            if (i % 2 == 0) {
                this.prfrdArr.push(new RegExp(regArr[i], "g"));
            } else {
                this.prfrdArr.push(regArr[i]);
            }
        }

        // ハッシュのキーを配列で取得
        function getKeys(hsh) {
            var resArr = new Array();
            for(var i in hsh) resArr.push(i);
            return resArr;
        }

        // 正規表現用リストの作成
        function mkRegLst(hsh) {
            return "(" + getKeys(hsh).join("|") + ")";
        }
    };
Cronus Crown(クロノス・クラウン)のトップページに戻る
(c)2002-2017 Cronus Crown (c)1997-2017 Masakazu Yanai
このWebPageに関するご意見・お問い合わせは
サイト情報 弊社への連絡
までお願いします。