X
pm studio world wide news pj club
pm studio world wide news pj club
news, tech, music, film, sports, cg, translation, photo uploader
  • 2016-01-25
  • PJ Club
  • How To Create “English Listening Practice” with Video and PHP / ビデオとPHPを使った英語のヒアリングレッスンのサンプルデモ

  • 上記のビデオでは、Katy PerryがFrankie Goes to Hollywoodの「Relax」を歌っていると、Ben Stillerが「・・・・」とKaty Perryに話かけています。さて、Ben Stillerは何て言ったのでしょう?
    フィールド内に聞き取った英文を記述し、送信ボタンをクリックすると、あなたの英語のヒアリングスコアが表示されます。
    「Relax」は、2001年に公開されたBen Stiller主演の映画「Zoolander」で、Zoolanderがマレーシアの首相を暗殺するよう催眠術をかけられるシーンに使用された曲です。このシーンのために映画はリコール騒ぎとなりました。ビデオは、この事件をパロディにし、Katy Perry自身がInstagramにアップしたものです。


    キャンセル
    送信


    英文を見る
    Hey Katy, could you not sing that song? It brings up a lot of personal issues.

    日本文を見る
    ヘイ、Katy。その曲を歌うのやめてくれる?個人的な問題がいっぱいあるからさ。
  • 今回のPJ Clubは文章の中のスペース(空白文字)を判断して、英文を解読する方法です。そして、解読した英文を使ってヒアリングレッスンをしようとするものです。
    英語は基本的に単語と単語の間にスペースが入り文章を構成しています。そう言った点では、日本語より単語を取り出すのが容易です。
    サンプルデモでは、この会話文章を聞き取って記述し英文を送信すると、オリジナルの文章との差を判断し正解率を得点として表示します。元の文章と記述文のマッチした単語数を判断している訳です。
    では、今回のサンプルビデオの文章を見てみましょう。サンプルビデオでは、Ben Stillerが、「Hey Katy, could you not sing that song? It brings up a lot of personal issues.」とKaty Perryに話しかけています。日本語に抄訳すると「ヘイ、Katy。その曲を歌うのやめてくれる?個人的な問題がいっぱいあるからさ。」となります。

    オリジナル文章の単語数を取得

    まず、比較の元となるオリジナル文章の単語数を取得します。PHPのスクリプトは下記のようになります。

    //オリジナルの文章
    $phrase1="Hey Katy, could you not sing that song? It brings up a lot of personal issues.";
    //文字を半角に変換
    $phrase1 = mb_convert_kana($phrase1, 'ras');
    //スペース毎に文字列を分割
    $baseKeyword = preg_split('/[\s]+/', $phrase1, -1, PREG_SPLIT_NO_EMPTY);
    //分割された単語数を算出
    $KeywordNum=count($baseKeyword);

    $phrase1 = mb_convert_kana($phrase1, 'ras')は、文章内で全角が使われている場合、mb_convert_kana("対象文章"."オプション" )関数を使って、すべて半角にしています。英語には全角がないためです。この関数は非常に便利で、英数文字だけなく、半角カタカナにも対応しています。

    オプション処理内容
    r「全角」英字を「半角」に変換
    R「半角」英字を「全角」に変換
    n「全角」数字を「半角」に変換
    N「半角」数字を「全角」に変換
    a「全角」英数字を「半角」に変換
    A「半角」英数字を「全角」に変換
    s 「全角」スペースを「半角」に変換(U+3000 → U+0020)
    S「半角」スペースを「全角」に変換(U+0020 → U+3000)
    k「全角カタカナ」を「半角カタカナ」に変換
    K「半角カタカナ」を「全角カタカナ」に変換
    h 「全角ひらがな」を「半角カタカナ」に変換
    H「半角カタカナ」を「全角ひらがな」に変換
    c 「全角カタカナ」を「全角ひらがな」に変換
    C「全角ひらがな」を「全角カタカナ」に変換
    V濁点付きの文字を一文字に変換。K、Hと共に使用
  • 今回、mb_convert_kana("対象文章"."オプション" )関数のオプションは、文字、スペースを半角にしたいので、"ras"とします。
    次にpreg_split("検索する文字列","対象となる文字列" )関数を使ってスペース毎に文章を分割します。
    preg_split('/[\s]+/', $phrase1, -1, PREG_SPLIT_NO_EMPTY)の”/[\s]+/"は、正規表現でスペースを表しています。-1とあるのは分割する数です。-1で無限です。PREG_SPLIT_NO_EMPTYは、スペース(空文字)以外を分割します。
    分割された文字は$baseKeywordの中に配列で保存されます。単語の数を算出するには、配列の個数を数えるcount("配列名")関数を使用しています。

    記述された文章の単語数を取得

    続いて、同様の方法で記述された文章をスペース毎に分割します。スクリプトは下記のようになります。

    //フォームから送信された文章を取得
    $phrase2 =htmlspecialchars($_POST["text1"],ENT_QUOTES);
    //取得した文章の文字を半角に変換
    $phrase2 = mb_convert_kana($phrase2, 'ras');
    //スペース毎に文字列を分割
    $inputKeyword = preg_split('/[\s]+/', $phrase2, -1, PREG_SPLIT_NO_EMPTY);

    オリジナル文章の単語と記述された文章の単語を比較

    次に分割された単語と元の文章で分割された単語がマッチしているかをチェックします。
    オリジナル文章から分割された単語とフォームに記述された文章から分割した単語は、それぞれ$baseKeyword、$inputKeywordの配列に保存されています。
    配列同士を比較するarray_intersect( )を使用すると、配列内でマッチした単語を抽出し、新たに抽出用の配列に保存してくれます。その抽出された配列の要素数が、マッチした単語数です。
    マッチした単語数を元の文章の単語数で割れば(マッチした単語数/元の文章の単語数)、マッチした確率(パーセント)が算出出来ますので、100を掛けると得点となります。簡単ですね。小数点以下はround( )関数で四捨五入します。スクリプトは下記のようにします。

    //記述された文章とオリジナル文章のマッチした単語を抽出
    $checkWord = array_intersect($inputKeyword, $baseKeyword);
    //マッチした単語数を算出
    $checkWordNum=count($checkWord);
    //マッチした確率(パーセント)を計算
    $checkNum=$checkWordNum/$KeywordNum;
    //小数点以下を四捨五入
    $yourScore=round(($checkNum*100))."点";

    まとめると下記のようになります。

    <?php
         //オリジナルの文章
         $phrase1="Hey Katy, could you not sing that song? It brings up a lot of personal issues.";
         //文字を半角に変換
         $phrase1 = mb_convert_kana($phrase1, 'ras');
         //スペース毎に文字列を分割
         $baseKeyword = preg_split('/[\s]+/', $phrase1, -1, PREG_SPLIT_NO_EMPTY);
         //分割された単語数を算出
         $KeywordNum=count($baseKeyword);

         if($_SERVER["REQUEST_METHOD"] != "POST"){
         } else {
              //フォームから送信された文章を取得
              $phrase2 =htmlspecialchars($_POST["text1"],ENT_QUOTES);
              //フォームから送信された文章の有無を判断
              if(!isset($phrase2) || $phrase2===""){
                  $errorMSG="ERROR";
              }
              //文章が有の場合
              if(!$errorMSG){
                  //取得した文章の文字を半角に変換
                  $phrase2 = mb_convert_kana($phrase2, 'ras');
                  //スペース毎に文字列を分割
                  $inputKeyword = preg_split('/[\s]+/', $phrase2, -1, PREG_SPLIT_NO_EMPTY);

                  //記述された文章とオリジナル文章のマッチした単語を抽出
                  $checkWord = array_intersect($inputKeyword, $baseKeyword, );
                  //マッチした単語数を算出
                  $checkWordNum=count($checkWord);
                  //マッチした確率(パーセント)を計算
                  $checkNum=$checkWordNum/$KeywordNum;
                  //小数点以下を四捨五入
                  $yourScore=round(($checkNum*100))."点";
              }
         }
    ?>
    //HTML部分
    <form method="post" action="PHPのファイル名">
         <textarea cols="72" rows="1" id="text1" name="text1"></textarea>
         <input id="submit" type="submit" name="send" value="send">
    </form>
    <?php echo $yourScore; ?>

    日本人の英語能力は、読み書きで高く、聞き取りと話すのに難があると言われています。
    今回のデモのように短い映画のワンシーンをビデオ化し、ヒアリングのスキルを磨くにはいいかも知れませんね。
  • source : pm studio world wide news
Recent Post
Latest News
Billboard Hot 100
Top 10
  • No.4
    "Psycho"
  • No.5
    "Meant To Be"
  • No.6
    "The Middle"
  • No.7
    "Look Alive"
BBC Radio 1 Singles 40
Top 10
  • Editor: Toshio Maeoka / pm studio
    pm studio world wide news © 2014-2018 . All Rights Reserved
^
to TOP