最新の日銀金融政策を中国語で自動表示する

最新バージョンだけなら、難なくいけますね。


$text = $titles[0]."<br><br>";

foreach(glob("file/".$y."/{*.txt}",GLOB_BRACE) as $file){
    if(is_file($file)){
        $files[] = htmlspecialchars($file);
    }
}
// var_dump($files);

	$file = fopen($files[0], "r");
	if($file){
		while ($line = fgets($file)){
			$text .= $line;
		}
	}
	fclose($file);

	

	$key = '';

	$host = "https://api.cognitive.microsofttranslator.com";
	$path = "/translate?api-version=3.0";
	$params = "&to=zh";

	if(!function_exists('com_create_guid')){
		function com_create_guid(){
			return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
			mt_rand(0, 0xffff), mt_rand(0, 0xffff),
			mt_rand(0, 0xffff),
			mt_rand(0, 0x0fff) | 0x4000,
			mt_rand(0, 0x3fff) | 0x8000,
			mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
		}
	}

	function Translate ($host, $path, $key, $params, $content) {
	    $headers = "Content-type: application/json\r\n" .
	        "Content-length: " . strlen($content) . "\r\n" .
	        "Ocp-Apim-Subscription-Key: $key\r\n" .
	        "X-ClientTraceId: " . com_create_guid() . "\r\n";
	    $options = array (
	        'http' => array (
	            'header' => $headers,
	            'method' => 'POST',
	            'content' => $content
	        )
	    );
	    $context  = stream_context_create($options);
	    $result = file_get_contents ($host . $path . $params, false, $context);
	    return $result;
	}

	$requestBody = array (
	    array (
	        'Text' => $text,
	    ),
	);
	$content = json_encode($requestBody);
	$result = Translate($host, $path, $key, $params, $content);

	$json = json_decode($result);
	$newtext =  $json[0]->translations[0]->text;

	echo $newtext; 

ガンガンいきたいところだが、アプリ(android・iOS)のタスクがかなり重いので、translatorはひとまずこれをazureに載せるところまでとしたい。

preg_replaceのワイルドカード

.*を使います。

$text = "当面の金融政策運営について [PDF 195KB]";
echo preg_replace("/\[PDF.*\]/","", $text);

[PDF 195KB]が非表示となりました。

前)

後)

ディレクトリ配下のファイル名を取得

$y = "2017";
foreach(glob("file/".$y."/{*.txt}",GLOB_BRACE) as $file){
    if(is_file($file)){
        $files[] = htmlspecialchars($file);
    }
}
var_dump($files);

array(8) { [0]=> string(19) “file/2017/boj.0.txt” [1]=> string(19) “file/2017/boj.1.txt” [2]=> string(19) “file/2017/boj.2.txt” [3]=> string(19) “file/2017/boj.3.txt” [4]=> string(19) “file/2017/boj.4.txt” [5]=> string(19) “file/2017/boj.5.txt” [6]=> string(19) “file/2017/boj.6.txt” [7]=> string(19) “file/2017/boj.7.txt” }

しかしforeachでfunction Translateを回すと、 Cannot redeclareとなる。

 Cannot redeclare Translate() (previously declared in /home/vagrant/translator/test.php:40) in /home/vagrant/translator/test.php on line 40

これは困った。

phpファイルからlinuxコマンドを実行

exec('ls', $out, $ret);
print_r($out);

pdftotextの場合は、これでOK

exec('pdftotext boj.pdf boj2.txt');

ではこうするとどうでしょう?
コードがやや冗長になってしまいましたが、file_put_contentsしたpdfをpdftotextしてpdfだけunlinkします。

$i=0;
foreach($urls as $value){
    $pass = "file/".$y."/".$i.".pdf";
    $data = file_get_contents($value);
    file_put_contents($pass, $data);
    exec("pdftotext ".$pass." file/".$y."/boj.".$i.".txt");
    unlink($pass);
    $i++;
}

テキストファイルだけになってますね。

viewをどうするか?
タイトルを取得して、listで表示したい。

日銀pdf->txtに変換したファイルを中国語に翻訳

まず、xpdfでつくったテキストファイルを1行ずつ読み込みます。

$file = fopen("boj.txt", "r");

if($file){
	while ($line = fgets($file)){
		echo $line;
	}
}

fclose($file);

good job!

while文で$txt .= $line; として、変数に入れていき、
これをazureで中国語に翻訳します。

<?php

$file = fopen("boj.txt", "r");

