見出し画像

【Python】英文から語順整序問題を作成する ver1.5

今日の晩御飯はキムチ鍋。美味しかった。

中学生の英語学習での難しいところは「単語を覚えること」「単語の並べ方を理解すること」の二つの側面があります。さらにここに三単現のSや過去形など条件分岐するところを理解して、書き分けられるようになるにはさらに困難は続きます。

実際、単語を覚えることが苦手な子にとっては英作文を書けるようになることはとっても大変で、それがきっかけで英語嫌いになったりするんですよね。

そうならないようにするためにそれぞれを分けて、学習を進められるようにできれば、子どもたちの手は進みやすくなります。

だからこその並び替えプログラムがあったらいいんですよね。最終的には学校の教科書に登場する文の並び替え問題を作ることができれば、少しでも「できる!」って思ってもらえないかな?が今回のきっかけです。

今回は前回記事で作成したものを関数にしました。

前回記事

今回の改善点

  • プログラムを関数化!

  • 戻り値を「問題文」と「解答」を出力できるようにした!

  • 並び替えの個数は変数に設定し、5単語以外の問題も作成できるようにした!

プログラム全体像

# ver1.50
import random

def sortby_words(sentence, sortnm=5):
  # 文字列"."や"?"の前に空白を追加
  sentence = sentence[:-1] + " " + sentence[-1]
  # リストに変換
  words = sentence.split()
  # リストサイズ確認
  wordnm = len(words)
  # 並び替えの単語数を決める
  fixnm = wordnm - (sortnm + 1)
  # 先頭の単語数をランダムで決める
  rn =random.randrange(fixnm)
  # 並び替えの前の単語を抽出
  firstwords =words[:rn]
  
  # 並び替え問題部分を抽出
  mainnm = rn + sortnm
  sortwords = words[rn:mainnm]
  # 並び替えの後の単語を抽出
  endwords =words[mainnm:-1]
  # .?!
  punctuation = words[-1]

  # 問題作成
  # リストwordsをランダムで並び替え
  # 最終文字以外を並び替え
  wordsr = random.sample(sortwords, len(sortwords))

  # 解答を作成
  if rn == 0:
    answer = "(" + ", ".join(sortwords) + " ) " + " ".join(endwords) + punctuation
  else:
    answer = " ".join(firstwords) + " ( " + ", ".join(sortwords) + " ) " + " ".join(endwords) + punctuation

  # 単語を並び替えて問題を作成
  if rn == 0:
    question = "(" + ", ".join(wordsr) + " ) " + " ".join(endwords) + punctuation
  else:
    question = " ".join(firstwords) + " ( " + ", ".join(wordsr) + " ) " + " ".join(endwords) + punctuation
  return answer ,question

出力内容

# R4_2022 [4] ア
text = "English is spoken by many people as their first languege."

answer, question = sortby_words(text, 5)
print(answer)
print(question)

# 出力内容
English is ( spoken, by, many, people, as ) their first languege.
English is ( many, people, as, by, spoken ) their first languege.

7単語で設定した場合

answer, question = sortby_words(text, 7)

print(answer)
print(question)

# 出力内容
English ( is, spoken, by, many, people, as, their ) first languege.
English ( as, people, is, by, their, many, spoken ) first languege.

今後、教科書本文を用いた場合は1文の単語数が少ない場合もあるから、プログラムは改変していかないといけないですね。

今後の課題

  • 現在のプログラムでは先頭の文字列も大文字になっている。ここは固有名詞については大文字で、それ以外は小文字に変換するプログラムを組む

  • 【次回】出力したデータから日本語訳、並び替え単語リスト、正解の英文のリストを作成し、csvで出力できるようにする。

  • 【次回】複数の問題文を変換できるようにfor文で組み立てる。

できたら、問題を印刷しやすくできるようにwordファイルを作成できるようになれば、運用しやすくなりますね。

この記事が気に入ったらサポートをしてみませんか?