14
6

More than 3 years have passed since last update.

【Python】学校の課題はPythonに投げ込もう【効率化】

Last updated at Posted at 2020-12-22

はじめに

現在自分は高校1年で、
コロナ禍で暇になった自分はPythonを勉強し尽くし、
夜通しでJavaや、Elixirの勉強をしはじめた為学校の宿題が...
やっぱり効率化のPythonということで、学校の宿題もなげこもうと思いました。
コードの効率性、速度の面で違和感を持つかもしれませんが、温かい目で見ていて頂けるとありがたいです。

作文

テーマ:あなたにとって美術とは
これはPythonに書かせるべきだなって思った。
自然言語処理も多少勉強していたため、Mecabを使って分かち書きをして、
複数のモデル文章からマルコフ連鎖によって新しい文章を生産した
Pythonには便利なことにmarkovifyというモジュールが存在し、
分かち書きした文章を処理するのに用いた。


import MeCab
import markovify 
text = ''
parse_text = MeCab.Tagger('-Owakati').parse(text)

text2 = ''
parse_text2 = MeCab.Tagger('-Owakati').parse(text2)

text_model = markovify.Text(parse_text)
text_model2 = markovify.Text(parse_text2)

comb_model = markovify.combine([text_model,text_model2],[1,1])

for _ in range(8):
    print(comb_model.make_sentence())

これで生産した文章が

美術は自分の感性で作り上げることに意義があるのであり、学校で教える美術ではない。

と喧嘩を売る内容になってしまい、成績は案の定3/10だった。
122DE3D7-2F1E-488C-8B21-B37B05CCBC1F.jpeg

一言で表しづらい英語の課題

課題内容

とあるアプリを使って、読まれた日本語を英語に翻訳して読み上げる
または、英語をそのまま読み上げるものがある。

プログラムのロジックを考える

まずは音声認識をするプログラムを構築して、
英語で読み上げる時、日本語で読み上げる時での処理を書かなきゃいけない。

import pyaudio
import wave
import speech_recognition
from playsound import playsound
from googletrans import Translator
from gtts import gTTS
translator = Translator()

def rcd():
    audio = pyaudio.PyAudio()
    stream = audio.open(format=pyaudio.paInt16,channels=1,rate=44100,input=True,input_device_index=0,frames_per_buffer=2**11)

    frames = []
    for i in range(0, int(44100 / 2**11 * 10)):
        data = stream.read(2**11)
        frames.append(data)

    stream.stop_stream()
    stream.close()
    audio.terminate()

    sFile = wave.open(sound.wav, 'wb')
    sFile.setnchannels(1)
    sFile.setsampwidth(audio.get_sample_size(pyaudio.paInt16))
    sFile.setframerate(44100)
    sFile.writeframes(b''.join(frames))
    sFile.close()

def to_text():
    r = speech_recognition.Recognizer()
    with speech_recognition.AudioFile(sound.wav) as src:
        audio = r.record(src)
    text = r.recognize_google(audio,key='Mykey',language='en-US')
    return text

def read_english():
    play_sound(sound.wav)

def to_jp():
    text_data = to_text()
    trans_ja = translator.translate(text_data,src='en',dest='ja')
    return trans_ja

def read_ja():
    text_data = to_jp()
    tts = gTTS(text=text_data, lang='ja')
    tts.save('jp.mp3')
    play_sound('jp.mp3')

def main_jp():
    rcd()
    read_ja()

def main_en():
    rcd()
    read_english()

if __name__ =='__main__':
    mode = input('mode:')
    if mode == 'ja':
        main_jp()
    elif mode =='en':
        main_en()
    else:
        pass

これで課題を提出したところ
DFD7C828-421C-4334-A48B-4A05813B4FB4.png
1/15しかパス出来なかった(T . T)
当然成績もズタボロでした。

最後に

学校の宿題の自動化にはやはりモジュールの多さに優れているPythonが適していると思う。
もちろんこのことは担任から色々とお話しを聞かされたが、
これをきっかけにテストの成績もそこまで良くない自分にAO入試を薦めてくれた。
将来的に紙が使われなくなってきて、より電子機器の需要が高まれば、それに比例してプログラムの需要も高まるため、
Pythonは早いうちにやって損することはないなと感じました。b

14
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6