見出し画像

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

甘いものを食べたい。

前回作成したプログラムを一部改善しました。
前回のものは並び替え問題の前半部分をランダムで固定し、残りの単語を使って問題を作成していました。

前回記事

ただ、よくよく考えると、神奈川県の高校入試問題は並び替え問題の条件が5語を並び替えるというものなんですよね。
実態に即した問題になっていなかったので、プログラムを修正しました。

今回の改善点

  • 並び替えの問題部分を文中から5単語抽出し、作成できるようにした。

  • これで前半部分を固定にしたり、後半部分を固定にしたりできるようになった。

  • 問題のバリエーションが広がった。

作成した問題

# 元の文
"English is spoken by many people as their first languege."

# 出力された問題
# English is spoken by ( as, people, first, their, many ) languege.
# (English, by, many, is, spoken ) people as their first languege.
# English ( many, spoken, people, by, is ) as their first languege.

うん、いい感じ。

プログラム全体像

# ver1.20
import random

# R4_2022	[4]	ア
sentence = "English is spoken by many people as their first languege."
# 文字列".""?"の前に空白を追加
sentence = sentence[:-1] + " " + sentence[-1]

# リストに変換
words = sentence.split()
words
#['English', 'is', 'spoken', 'by', 'many', 'people', 'as', 'their', 'first', 'languege', '.']

# リストサイズ確認
wordnm = len(words)
wordnm
# 11

# 並び替えの単語数を決める
sortnm = 5
fixnm = wordnm - (sortnm + 1)
fixnm
# 5

# 先頭の単語数をランダムで決める
rn =random.randrange(fixnm)
rn
# ex:4

# 並び替えの前の単語を抽出
firstwords =words[:rn]
firstwords
# ex:['English', 'is', 'spoken', 'by']

# 並び替え問題部分を抽出
mainnm = rn + sortnm
sortwords = words[rn:mainnm]
sortwords
# ex:['many', 'people', 'as', 'their', 'first']

# 並び替えの後の単語を抽出
endwords =words[mainnm:-1]
endwords
#['languege']

# .?!
punctuation = words[-1]
punctuation
# ex:"."

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

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

# English is spoken by ( as, people, first, their, many ) languege.
# (English, by, many, is, spoken ) people as their first languege.
# English ( many, spoken, people, by, is ) as their first languege.

今後の課題

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

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

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

上記の課題に手をつける前に全体を修正してしまいました。
ただ、本当は、問題の条件が6語中5語を選んで並び替える問題だけど、まだ適当な一語を組み入れるプログラムは考えつかないなぁ。




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