if($file){
	while ($line = fgets($file)){
		$text .= $line;
	}
}

fclose($file);

$key = 'hogehoge';

$host = "https://api.cognitive.microsofttranslator.com";
$path = "/translate?api-version=3.0";
$params = "&to=zh";

if(!function_exists('com_create_guid')){
	function com_create_guid(){
		return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
		mt_rand(0, 0xffff), mt_rand(0, 0xffff),
		mt_rand(0, 0xffff),
		mt_rand(0, 0x0fff) | 0x4000,
		mt_rand(0, 0x3fff) | 0x8000,
		mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
	}
}

function Translate ($host, $path, $key, $params, $content) {
    $headers = "Content-type: application/json\r\n" .
        "Content-length: " . strlen($content) . "\r\n" .
        "Ocp-Apim-Subscription-Key: $key\r\n" .
        "X-ClientTraceId: " . com_create_guid() . "\r\n";
    $options = array (
        'http' => array (
            'header' => $headers,
            'method' => 'POST',
            'content' => $content
        )
    );
    $context  = stream_context_create($options);
    $result = file_get_contents ($host . $path . $params, false, $context);
    return $result;
}

$requestBody = array (
    array (
        'Text' => $text,
    ),
);
$content = json_encode($requestBody);
$result = Translate($host, $path, $key, $params, $content);

$json = json_decode($result);
$newtext =  $json[0]->translations[0]->text;
?>
<div id="text1">
    <?php echo $newtext; ?>
</div>

あれ、これなんかヤベーことになってないか?大丈夫か?

2018年4月27日日本货币政策银行近期1。 日本银行今日决定在政策委员会货币政策会议上作出以下决定。 [1] (1) 短和长率操作 (屈服曲线控制) (倾向于 8) 金融市场调整政策, 直到下个货币政策会议如下。 短期利率: 0.1% 的负利率适用于日本银行支票账户的政策利率平衡。 长期利率: 购买长期的日本国债, 以确保10年期的日本国债将保持在零的百分比。 采购金额应管理, 以实现利率经营政策, 以近似目前的购买速度 (约80兆日元每年)。 (2) 资产购买政策 (一致) 购买非长期政府债券的资产如下。 对于① etf 和 J-房地产投资基金, 该行购买其持有量以相当于每年约6日元和大约900亿日元的速度增长。 ② CP 等, 以及债券等, 分别为2.2 日元左右, 以维持约3.2 日元的平衡。 2。 日本央行将继续 “以短期业务进行定量和定性的货币宽松政策”, 以实现2% 的 “价格稳定目标”, 并稳定地维持它。 货币基础的扩张政策应继续下去, 直到 CPI (不包括新鲜食品) 的实际价值以稳定的方式增加到2%。 今后, 我们将对必要的政策作出调整, 以便根据经济、价格和财政状况保持 “价格稳定目标” 的势头 (注 2)。 1以上 (注 1): 黑田、Amemiya、尚志 Wakatabe、原田、Funo、樱井、马赛、铃木等会员。 相反: 片冈。 片冈考虑到2020财年的风险因素, 如消费税上调和美国经济衰退, 最好是进一步加强货币宽松政策, 并适当购买长期国债, 以进一步降低10年来的广泛的政府债券利率。 非常。 (2) 片冈委员会须指明 “价格稳定指标” 的时间, 并从加强超调型承诺的角度出发, 在因国内因素而延迟完成时, 采取额外的纾缓措施是适当的。 这是不必要的, 写在文本中。 2 (参考) 时间–4月26日 (星期四) 14:00-15:21 4月27日 (星期五) 9:00 ~ 11:56 出席委员会-主席黑田东彦 (总督) 正义 Amemiya (副省长) 尚志 Wakatabe 昌原田 Yukitoshi, 马赛孝子, 正诚铃木 (副总裁) 片冈, 4月27日, 财政部内阁办公室出席。 (Funo) 除上述外, 4月26日, 财政部和武务部 (让凯布), 押川内阁办公室主任 (14:00 ~ 15:21) (14:00 ~ 15:22), Kihara Shingai 财政部副部长 (9:00 ~ 11:32, 11:39 ~ 11:56) 内阁办公室副部长 (9:00 ~ 11:32, 11:39-11:56), 货币政策的日期和时间 -4月27日 (星期五) 12:03 经济活动和价格展望 (全文包括背景说明)–4月28日 (星期六) 14:00–主要意见–5月10日 (星期四) 8:50 预定分钟

vagrantにxpdfを入れる

