校正支援アウトプット
概要[編集]
Yahooの校正支援APIを利用して校正箇所を検索します。
検索結果をアウトプットバーに表示します。
使い方[編集]
- 校正したいテキストを開くか、テキスト内の校正したい部分を範囲選択します。
- 当マクロを実行すると、アウトプットバーに校正箇所がパス付きで表示されます。
- 表示をダブルクリックするかF10キーの押下により該当箇所へジャンプできます。
※このジャンプは当マクロの機能ではなくアウトプットバーの機能です。
設定[編集]
outputbar.clear(); // 実行ごとにアウトプットバーをクリアします。
設定というよりもマクロの記述そのものですが、マクロの実行ごとにアウトプットバーをクリアするかどうかを決められます。
実行ごとにアウトプットバーをクリアしたくない場合は、行頭に"//"を記入してコメントアウトして下さい。
var Appid = "dj00aiZpPVpmUHNGV3pQUTlkVyZzPWNvbnN1bWVyc2VjcmV0Jng9ODQ-";
Yahoo! JAPANのアプリケーションIDの設定です。
はじめから設定されているIDは私が個人的に取得したものです。
アプリケーションIDごとに1日あたり50000回の利用制限がありますので、もしも当マクロが大人気を博し、多くの人に利用されて上限を突破することがあれば利用できない時間が発生することになります。
おそらくそんなことにはならないだろうと思いますが。
『Yahoo!デベロッパーネットワーク > ヘルプ > Client ID(アプリケーションID)とは』
https://support.yahoo-net.jp/PccDeveloper/s/article/H000006122
Yahoo! JAPAN IDを持っていれば、簡単にアプリケーションIDを取得することが出来ますので、気になる方は上記URLを参考にご自身のアプリケーションIDを取得し設定して下さい。
注意事項[編集]
当マクロは外部ファイルどころかネットを介してYahooAPIにアクセスします、ネット環境がないと利用できません。
また、ネットに繋がるのがなんかヤダという方もいらっしゃるかと思います、申し訳ありませんがご使用を控えて頂ければと思います、予めご了承下さい。
当マクロは校正箇所を表示しますが、実際の置き換えなどは行いません。
謝辞[編集]
当マクロは急急如律令さんの自動ルビ振りを大いに参考にしています。自動ルビ振りというお手本が無ければ当マクロは作成できませんでした。この場を借りてお礼申し上げます。
変更履歴[編集]
- 1.0.1 (2022-01-11)
- 弐版
- 1.0.0 (2019-05-01)
- 初版
ソースコード[編集]
#title = "校正支援出力v2"
//------------------------------------------------------------------------------
// 設定
outputbar.Visible = "true";
outputbar.clear(); // 実行ごとにアウトプットバーをクリアします
var Appid = "dj00aiZpPVpmUHNGV3pQUTlkVyZzPWNvbnN1bWVyc2VjcmV0Jng9ODQ-";
//------------------------------------------------------------------------------
// 参照
// 『Yahoo!デベロッパーネットワーク テキスト解析 校正支援(V2)』
// https://developer.yahoo.co.jp/webapi/jlp/kousei/v2/kousei.html
// 『自動ルビ振り』(急急如律令さん)
// https://www.haijin-boys.com/wiki/自動ルビ振り
// 『JScriptでHTTPアクセス』
// https://qiita.com/tnakagawa/items/3bce99d49b1aa3fc9a72
// 使用API
// https://developer.yahoo.co.jp/webapi/jlp/kousei/v2/kousei.html
//------------------------------------------------------------------------------
var sDate = new Date();
var API_URL = "https://jlp.yahooapis.jp/KouseiService/V2/kousei";
var activePos; // 位置退避用
var anchorPos; // 位置退避用
var sX; // 位置退避用
var sY; // 位置退避用
var offset = 0;
var Sentence = "";
var fPath = Document.FullName;
var cPos = "";
StPos(); // 位置退避
if (Document.Selection.IsEmpty) {
Sentence = Document.Text;
} else {
Sentence = Document.Selection.Text;
offset = Math.min(activePos, anchorPos);
}
var json = yahooapi(Appid, Sentence, API_URL);
var cnt = KouseiY(json);
LdPos(); // 位置復帰
Status = "■校正支援■ " + cnt + "箇所 (処理時間: " + ((new Date() - sDate) / 1000) + "秒)";
function yahooapi(Appid, Sentence, API_URL) { // Yahoo!APIにアクセスする
try {
var http = new ActiveXObject("Msxml2.XMLHTTP");
http.open("POST", API_URL, false); // 要求初期化
http.setRequestHeader("Content-Type", "application/json");
http.setRequestHeader('User-Agent', 'Yahoo AppID: ' + Appid);
var param_dic = {
"id": "1234-1",
"jsonrpc": "2.0",
"method": "jlp.kouseiservice.kousei",
"params": {
"q": Sentence
}
}
http.send(JSON.stringify(param_dic));
var x = http.responseText; // 応答を受け取る
} catch (e) {
OutputBar.Writeln("※リクエスト失敗");
OutputBar.Writeln("Error(" + (e.number & 0xFFFF) + "):" + e.message);
}
return x;
}
function KouseiY(json) { // 校正内容を整形
var str = "";
json_parse = JSON.parse(json)
var results = JSON.parse(json).result.suggestions;
Redraw = false;
for (var i = 0; i < results.length; i++) {
cPos = PosToXY(Number(results[i].offset) + offset);
var line = fPath + cPos + "【" + results[i].rule + "】:" + results[i].word;
if (results[i].suggestion != "") line += "→" + results[i].suggestion;
if (results[i].note!="") line += "【" + results[i].note + "】";
OutputBar.writeln(line);
}
Redraw = true;
return results.length;
}
function StPos() { // カーソル位置の保存
activePos = Document.Selection.GetActivePos();
anchorPos = Document.Selection.GetAnchorPos();
sX = ScrollX;
sY = ScrollY;
}
function LdPos() { // カーソル位置の復帰
Document.Selection.SetActivePos(activePos);
Document.Selection.SetAnchorPos(anchorPos);
ScrollX = sX;
ScrollY = sY;
}
function PosToXY(pos) { // ポジションを(y,x)形式の文字列にする
Document.Selection.SetActivePos(pos);
var x = Document.Selection.GetActivePointX(mePosLogical);
var y = Document.Selection.GetActivePointY(mePosLogical);
cPos = "(" + y + "," + x + ")";
return cPos;
}