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("|") + ")";
}
};







