74187


お世話になっております。回答ありがとうございます。  
以下のようなマクロは可能でしょうか？

EmEditor Professionalでひらがな文をAPIサービスで通常の漢字文章に戻すマクロです。

候補としては  
●Yahoo!かな漢字変換API  
●mecab-skkserv

変換精度的には遙かにヤフーのほうが良かったのでマクロとしては以下のようなものがいいかと思いました。

1，ひらがな文章を80文字以内の句読点でカンマなどの区切りを入れて分割する。  
2，Yahoo!かな漢字変換APIに80文字以内の文章でリクエスト→  
3，Yahoo!かな漢字変換APIから変換したフィールドバックを受け取って蓄積する→これを順に繰り返す  
4，最後までリクエストが終わったら、文章を整形して別名で保存して終了

80文字以内、1日5万回まで可能と書かれてましたので2秒間隔なら24時間連続でも回数は超えないと思います。

変換サンプルサイト  
<http://anti.rosx.net/etc/tools/rome.php#hash1>

もし技術的にYahoo!かな漢字変換APIが難がある場合はmecab-skkservでも実現できたら幸いです。

元のひらがなリクエスト例文 Yahoo!かな漢字変換API

「それに、たいしてまけるひとは、おおいので、まけのげんいんをぶんせきすることは、いみが、ある。  
ひとつひとつは、つまらないしっぱいでも、あつめるとほうそくせいが、みえてくる。  
にほんけいざいは、「ちょうきていたい」に、はいったといわれ、そのげんいんは、「せいさんせいがひくいからだ」とか「いのべーしょんがたりないからだ」といわれる。」

変換済み  
「それに、対して負ける人は、多いので、負けの原因を分析することは、意味が、ある  
一つ一つは、つまらない失敗でも、集めると法則性が、見えてくる。  
日本経済は、「長期停滞」に、入ったといわれ、その原因は、「生産性が低いからだ」とか「イノベーションが足りないからだ」といわれる。」

<https://developer.yahoo.co.jp/webapi/jlp/jim/v1/conversion.html>  
引用  
利用制限  
かな漢字変換Web
APIは、24時間以内で1つのアプリケーションIDにつき50000件のリクエストが上限となっています。また、1リクエストの最大サイズを10KBに制限しています。詳しくは「利用制限」をご参照ください。

同様の要望はありました。  
<https://blog.mallfun.info/archives/406>

よろしくお願いいたします。

ありがとうございます。変換テスト用サンプル分です。  
<https://drive.google.com/file/d/1JRZ8PIG0x5clMhwNp5JTwhHS3ikSTVHW/view?usp=sharing>


CC BY-SA 4.0
2021-02-21T09:45:02.053
74177
2021-02-22T10:36:39.423
2021-02-22T01:53:31.727
43999
43999
question
emeditor
EmEditorマクロでAPIへの接続による、ひらがな文の変換マクロについて


試しに作ってみましたが API出力の変換候補に対する処理は行っていません。一行単位で xmlを保存するだけです。

# エディタのマクロでやるメリットはあまりないと思います。

  * マクロ利用法  
・アプリケーションID取得してソースリスト先頭の Appid に設定する  
<https://e.developer.yahoo.co.jp/register>  
例: [Yahoo! ID連携 v1] アプリケーションの種類 クライアントサイド（Yahoo! ID連携 v1）, 利用者情報 個人, アプリケーション名
<適当>, サイトURL <無記入>, アプリケーションの説明 <無記入>, ガイドライン <同意する>  
・ 目的のドキュメントを開いてマクロを実行する

  * 仕様、制限  
・Yahoo の仕様により一行の最大文字数は80文字(ひらがな換算時)まで  
・出力はドキュメントのディレクトリにファイル名 Yconv_{行番号}.xml として行単位にレスポンスを保存する (空行は読み飛ばす)  
入出力は UTF-8

[code]

    var Appid   = "";   // *** Yahoo APPID ***
    var XmlName = "Yconv_";     // + 行番号 + ".xml"
    
    // デベロッパーネットワークトップ > テキスト解析 > かな漢字変換
    // https://developer.yahoo.co.jp/webapi/jlp/jim/v1/conversion.html
    function yahooApi( str ){
        if( Appid == "" )   return "";
        var rval = "";
        try {
            var uri = "https://jlp.yahooapis.jp/JIMService/V1/conversion";
            uri += "?appid=" + Appid;
            uri += "&sentence=" + encodeURIComponent( str );    // パーセントエンコード
    
            var xhr = new ActiveXObject("Msxml2.ServerXMLHTTP");
            xhr.open( "GET", uri, true );
            xhr.setRequestHeader( "User-Agent", "Yahoo AppID " + Appid );
    //      xhr.setProxy( 2, "127.0.0.1:8080", "" );
            xhr.send();
            for( var rty = 1000; xhr.readyState != 4 && rty > 0; --rty ){ xhr.waitForResponse(100); }
            if( xhr.readyState == 4 ){
                if( xhr.status == 200 ){ rval = xhr.responseText; }
            } else {
                xhr.abort();
                alert( "Error abort" );
            }
        } catch (e) {
            alert( "Error( " + e.message + " )" );
        }
        return rval;
    }
    
    // fprint "%0{n}d", val;   # int val >= 0
    function fpn( val, n ) {
        var str = "";
        if( n > 1 && val < 10 )          str += "0";
        if( n > 2 && val < 100 )         str += "0";
        if( n > 3 && val < 1000 )        str += "0";
        if( n > 4 && val < 10000 )       str += "0";
        if( n > 5 && val < 100000 )      str += "0";
        if( n > 6 && val < 1000000 )     str += "0";
        if( n > 7 && val < 10000000 )    str += "0";
        if( n > 8 && val < 100000000 )   str += "0";
        return str + val;
    }
    
    ///////////////////////////////////////////////////////////////////////////////
    // MAIN
        var fs = new ActiveXObject( "Scripting.FileSystemObject" );
        var strPath = document.Path + "\\" + XmlName;
        var docReadOnly = document.ReadOnly;
        document.ReadOnly = true;
    
        document.selection.StartOfDocument();
        var yPos = 1;
        while( yPos <= document.GetLines() ){
            var str = document.GetLine( yPos );
            str = str.replace( /^\s+|\s+$/g, "" );
            if( str != "" ){
                var yconv = yahooApi(str);
                Sleep( 300 );
                if( yconv == "" )   break;  // Error
                var fPath = strPath + fpn( yPos, 8 ) + ".xml";
                var fh = fs.OpenTextFile( fPath, 2, true, -1 );
                fh.Write( yconv );
                fh.Close();
            }
    
            document.selection.SetActivePoint( eePosLogical, 1, ++yPos );   // 実行状況が分かるようにカーソルを動かす。++yPos; だけでも良い。
        }
        document.selection.StartOfDocument();
        document.ReadOnly = docReadOnly;
    
[/code]


CC BY-SA 4.0
2021-02-22T00:04:02.107
74187
2021-02-22T00:04:02.107
40304
74177
answer


質問内容の解決法としては、制限の多い APIを利用するよりも、EmEditorの[再変換]コマンドを使った方が現実的だと思います。  
その方が固有名詞の学習や文節区切りの変更など、変換精度と使い勝手を数段上げられるでしょう。


CC BY-SA 4.0
2021-02-22T10:36:39.423
74204
2021-02-22T10:36:39.423
40304
74177
answer