【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語を選んで並び替える問題だけど、まだ適当な一語を組み入れるプログラムは考えつかないなぁ。
この記事が気に入ったらサポートをしてみませんか?