PowerCMS X ブログ
2024-04-05
Typoless (タイポレス) アイコン別ウィンドウで開きますとは、朝日新聞社が提供する校正支援サービスです。新聞社のノウハウを最先端のAIで実現した新しい校正支援サービスとのことで、PowerCMS Xで校正支援機能を提供している アイコン別ウィンドウで開きますこともあって、その存在には注目していました。
今年から APIプランの提供が始まっていたこともあり、少し触ってみました。ユーザー登録画面 アイコン別ウィンドウで開きますから「API連携プランではじめる」を選択して登録すると、14日間無料(上限は20万文字)で試すことができます。API仕様書は以下にあります。校正 API、カスタム辞書編集 APIが利用できます。
<?php
$endPoint = 'https://typoless.asahi.com/web-api/proofread';
$APIKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // APIキー
$customDictId = 'ABCDEFGH-1234-5678-9IJK-LMNOPQRST'; // カスタム辞書ID
$text = 'Typoless APIのテストてす。満点の星空';
$requestBody = ['text' => $text, // 校正したいテキスト
'includeRevisedText' => true, // 校正済み文章の取得フラグ(初期値false)
'disableTye' => false, // TyE(AIによる校正)の無効化(初期値false)
'disableAsahiDict' => false, // 朝日辞書の無効化(初期値false)
'disableCustomDict' => false, // カスタム辞書の無効化(未指定の場合、isDefault=trueの辞書を使用する。)
];
if ( $customDictId ) {
$requestBody['customDictId'] = $customDictId; // カスタム辞書のID
}
$content = json_encode( $requestBody );
$headers = ["Content-type: application/json", "X-Api-Key: {$APIKey}"];
$curl = curl_init( $endPoint );
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $content );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
$json = curl_exec( $curl );
var_dump( json_decode( $json, true ) );
取得結果は以下の通りです。scoreは範囲は0~1、値が大きいほど自信度が高い、checkTypeが"tye"の場合のみ付与されるとのこと。注意点としては、candidatesは配列になっています(複数の変換候補があるケースのため)。
array(3) {
["results"]=>
array(3) {
[0]=>
array(3) {
["checkType"]=>
string(3) "tye"
["correction"]=>
array(4) {
["position"]=>
array(2) {
["start"]=>
int(16)
["end"]=>
int(17)
}
["originalText"]=>
string(3) "て"
["candidates"]=>
array(1) {
[0]=>
string(3) "で"
}
["score"]=>
float(0.7267)
}
["comment"]=>
string(10) "て => で"
}
[1]=>
array(3) {
["checkType"]=>
string(10) "asahi_dict"
["correction"]=>
array(3) {
["position"]=>
array(2) {
["start"]=>
int(19)
["end"]=>
int(24)
}
["originalText"]=>
string(15) "満点の星空"
["candidates"]=>
array(1) {
[0]=>
string(12) "満天の星"
}
}
["comment"]=>
string(129) "満点の星空 => 満天の星
[誤字・誤用]満点→満天
「満天の星空」は重言。「満天の星」が適切"
}
[2]=>
array(3) {
["checkType"]=>
string(3) "tye"
["correction"]=>
array(4) {
["position"]=>
array(2) {
["start"]=>
int(23)
["end"]=>
int(24)
}
["originalText"]=>
string(3) "空"
["candidates"]=>
array(1) {
[0]=>
string(3) "。"
}
["score"]=>
float(0.9957)
}
["comment"]=>
string(10) "空 => 。"
}
}
["message"]=>
string(7) "success"
["revisedText"]=>
string(45) "Typoless APIのテストです。満天の星"
}
※ revisedTextに最後の「。」が無いのは不具合?
修正箇所の修正位置(開始・終了)が含まれているので、これを利用して修正を自動化することもできます。ただ、修正前のテキストと修正後のテキストの文字数が同じであるとは限らないため、少し面倒です。
以下は PowerCMS Xでの修正の適用コード。
<?php
require_once( 'class.Prototype.php' );
$app = new Prototype();
$text = $app->param( 'text' );
$corrections = $app->param( 'corrections' );
$pos = 0;
foreach ( $corrections as $idx => $correction ) {
$correction = json_decode( $correction, true );
$original = $correction['originalText'];
$apply = $correction['candidates'][0];
$correction['candidates'] = $apply;
if ( $pos !== 0 ) {
$position = $correction['position'];
$position['start'] = $position['start'] + $pos;
$position['end'] = $position['end'] + $pos;
$correction['position'] = $position;
}
$corrections[ $idx ] = $correction;
$calc = mb_strlen( $apply ) - mb_strlen( $original );
$pos += $calc;
}
foreach ( $corrections as $correction ) {
$position = $correction['position'];
$apply = $correction['candidates'];
$length = $position['end'] - $position['start'];
$pre = mb_substr( $text, 0, $position['start'] );
$after = mb_substr( $text, $position['end'] );
$text = $pre . $apply . $after;
}
header( 'Content-type: application/json' );
echo json_encode( ['result' => $text ] );
exit();
そのほかに、カスタム辞書(ルール)を追加したり更新したりすることもできます。PowerCMS Xのユーザー辞書と連動するなどの開発もできるかもしれません。
※ APIプランの価格設定的に、ウェブサービスなどの事業者も想定ユーザーになると思うのですが、その場合は利用状況などのデータが取れるとサービスを企画しやすいかもしれません。一方、WEBアプリケーションプランは月額2,200円〜とお手軽価格で APIプランと同じく14日間無料で試せますので、興味のある方はぜひお試しください アイコン別ウィンドウで開きます。
カテゴリー:技術情報
投稿者:Junnama Noda