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, "。");      // ピリオド+スペース
            srcStr = srcStr.replace(/[!?!\?|\](;,/\\/。::;;…→↑←↓〓)/g, "。");  // 文末記号
            srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー、]) +([0-zぁ-ヶ一-龠ー、])/g, "");   // 分割の復元
            //alert("100 : " + srcStr);

            srcStr = srcStr.replace(/([\W])([^0-zぁ-ヶ一-龠ー、]) /g, "。"); // 文末判定
            srcStr = srcStr.replace(/[・・]{2,}/g, "。");  // 省略記号文末
            srcStr = srcStr.replace(/\.+/g, "。");           // 省略記号文末
            srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー])[・\.]+/g, "。");        // 日本語文末
            srcStr = srcStr.replace(/([0-zぁ-ヶ一-龠ー])[wWwW]+ /g, "。");  // 笑い文末
            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, "");   // 分割の復元
            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+ ")ま$",          "ます",
            "しまい$",                 "しまいます",
            "(くだ|下)さ$",             "ください",
            "(" +lcBoE+ ")な$",          "ない",
            "(" +lcHr+ ")てい$",      "ている",
            "(" +lcGkn+ ")(?:て|に|を|は|が|の|も|では|とは)$",        "だ",
            "て$",                       "た",
            "(?:て|に|を|は|が|の|も|では|とは)$",     "",
            "(" +lcGkn+ ")$",           "だ",
            "、$",                       "",
            // 先頭の復旧処理
            "^と(" +lcGkn+ "|、)$",       "",
            // 明らかな誤字の復旧処理
            "しますた",                 "しました",
            "なのれ(" +lcSiS+ ")",     "なので",
            "すいません",                "すみません",
            // 微妙な言い回しの修正
            "てま(" +lcSiS+ ")",      "ていま",
            "ってて",                  "っていて",

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

            " が ",                          "が ",
            "(" +lcEnNo+ ") (" +lcHr+ ")",  "",

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

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

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

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

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

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

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

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

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

            "^" +lcHr+ " ",             "", // 感嘆詞
            " " +lcJp+ "$",             "", // ごみ
            //=====
            // 主語の変換
            "(?:僕|ぼく|ボク|俺|おれ|オレ|わし|わたし|ワタシ|わたくし|ワタクシ|あたい|あたし)(" +lcJs+ ")",     lcShg + "",
            "(?:うち)(は|が)",          lcShg + "",
            "私って",                  lcShg + "は",
            "(?:皆|みなさま|みなさん|てめえ|あなた)(" +lcHr+ ")",  lc2sh + "",
            //=====
            "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-2024 Cronus Crown (c)1997-2024 Masakazu Yanai
ご意見・お問い合わせはサイト情報 弊社への連絡までお願いします
個人情報の取り扱い、利用者情報の外部送信について