yumコマンドで入れます。
[pre]
yum install xpdf
[/pre]

依存性関連をインストールしました:
desktop-file-utils.x86_64 0:0.15-9.el6
lcms-libs.x86_64 0:1.19-1.el6
libXmu.x86_64 0:1.1.1-2.el6
libXp.x86_64 0:1.0.2-2.1.el6
libpaper.x86_64 0:1.1.23-6.1.el6
openjpeg-libs.x86_64 0:1.3-16.el6_8
openmotif.x86_64 0:2.3.3-9.el6
poppler.x86_64 0:0.12.4-12.el6_9
poppler-data.noarch 0:0.4.0-1.el6
poppler-utils.x86_64 0:0.12.4-12.el6_9
urw-fonts.noarch 0:2.4-11.el6
xdg-utils.noarch 0:1.0.2-17.20091016cvs.el6
xorg-x11-fonts-ISO8859-1-100dpi.noarch 0:7.2-11.el6
xorg-x11-fonts-ISO8859-1-75dpi.noarch 0:7.2-11.el6

完了しました!

etcのディレクトリの xpdfrcを編集します。

# Choose a text encoding for copy-and-paste and for pdftotext output.
# The Latin1, ASCII7, and UTF-8 encodings are built into Xpdf. Other
# encodings are available in the language support packages.

textEncoding UTF-8

コマンドラインから、pdftotext origin.pdf create.txt でtxtファイルを作成する。

[vagrant@localhost translator]$ pdftotext boj.pdf boj.txt

うおおおおおおおおおおおおおおおおおお
テキストファイルになってる!!!!!!!!!!!
ヘッダーの「日本銀行」とフッターの「以上」が改行されているが、他は問題なさそう。すげー

xpdfをazureのvmに入れられるのかわからんが、まずはvagrantで構築していきましょう。
pdftotextはcrontabでやるにしても、コマンドラインではなく、phpファイルから実行できるんだろうか?

azure phpで翻訳してonclickで喋らせる

text apiから返ってきたjsonをdocument.getElementById(“text1”).innerHTMLで取得して、speechSynthesisを使います。

<?php

$key = 'hoge';

$host = "https://api.cognitive.microsofttranslator.com";
$path = "/translate?api-version=3.0";
$params = "&to=en";
$text = "当社は中長期的かつ持続的な企業価値の向上を目指しており、そのためには、将来の成長を見据えた
サービスへの先行投資や設備投資、資本業務提携を積極的に行うことが重要だと認識しています。同時
に、利益還元を通じて株主の皆さまに報いることが上場会社としての責務と捉えています。
上記方針のもと、当期の期末配当金につきましては、1 株当たり8.86 円(配当金総額は504 億円)と
いたしました。
当社はこれからも、将来の成長のための投資を継続しながら、株主の皆さまへの適切な利益還元を行
うことにより、企業価値の向上を目指していきます。";

if(!function_exists('com_create_guid')){
	function com_create_guid(){
		return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
		mt_rand(0, 0xffff), mt_rand(0, 0xffff),
		mt_rand(0, 0xffff),
		mt_rand(0, 0x0fff) | 0x4000,
		mt_rand(0, 0x3fff) | 0x8000,
		mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
	}
}

function Translate ($host, $path, $key, $params, $content) {
    $headers = "Content-type: application/json\r\n" .
        "Content-length: " . strlen($content) . "\r\n" .
        "Ocp-Apim-Subscription-Key: $key\r\n" .
        "X-ClientTraceId: " . com_create_guid() . "\r\n";
    $options = array (
        'http' => array (
            'header' => $headers,
            'method' => 'POST',
            'content' => $content
        )
    );
    $context  = stream_context_create($options);
    $result = file_get_contents ($host . $path . $params, false, $context);
    return $result;
}

$requestBody = array (
    array (
        'Text' => $text,
    ),
);
$content = json_encode($requestBody);
$result = Translate($host, $path, $key, $params, $content);

$json = json_decode($result);
$newtext =  $json[0]->translations[0]->text;
?>
<div id="text1">
    <?php echo $newtext; ?>
</div>
<br>
<button id="btn">speach</button>
<script>
    document.querySelector('#btn').onclick = function(){
        var msg = new SpeechSynthesisUtterance();
        msg.volume = 1;
        msg.rate = 1;
        msg.pitch = 2;
        msg.lang = "en-US";
        msg.text = document.getElementById("text1").innerHTML;

        speechSynthesis.speak(msg);
    }
</script>

