• 締切済み

YAHOOのAPIの形態素解析機をCGIのフォームから扱いたいと思って

YAHOOのAPIの形態素解析機をCGIのフォームから扱いたいと思っています。 IDは取得済みです。 自分のページにフォームを置いて、そこに文章を入力すると、そのCGI窓の下に解析結果を出すようにしたいです。言語はPerlです。 どなたか教えていただけますでしょうか。

  • Perl
  • 回答数3
  • ありがとう数4

みんなの回答

  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.3

test.phpで不備がありましたので追記になります。。 <?php $appid = "<ここにAPIのIDが入ります>"; mb_http_output('UTF-8'); mb_internal_encoding('UTF-8'); header('Content-Type: text/xml;charset=UTF-8'); $url ='http://jlp.yahooapis.jp/MAService/V1/parse?'; $url.='sentence=' .urlencode(mb_convert_encoding($_GET['q'],'UTF-8','auto')) .'&appid=' . $appid; print(file_get_contents($url)); ?>

  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.2

つづき、 ▼test.js function connect(){ xmlHttpObj = null; // Firefox用 if (window.XMLHttpRequest){ xmlHttpObj = new XMLHttpRequest(); }else if (window.ActiveXObject){ // IE6用 try{ xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ // IE5用 try { xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } } } if (xmlHttpObj) xmlHttpObj.onreadystatechange = getXML; // 送信 if (xmlHttpObj){ xmlHttpObj.open("GET","test.php?q=" + encodeURI(document.getElementById("query").value), true); xmlHttpObj.send(null); } } function getXML(){ var xmlData = null; // XML解析 if ((xmlHttpObj.readyState == 4) && (xmlHttpObj.status == 200)){ xmlData = xmlHttpObj.responseXML; var items = xmlData.getElementsByTagName("word_list"); var html = "<ol>"; var words = xmlData.getElementsByTagName("word"); var max = words.length; for(var i = 0; i < max; i++){ var surface = words[i].getElementsByTagName("surface")[0].childNodes[0].nodeValue; surface = "<dt>表記</dt><dd>" + surface + "</dd>"; var reading = words[i].getElementsByTagName("reading")[0].childNodes[0].nodeValue; reading = "<dt>読み</dt><dd>" + reading + "</dd>"; var pos = words[i].getElementsByTagName("pos")[0].childNodes[0].nodeValue; pos = "<dt>品詞</dt><dd>" + pos + "</dd>"; html = html + "<li><dl>" + surface + reading + pos + "</dl></li>"; } html = html + "</ol>"; document.getElementById("words").innerHTML = html; } return 1; } 以上になります。 キー入力のたびに更新されるようにonkeyupにしていますが、 コメントアウトにonclickを用意していますので、 負荷やリクエストオーバーが恐いようでしたら、onclickをおすすめします。

  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.1

>自分のページにフォームを置いて、そこに文章を入力すると、そのCGI窓の下に解析結果を出すようにしたいです。 リアルタイムで反映したい場合、perlだけでは無理でAjaxにする必要がありそうです。 perlはベタ書きでないかぎり、XMLの読み取りにperlモジュールが必要だったり、 いろいろと面倒なことがありそうですので、 今回はjavascriptとphpを組み合わせたAjaxで考えてみました。 (もし、ベタ書きでよくて、perlでformを表示、サブミットボタンを押したら結果が表示されるだけなら、もっと簡単です) データが長いので、2回に分けてアップさせていただきますね。 APIとの相性や今後の流れを考えて、htmlもjsもUTF-8です。 ※Shift-JISで作りたいときは、php内で文字コードを変換するなどの処理が追加で必要になりそうです(未調査)。 ▼test.html(perlで吐き出したhtml?) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無題</title> <style type="text/css"> <!-- ol *{ border:1px solid #f00; } //--> </style> </head> <body> <form> <textarea rows="3" name="query" id="query" onkeyup="connect();return false;"></textarea> <!-- onkeyupではキーを押すたびにAPIをリクエストしてしまうため負荷が高いonclickなら1クリック1リクエスト <input type="text" size="40" name="query" id="query" value="" /> <input type="button" value="解析" onclick="connect();return false;"> --> </form> <div id="words"></div> <script type="text/javascript" src="test.js"></script> </body> </html> ▼test.php <?php $appid = "<ここにAPIのIDが入ります>"; mb_http_output('UTF-8'); mb_internal_encoding('UTF-8'); header('Content-Type: text/xml;charset=UTF-8'); $url ='http://jlp.yahooapis.jp/MAService/V1/parse?'; $url.='sentence=' .urlencode(mb_convert_encoding($_GET['q'],'UTF-8','auto')) .'&'.'appid=$appid'; print(file_get_contents($url)); ?> 2ページ目につづく

dai_gokuh
質問者

補足

返答が遅くなり申し訳ございません。 とても丁寧なご説明ありがとうございました。 私自身がPHPを理解していないのと、サーバがPHPを使えない関係上、PERLのみ使用しています。 >(もし、ベタ書きでよくて、perlでformを表示、サブミットボタンを押したら結果が表示されるだけなら、もっと簡単です) 構いません。 私の場合、PERLのフォームの入力がしっかりヤフーAPIにつながるというところが目下の課題になっています。

関連するQ&A

  • 形態素解析の解析内容を各品詞別にファイルに書き込みたいです。

    形態素解析の解析内容を各品詞別にファイルに書き込みたいです。 以下のサイトのフォームに文章を入力すると品詞ごとに分解されます。 http://dai-gokuh.sakura.ne.jp/jikkenn/morph11.html その品詞をそれぞれの品詞ファイルに書き込みたいと思っています。 例えば、「餃子はおいしい。」と入力すれば、 餃子 は名詞ファイルに、 は は助詞ファイルに、 おいしい は形容詞ファイルに、 ○ はその他ファイルに書き込まれます。 また、「ラーメンはおいしい。」などと書き込むと今度はラーメンが新しいワードとしてファイルに登録されます。このようなプログラムを作りたいと思っています。 どなたかよろしくお願いします。 MECAPIについては以下のサイトもご参考ください。 言語はPerlでお願いします。 http://mimitako.net/api/mecapi.cgi

    • ベストアンサー
    • Perl
  • CGI/Perlでメールフォームを作るには。

    CGI/Perlでメールフォームを作るにはHPのトップページ(ソースコード)にCGI/Perlのプログラムを入力すればメールフォームは使用できるようになるのでしょうか? よろしくお願いします。

    • 締切済み
    • CGI
  • メールフォームCGI作成費用

    お問合せメールフォームのCGIプログラム作成費用はいくらが相場なのでしょうか。企業用で、セキュリティに厳しいサーバーにいれるため、専門業者さんに依頼したいのですが相場がわかりません。入力項目は7~8個、文字入力規制をつけ、必須項目漏れなどにはエラー表示をし、入力されたデータはメールで受けたいと考えています。CGI言語はperlです。フォームのイメージ・デザインはできています。よろしくお願いします。

    • 締切済み
    • CGI
  • CGIでフォームデータを取得できません

    CGI(perl)の標準入力についてお伺いいたします。 PC上でテストし動作を確認したCGIをプロバイダのCGIサーバに移植しましたが、 正常に実行終了するものの、標準入力によるフォームデータの取得ができません。 フォームデータを受け取る変数が空になってしまいます。 PCとプロバイダのCGIサーバとでは、CGIスクリプトの記述方法が異なるのでしょうか。 書籍、ネットをだいぶ調べましたが、解決策が見当たりませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただきたいです。 (1)PC動作環境 a.OS: Windows 7 b.ブラウザ : Interne Eexplorer 11 c.CGIサーバ: Apache 2.4 d.perl : Activeperl 5.20 (2)CGIスクリプト(標準入力の部分) 尚、フォームでは、method="POST"を指定しております。 # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; }

    • 締切済み
    • CGI
  • アクセス解析をつけたいのですが、CGI初心者

    以下のようなアクセス解析を見つけ、自分のHPで使いたいのですが・・・ http://www.futomi.com/library/manual/accp/index.html HPはインフォシークのiswebでCGIを利用してもいいことになっています。 マニュアルにしたがってやってみましたが、なかなか上手くいきません。 1、Perl のパス設定 まずは、「acc.cgi」「acclog.cgi」「admin.cgi」の Perl のパスを設定してください。テキストエディタで、各 CGI ファイルを開いてください。すると 1 行目が、 #!/usr/local/bin/perl となっております。この行を、お使いのプロバイダー、もしくはレンタルサーバ業者の指定通りに修正してください。そして、保存してください。 → http://isweb.www.infoseek.co.jp/Icont?sv=IW&pg=iw_spec.html ここのページにある通り、/usr/local/bin/perl にして保存しました。 (=#!を削除) 2、cgi-binというフォルダのなかにaccフォルダを入れ、サーバーへアップロードしました。imageフォルダは転送せず、通常の場所へアップロードしました。 3、転送モードとパーミッションに注意とありますが、これは良く分かりません。 4、ブラウザーで admin.cgi にアクセスしてください http://*********.hp.infoseek.co.jp/cgi-bin/acc/admin.cgi と直接アドレスを入力してみましたが、エラーが出ます。 ここまでで何か間違っていることはありますか? 初心者には難しいでしょうか? 簡単といわれるのをいくつか当たってみましたが、やることはなんだか同じような気がして、、どうせならこれを使ってみたいです。

    • ベストアンサー
    • CSS
  • ★簡単なメール送信フォーム教えて!(cgi)

    レンタルサーバを借りました。 ホームページも独自ドメインで作成して、 独自のメールアドレスで送受信できました。 そこでホームページ上にメール送信フォーム作成したい。 つまりよくある、 1)メールアドレス 2)氏名(ハンドル可) などを入れて「送信ボタン」を押したら、 私宛にメールが送られてくるやつです。 そしたらある人が下記のURLに雛型があるので、 無料ダウンロードすれば作れるよと教えてくれました。 https://www.synck.com/contents/download/cgi-perl/mailform_jcode.html そこでダウンロードして勉強したら、 cgi & Perl で書かれていて、レンタルサーバ屋に 聞いたら、うちは cgi 使えますよ、ということ。 しかし上記URL の内容が意外と難しくて脱帽状態(^^; そこで上記1)と2)だけのような簡単なフォーム、 教えてもらえないものでしょうか? ちなみに、C言語やVBなどのプログラムは解ります。

    • ベストアンサー
    • CGI
  • フォーム入力チェックはCGI(サーバ)で行う必要がありますか?

    漠然と思ったのですが、HTMLの入力フォーム値のチェックをCGIでは行わずに、Javascriptのみで済ませる方法はないでしょうか? Javascirptだけでチェックできればサーバ側の言語が、Perl、PHP、JSPのどれであっても同じ入力チェックを使えるので楽だなぁと思いました。 ただ、JavascriptをOFFにして直接URLに値を埋め込んだ場合、入力チェックを素通りしてしまいます。 Javascriptの有無をサーバ側で判定は不可能?な為、やはりサーバ側で入力チェックを行うしかないでしょうか? よろしくお願いします。

    • 締切済み
    • CGI
  • フォームメールのCGIスクリプトを探しています。

    ホームページで下記のようなフォームメールを使いたくて 探しているのですがなかなか見つかりません。 もしご存知の方がいらっしゃいましたら場所を教えてください。 ・フォームの入力内容をCSV形式で受け取れる ・画像の添付が出来る(出来たらサイズ制限機能付) ・送信者にも確認メール送信(CSVは管理者のみ) ・1つのCGIで複数のフォームが設置可能 ・出来たら無料で・・・^^; PERLのバージョンは5.8.0 SENDMAILは利用可能です。

  • テキストのみのメールフォーム用CGIにチェックボックスを設置

    現在、Perlを使ったメールフォームCGIを作成中なのですが、 元々Perlの知識はほとんどないところ、 サンプルCGIをダウンロードして必要な部分だけを修正し、 少しずつ希望するメールフォームに近づけているところです。 テキストフォームを新たに追加して、 それに対応できるように CGIプログラムの命令文を多少追加したりする程度は 何とか出来るようになりましたが、 チェックボックスを設置してみたところ、 複数にチェックを入れても、 送られてくるメールには はじめにチェックしたvalue情報しか送られてきません。 CGIのどこを修正すれば良いのか、 Perl言語自体をきちんと勉強していない私にとっては 皆目検討もつかず、暗礁に乗り上げてしまっています。 この程度の情報では、まともに回答するには情報不足だと思いますが、 このような問題解決には概ねCGIの どの辺りのどの命令文を確認すれば良い等、 判断できる範囲でご教授いただけましたら幸いです。

  • フォームはCGIを使用しなくてもいいのですか?

    Webコンテンツ制作の仕事を始めて間もない者です。 画像作成及びDreamweaverにてHTMLコーディングをしています。 ある中小企業より個人的にサイト作成を依頼されました。 打ち合わせ時に、当方HTMLの知識のみでCGIなど特別なプログラミングの技術はありませんが宜しいかということを確認し、登録フォームはHTMLファイルのみの作成で実際CGIを組み込んだりはせず、納品しました。 企業担当者はビルダーやワードでのサイト作成経験はあるものの詳しい知識はない方です。 サイトが完成し支払いを受けましたが、「登録フォーム」が送信できないがどういうことだ、と電話がかかってきて「ホームページを作れるプロなら容易いことではないのか、そんなぐらいは知識のない私でも出来るが、一旦支払ったのだからやってくれ。今更出来ないとはどういうことだ」と言われました。 CGIの知識がないと説明しても納得せず「ではもう結構です!!」と激怒して電話を切られました。 果たして、その担当者が言うようにフォーム内容をメールで返すプログラムは、HTMLだけで、あるいはワードやビルダーで簡単に出来るものなんでしょうか。 PerlなどのCGI言語は絶対必要だと思うのですが、違うのでしょうか。 もう結構だと言われてもこちらの気もおさまりませんし、出来ればきちんと説明したいところですが、私もプログラムの知識が乏しいために何と説明したら良いのか途方に暮れています。 不躾ですが大変困っておりますのでお力添えよろしくお願いします。

    • ベストアンサー
    • CGI