見出し画像

「いきなりプログラミング Python」読了

この本はこれからPythonを学び始める人にめちゃくちゃオススメです!
Pythonを一から勉強する本やUdemyは"Hello World"から始まり、リスト、辞書、条件文、繰り返し文など順番に勉強していくのが定石ですが、だいたい退屈です。そして初学者にはそれを学んで何に応用できるかがイメージできず、基礎を学んで終わり、一生使わない場合があるかと思います。
僕の大学時代に学んだFortranやC言語もそうでした。退屈な勉強の途中で挫折してプログラミング嫌いになりました。

この本は簡単な数種類のアプリの事例が載っています。
print("Hello World!")の説明もなく、アプリ作成が始まります(Python環境の準備などの説明は丁寧にされている)。初めは数当てゲーム。

そのゲームを作成する中で、if文やfor文と自然に出会い使い方が理解できます。驚いたのは二分探索も使われており、アルゴリズムで勉強したような容も自然と理解することができる内容でした。

 Chapter4では「タメ口矯正アプリ」でマイクから入力された音声をテキストに変換して、タメ口があれば丁寧語に修正して出力するアプリです。
reライブラリーで正規表現を使ってタメ口から丁寧語にルールベースで変換していました。生成AIブームの中、せっかくなのでPerplexityのAPI経由でllamaモデルを使ってタメ口を丁寧語に変換して出力してみました!
その他の点は例題通りで変更なし。
日本語を修正する場合、GPTの方が自然なのかな?不自然な点は残るけど、うまく修正していました。事前にルールを指示する必要がないので生成AIって便利ですね!

#SpeechRecognition

import speech_recognition as sr
import requests
import re


my_api = "**********"

#PerplexityのAPIを介してllamaモデルを使用。
#音声入力されたテキストを丁寧語に変換して出力。

def tamego_to_teineigo_Perplexity(api, text):

    url = "https://api.perplexity.ai/chat/completions"

    payload = {
        "model": "llama-3-sonar-large-32k-online",
        "messages": [
            {
                "role": "system",
                "content": """あなたは日本語の先生です。与えられたテキストを丁寧語に修正して下さい。説明などは不要。
                            例 :
                            {"だね" : "ですね",
                             "こんにちは" : "ごきげんよう",
                             "だ" : "です"}"""
            },
            {
                "role": "user",
                "content": text
            }
       ]
    }
    headers = {
        "accept": "application/json",
        "content-type": "application/json",
        "authorization": "Bearer " + api
    }

    response = requests.post(url, json=payload, headers=headers)

    return response.json()["choices"][0]["message"]["content"]

#例で示されていたタメ口から丁寧語への変換。

def tamego_to_teineigo(text):

    patterns = {r"だね$" : "ですね",
                r"こんにちは" : "ごきげんよう",
                r"だ$" : "です"}
    
    sentences = text.split(" ")

    teineigo_sentences = []
    for sentence in sentences:
        for pattern, replacement in patterns.items():
            sentence = re.sub(pattern, replacement, sentence)
        teineigo_sentences.append(sentence)
    
    joined_text = " ".join(teineigo_sentences)

    return joined_text


r = sr.Recognizer()

is_first_time = True

while True:
    with sr.Microphone() as source:
        if is_first_time:
            r.adjust_for_ambient_noise(source, duration = 1)
            is_first_time = False
        print("Please speak to the microphone")
        audio = r.listen(source)

    try:
        recognized_text = r.recognize_google(audio, language='ja')
        print(f"Casual result[{recognized_text}]")
        #teinei_text = tamego_to_teineigo(recognized_text)    #元々例題で使用
        teinei_text = tamego_to_teineigo_Perplexity(api = my_api, text = recognized_text)    #Perplexityを使用した変換
        print(f"Formal result : [{teinei_text}]")

        if "プログラム終了" in recognized_text:
            break
    except sr.UnknownValueError:
        print("No recognition")
    except sr.Recognizer as e:
        print("Network error")

出力結果がこちら。
結構いい感じに変換しています。大阪弁でも理解してるみたい。

Please speak to the microphone
Casual result[こんばんは 今日はめちゃ疲れたわ]
Formal result : [こんばんは。今日はとても疲れました。]
Please speak to the microphone
Casual result[今日はめっちゃ暑かったねん]
Formal result : [今日はめっちゃ暑かったですね。]
Please speak to the microphone
Casual result[暑すぎてあんまり歩けんかったわ]
Formal result : [暑すぎてあんまり歩けなかったですね。]
Please speak to the microphone
Casual result[プログラム終了です]
Formal result : [プログラム終了ですね。]

この記事が参加している募集

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