みなさんこんばんは功琉偉つばさです。 前回、ランダム生成が無理だと思ったって話をしたんですけど、AIをつかってパソコンに無理やりやってもらうことにしました。そうして組み立てたプロンプトがこちら
import random
import re
import requests
from bs4 import BeautifulSoup
from janome.tokenizer import Tokenizer
# Wikipediaから日本語の単語を収集する関数(小説用の単語を優先的に収集)
def fetch_novel_related_words_from_wikipedia():
# WikipediaのランダムなページURL
url = "https://ja.wikipedia.org/wiki/Special:Random"
words = []
while len(words) < 20:
try:
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
paragraphs = soup.find_all('p')
for paragraph in paragraphs:
text = paragraph.get_text()
# 文字列をひらがなに変換して単語として抽出
hiragana_words = re.findall(r'[\u3041-\u3096ぁ-ゖァ-ヶ]+', text)
words.extend(hiragana_words)
if len(words) >= 20:
break
if len(words) >= 20:
break
except Exception as e:
print(f"Error fetching Wikipedia page: {e}")
return words[:20] # 最大20単語を取得する
# 収集した単語をひらがなに変換して追加
def convert_to_hiragana(words):
t = Tokenizer()
hiragana_words = []
for word in words:
tokens = t.tokenize(word)
hiragana_word = ''.join([token.reading or token.surface for token in tokens])
hiragana_words.append(hiragana_word)
return hiragana_words
# 生成したひらがな文字列が意味のある文かどうかを判定する関数
def is_meaningful(sentence, novel_words):
# 簡単な判定ロジック(本来はより厳密な方法が必要です)
if len(sentence) < 4:
return False
tokens = tokenizer.tokenize(sentence)
for token in tokens:
if token.base_form in novel_words:
return True
return False
# ひらがな文字列を生成する関数
def generate_random_hiragana_string(length):
hiragana_chars = [chr(i) for i in range(0x3041, 0x3097)] # ひらがなのUnicode範囲
return ''.join(random.choices(hiragana_chars, k=length))
# メインの実行部分
if __name__ == '__main__':
# Wikipediaから小説用の単語を取得
wikipedia_novel_words = fetch_novel_related_words_from_wikipedia()
# 取得した単語をひらがなに変換してリストに追加
hiragana_novel_words = convert_to_hiragana(wikipedia_novel_words)
# 既存の小説用単語リスト(サンプル)
existing_novel_words = [
'小説', '物語', '主人公', '登場人物', '情景', '展開', 'ドラマ', '感動', '緊張', '秘密',
'想像', '悩み', '絆', '愛情', '切ない', '微笑む', '涙', '喜び', '哀しみ', '記憶'
]
# 小説用単語リストに追加
existing_novel_words.extend(hiragana_novel_words)
# 形態素解析器の準備
tokenizer = Tokenizer()
# novel_words を定義する
novel_words = set(existing_novel_words)
# 処理回数のカウンター
trials = 0
# 生成した意味のある文の数
meaningful_sentences_count = 0
try:
while trials < 10000:
random_string = generate_random_hiragana_string(random.randint(5, 20))
if is_meaningful(random_string, novel_words):
print(f"意味のある文が生成されました: {random_string}")
meaningful_sentences_count += 1
trials += 1
except KeyboardInterrupt:
pass
print(f"試行回数: {trials}")
print(f"意味のある文の数: {meaningful_sentences_count}")
これはChat GPTにも手伝ってもらって…ほぼやってもらって作ったやつなんですけど、100000回くらい演算しても意味のある文章にはなりませんでした…
これからもトライアンドエラーの精神で頑張ってみます! コンピューターで自動化して頑張ります!