Ajaxでサーバーからデータを取得します。

単純なコマンドを使って、サーバーのデータベースからデータを取得。

(パーソナル)クラウドと連携できたらいいなあ...というアプリです。

もうちっと複雑なことをしたい...という向きには、サーバーサイドで形態素・構文解析のエンジンやら

SQL文生成エンジンを置いておけば、データーベース連携がよりハッピーになると思われます(^^)。

因みに、WebサービスのAPIなら、Yahooの日本語形態素解析Webサービスなるものもあります。

追記
以下のコードにあるcall_db.phpに記述されているのはダミーコードです、何をやっても結果は1つしか返ってきませんので悪しからず。

リンク

形態素・係り受け解析

これを使えば、もうちっと気の利いたこともできますでしょう。
Yahooの日本語係り受け解析

サンプルとコード








【index.html】

<!DOCTYPE HTML>
<html>
<head>
<title>compass</title>
<meta name="viewport" content="width=device-width, initial-scale=1,minimum-scale=1, maximum-scale=1">
<meta charset="utf-8">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
<script src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>

<script type="text/javascript" charset="utf-8" src="phonegap-1.1.0.js"></script>
<script type="text/javascript" charset="utf-8" src="SpeechRecognizer.js"></script>


<script type="text/javascript" charset="utf-8">
    function onSuccess(data, status){
        alert(data);
        
    }

    function onError(data, status){
        // handle an error
        alert("err");
    }   
    
    
    
    
    function do_command(){
        var data1 = document.getElementById("userid").value;
        var data2 = document.getElementById("password").value;
        var data3 = document.getElementById("command").value;
        
        data1 = encodeURI(data1);
        data2 = encodeURI(data2);
        data3 = encodeURI(data3);
        
        var formData = "data1=" + data1 + "&data2=" + data2 + "&data3=" + data3;
        
        $.ajax({
            type: "POST",
            url: "http://wisteriahill.sakura.ne.jp/jqmajax/call_db.php",
            cache: false,
            data: formData,
            success: onSuccess,
            error: onError
        });
        return false;
        
    }
    
</script>

</head>
<body>
<table><tr>
    <th>ユーザーID</th>
    <th><input type="text" id="userid" value=""></th>
    <th><img src="img/speech3.jpg"></th>
</tr></table>

<table><tr>
    <th>パスワード</th>
    <th><input type="password" id="password" value=""></th>
    <th><img src="img/speech3.jpg"></th>
</tr></table>

<table><tr>
    <th>コマンド&nbsp;&nbsp;&nbsp;&nbsp;</th>
    <th><textarea rows=2 id="command" value=""></textarea></th>
    <th><img src="img/speech3.jpg"></th>
</tr></table>

<input type="button" id="speech" value="実行" onClick="do_command()"/>
</body>
</html>


TOP



スポンサー リンク


形態素・係り受け解析

Yahooの日本語形態素解析Webサービス


上の例で形態素解析をやってみると、こんな感じ。

この場合は、形態素|読み|品詞、の順に並んでます。





簡単にDB連携をやるならコマンドの構文を、「○○の○○を○○する」、というように単純化しておけば、SQL文の生成もやりやすいかと...。

上の例では、名詞しかないような状態で、何がしたいのか分からない...という場合は、「ああ、知りたいんだなあ」と勝手に解釈してやる。

この結果を見て、「音声読み上げにも対応できるんじゃない?」....と思った方はTextToSpeechにチャレンジ。
(AndroidのTTSは使えないようです、音声データは英・仏・スペイン・伊・独しかないみたい。Webサービスを探してみてね。
あるいは...、KDDIのN2 TTSってどうだろう?要調査 ->
結論からいうと、いけそうっすね。N2 TTS自体は無料で、アンドロイドマーケットからインストールできます。
N2 TTSは音声を出すためのエンジンなんで、音声を出させるためのアプリが必要です。
できたら、またレポートします。

N2 TTSを使ってTextToSpeechをやってみるページ



因みに、ヤフーを使う場合のPHPコードはこんな感じ。

アプリケーションIDはヤフーから事前に取得しておく必要があります。


【日本語形態素解析 PHPソース】
<?php

$q = $_POST['command'];

$application_id = "**********";

if(!$q){
    echo 'no';
    return;
}

$q = urlencode($q);
$url = 'http://jlp.yahooapis.jp/MAService/V1/parse?appid=' . $application_id . '&results=ma&sentence=' . $q;
$c = file_get_contents( $url );
$xml = simplexml_load_string ( $c );
$result = "";

for($i = 0;$i < $xml->ma_result->total_count;$i++){
    $surface = $xml->ma_result->word_list->word[$i]->surface;
    $reading = $xml->ma_result->word_list->word[$i]->reading;
    $hinshi = $xml->ma_result->word_list->word[$i]->pos;
    
    $result .= $surface . "|" . $reading . "|" . $hinshi . "\n";
    
    
}

echo $result;
?>


スポンサー リンク



係り受け解析





【日本語係り受け解析 PHPソース】
<?php

$q = $_POST['query'];

$application_id = "****************";

if(!$q){
    echo 'no';
    return;
}

$q = urlencode($q);
$url = 'http://jlp.yahooapis.jp/DAService/V1/parse?appid=' . $application_id . '&sentence=' . $q;
$c = file_get_contents( $url );

$xml = simplexml_load_string ( $c );

$xml_count = count($xml->Result->ChunkList->Chunk);

for($i = 0;$i < $xml_count;$i++){
    $id[$i] = (int)$xml->Result->ChunkList->Chunk[$i]->Id;
    $dependency[$i] = (int)$xml->Result->ChunkList->Chunk[$i]->Dependency;
    $morphem_count = count($xml->Result->ChunkList->Chunk[$i]->MorphemList->Morphem);
    
    $surfaces = "";
    for($j = 0;$j < $morphem_count;$j++){
        $temp_surface = $xml->Result->ChunkList->Chunk[$i]->MorphemList->Morphem[$j]->Surface;
        $surfaces .= $temp_surface;
    }
    
    $surface[$i] = $surfaces;
}

$kakariuke = "";

if (count($id) != 0) {
    
    for($i = 0;$i < count($id);$i++){
        if ($dependency[$i] != -1) {
            $dependency_id = $dependency[$i];
            $kakari = $surface[$dependency_id];
            
            $kakariuke .= $surface[$i] . "-->" . $kakari . "\n";
            
        }else{
            $kakariuke .= $surface[$i];
        }
        
    }
}

echo $kakariuke;

?>


TOP

付録


音声によるデータベースアクセスの研究



スポンサー リンク