こいつはすげー

$params = “&to=zh”; にすると、
————-
我们的目标是在中长期内提高公司的价值, 并 我们认识到, 积极参与服务、资本投资和商业联盟的前期投资是重要的。 相同 , 作为上市公司, 我们有责任通过利润回报回报股东。 在上述政策下, 本期年终股息为每股8.86 日元 (总股息为504亿日元) 我们。 我们将继续投资于未来的增长, 并将适当的利润返还给我们的股东。 我们的目标是提高企业价值。
————-
ざっとみたところ、良さそう。
これを日銀のStatements on Monetary Policyでやりたいと思います。

オークションで一眼レフ落札したら、フィルムカメラだった!

エンジニアたるもの、写真の意識が高くないと駄目だ、とあるカメラやってる方にインスパイアーされ、ヤフオクで一眼レフを落札

ワクワク^^

届きました。

いいね~この重厚感

あれ、ちょっと待て、これフィルム?

普通そこ間違えるかね。。

といいつつ、速攻でフィルムと電池を買ってしまった。

息抜きに写真でも撮りに行きますかね。

決算ir情報をphpで翻訳する

yahoo 譲渡制限付株式報酬としての新株式の発行に関するお知らせ(259文字)
当社は中長期的かつ持続的な企業価値の向上を目指しており、そのためには、将来の成長を見据えた
サービスへの先行投資や設備投資、資本業務提携を積極的に行うことが重要だと認識しています。同時
に、利益還元を通じて株主の皆さまに報いることが上場会社としての責務と捉えています。
上記方針のもと、当期の期末配当金につきましては、1 株当たり8.86 円(配当金総額は504 億円)と
いたしました。
当社はこれからも、将来の成長のための投資を継続しながら、株主の皆さまへの適切な利益還元を行
うことにより、企業価値の向上を目指していきます。

$key = 'hoge';

$host = "https://api.cognitive.microsofttranslator.com";
$path = "/translate?api-version=3.0";
$params = "&to=en";
$text = "当社は中長期的かつ持続的な企業価値の向上を目指しており、そのためには、将来の成長を見据えた
サービスへの先行投資や設備投資、資本業務提携を積極的に行うことが重要だと認識しています。同時
に、利益還元を通じて株主の皆さまに報いることが上場会社としての責務と捉えています。
上記方針のもと、当期の期末配当金につきましては、1 株当たり8.86 円(配当金総額は504 億円)と
いたしました。
当社はこれからも、将来の成長のための投資を継続しながら、株主の皆さまへの適切な利益還元を行
うことにより、企業価値の向上を目指していきます。";

if(!function_exists('com_create_guid')){
	function com_create_guid(){
		return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
		mt_rand(0, 0xffff), mt_rand(0, 0xffff),
		mt_rand(0, 0xffff),
		mt_rand(0, 0x0fff) | 0x4000,
		mt_rand(0, 0x3fff) | 0x8000,
		mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
	}
}

function Translate ($host, $path, $key, $params, $content) {
    $headers = "Content-type: application/json\r\n" .
        "Content-length: " . strlen($content) . "\r\n" .
        "Ocp-Apim-Subscription-Key: $key\r\n" .
        "X-ClientTraceId: " . com_create_guid() . "\r\n";
    $options = array (
        'http' => array (
            'header' => $headers,
            'method' => 'POST',
            'content' => $content
        )
    );
    $context  = stream_context_create($options);
    $result = file_get_contents ($host . $path . $params, false, $context);
    return $result;
}

$requestBody = array (
    array (
        'Text' => $text,
    ),
);
$content = json_encode($requestBody);
$result = Translate($host, $path, $key, $params, $content);

$json = json_decode($result);
echo $json[0]->translations[0]->text;

echoの結果->565文字
—–
We aim to improve our corporate value in the medium to long term and We recognize that it is important to actively engage in upfront investment in services, capital investment, and business alliances. Same , it is our duty as a listed company to repay our shareholders through the return of profits. Under the above policy, the year-end dividend for the current period is 8.86 yen per share (total dividend of 50.4 billion yen) We. We will continue to invest in future growth and to return appropriate profits to our shareholders. We aim to improve corporate value.

悪くない!というか、金融系に強い帰国子女に頼むよりも質が高く、早くて安い(笑)
これは自動化したい。

月200万文字まで無料なので、1000文字の翻訳だとすると、上限2000回か。
全銘柄のEdinet IR自動翻訳だとちょっとキツイな。
うーん、どうする?