/* SKK辞書から漢字の読みを抽出し逆変換辞書を作成する。 【導入法】 1. まるっとSKKFEP最新版をインストールする (またはskk-dict.txtの名前でL辞書をカレントに置く) 2. 本スクリプトを実行するとカレントディレクトリにファイルが生成される 3. 生成されたskk-yomi.txtを辞書フォルダへ 【使用法】 1. ブラウザやエディタ等から読みを調べたい漢字の文字列をクリップボードにコピー 2. [SHIFT+Q]を押してSKKを編集モードにしてから[CTRL+V]で漢字の文字列を貼り付け 3. 伝承の通りだ!読める……読めるぞ!バルス! このスクリプトはCC0 PUBLIC DOMAINです。 */ X = ActiveXObject F = new X("Scripting.FileSystemObject") S = new X("WScript.Shell") /// 漢字の読みを抽出してSKK辞書を構築 function create_yomi(dict, yomi, limit) { // 文字コードを変換し行単位に分割 var a with (new ActiveXObject("ADODB.Stream")) { Type = 2 Charset = "iso-8859-1" Open() LoadFromFile(dict) var t = ReadText(2) Close() Charset = t == "\xFF\xFE" ? "utf-16" : "_autodetect" Open() LoadFromFile(dict) a = ReadText(-1).split(/\r|\n|\r\n/) Close() } // 漢字を含む単語を抽出 var d = {} if (!limit) limit = 1 // 文字数指定省略時は1文字以上 for (var l in a) { if (a[l].charAt(0) == ";") continue var z = a[l].split(" ")[0] if (z.indexOf("#") + 1 || z.indexOf(">") + 1) continue if (z.match(/[a-z]$/)) continue // 送りありエントリをテキトーに除外 var w = z z = a[l].split("/") // concat?こまけぇこたぁいいんだよ outer: for (var n = 1; n < z.length - 1; n++) { var s = z[n] if (s.indexOf("?") + 1) continue // 出力結果に「自信」を持たせる if (s.indexOf(";") < 0) s = s.replace(/\s/g, "") var x = s.split(";")[0] if (x.length < limit) continue // 文字数が足りなければ除外 var t = 0; for (var i = 0; i < x.length; i++) { var c = x.charCodeAt(i) if (0x3400 <= c && c < 0xFB00) t++ } if (t == 0) continue // 漢字っぽくなければ除外 if (!(x in d)) d[x] = [] if (!(w in d[x])) d[x].push(w) } } // 整形してソート a = [] for (t in d) a.push(t + " /" + d[t].join("/") + "/") a.sort() // OS内部形式(UTF-16リトルエンディアンBOMありCRLF改行)で出力 with (F.CreateTextFile(yomi, true, true)) { Write(a.join("\r\n")) Close() } } B = S.ExpandEnvironmentStrings("%windir%\\IME\\SKK0\\DICTS\\") L = [ B + "skk-dict.txt", B + "SKK-JISYO.L", "skk-dict.txt" ] for (i in L) !F.FileExists(L[i]) || create_yomi(L[i], "skk-yomi.txt")