Icon

「バナナのナス、バナナス」についての考察

今回は、「バナナのナス、バナナス」について思うことを書いていきます。時間を浪費したくて仕方がない人以外は見なくてよいと思います。 意味不明です。それでは、よろしくお願いします。

「バナナのナス、バナナス」とは?

「バナナのナス、バナナス」はTwitter(現X)でときどき観測する謎のフレーズです。特に意味とかはないと思いますが、なんとなくおもしろいフレーズです。 類似するフレーズとして、「うんちのちくび、うんちくび」などが挙げられ、同様のツイートもときどき観測することができます。

重要なのは「AのB、C」というフレーズにおいて、Aの最後n文字とBの最初n文字が共通していて、CはAの最後n文字を削ったものにBをくっつけたものであるということです。

類似するフレーズ

「バナナのナス、バナナス」に限らず、上のような「AのB、C」というフレーズは作成することができます。試しに、Pythonで量産してみます。

            
import requests
from bs4 import BeautifulSoup
import sqlite3
import random
from pykakasi import kakasi
import MeCab
import wikipediaapi

def fetch_random_wikipedia_nouns(num_pages):
    # Wikipediaの言語を指定してWikipediaインスタンスを作成
    wiki = wikipediaapi.Wikipedia(language='ja', user_agent='wikipedia-ja')

    # ランダムなページを指定数取得
    random_titles = []
    for _ in range(num_pages):
        random_title = get_random_wikipedia_title()
        random_titles.append(random_title)

    # 取得したランダムな記事の単語を取得
    random_nouns = []
    for title in random_titles:
        random_nouns.extend(fetch_wikipedia_nouns(title))

    return random_nouns

def get_random_wikipedia_title():
    # ランダムなWikipedia記事のURLを取得
    random_wikipedia_url = "https://ja.wikipedia.org/wiki/Special:Random"

    # ランダムなWikipedia記事のURLからタイトルを取得
    response = requests.get(random_wikipedia_url)
    soup = BeautifulSoup(response.text, "html.parser")
    title = soup.find("h1", {"class": "firstHeading"}).text

    return title

def kanji_to_hiragana(text):
    k = kakasi()
    k.setMode("J", "H")  # 漢字をひらがなに変換する設定
    conv = k.getConverter()
    return conv.do(text)

def create_database(nouns):
    conn = sqlite3.connect("japanese_nouns.db")
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS nouns (id INTEGER PRIMARY KEY, hiragana TEXT)''')
    for noun in nouns:
        hiragana = kanji_to_hiragana(noun)
        c.execute('''INSERT INTO nouns (hiragana) VALUES (?)''', (hiragana,))
    conn.commit()
    conn.close()

def get_phrases_from_database(n, num_phrases):
    conn = sqlite3.connect("japanese_nouns.db")
    c = conn.cursor()
    phrases = []
    for _ in range(num_phrases):
        c.execute('''SELECT hiragana FROM nouns WHERE LENGTH(hiragana) >= ? ORDER BY RANDOM() LIMIT 1''', (n+1,))
        row_A = c.fetchone()
        c.execute('''SELECT hiragana FROM nouns WHERE LENGTH(hiragana) >= ? AND hiragana LIKE ? ORDER BY RANDOM() 
        LIMIT 1''', (n+1, row_A[0][-n:] + "%",))
        row_B = c.fetchone()
        if row_A is not None and row_B is not None and row_A[0] != row_B[0]:
            noun_A = row_A[0]
            noun_B = row_B[0]
            common_part = noun_A[-n:]
            C = noun_A[:-n] + noun_B
            phrases.append(f"{noun_A}の{noun_B}、{C}")
    conn.close()
    return phrases

if __name__ == "__main__":
    # Wikipediaから取得する記事の数
    num_articles = 10

    # Wikipediaから単語を取得
    wikipedia_nouns = fetch_random_wikipedia_nouns(num_articles)

    # データベース作成
    create_database(wikipedia_nouns)

    # フレーズ生成
    num_phrases = 50
    n = 1
    phrases = get_phrases_from_database(n, num_phrases)

    # 生成されたフレーズの表示
    for phrase in phrases:
        print(phrase)
            
        

今回はこちらのコードでフレーズを量産していきます。Wikipediaから単語を取得しています。実行結果はこんな感じです。

            
:39: DeprecationWarning: Call to deprecated method setMode. (Old API will be removed in v3.0.) -- Deprecated since version 2.1.
  k.setMode("J", "H")  # 漢字をひらがなに変換する設定
:40: DeprecationWarning: Call to deprecated method getConverter. (Old API will be removed in v3.0.) -- Deprecated since version 2.1.
  conv = k.getConverter()
:41: DeprecationWarning: Call to deprecated method do. (Old API will be removed in v3.0.) -- Deprecated since version 2.1.
  return conv.do(text)
こうこうのうえ、こうこうえ
ひょうかのかれら、ひょうかれら
せかいのいちらん、せかいちらん
すいそうがくのくうひ、すいそうがくうひ
たいかいのいっぱん、たいかいっぱん
ざいせきのきょうかい、ざいせきょうかい
ゆうこうのうちがわ、ゆうこうちがわ
それのれいきゃく、それいきゃく
せいしつのつま、せいしつま
たんすいのいいづか、たんすいいづか
けいやくのくらい、けいやくらい
1975の5255、1975255
Worldのdata、Worldata
ぜんたいのいせさき、ぜんたいせさき
まちだのだいがく、まちだいがく
62の2011、62011
しゅつじょうのうみ、しゅつじょうみ
てきのきゃくほん、てきゃくほん
ふれのれんめい、ふれんめい
とうごうのうんこう、とうごうんこう
ぺーじのじっけん、ぺーじっけん
こうせいのいじょう、こうせいじょう
たけしのしらさわ、たけしらさわ
きかくのくべつ、きかくべつ
ぜんこくのくらい、ぜんこくらい
たいほのほんせん、たいほんせん
がっこうのうわさ、がっこうわさ
みずのずつう、みずつう
だんねつのつきがた、だんねつきがた
にょうのうえの、にょうえの
12の2010、12010
きりゅうのうんどう、きりゅうんどう
みずのずつう、みずつう
こうとうのうち、こうとうち
2000の000、200000
BNのNCID、BNCID
しっぴつのつぶ、しっぴつぶ
しゅぎょうのうえの、しゅぎょうえの
            
        

どうでしょうか?これらは「バナナのナス、バナナス」よりも"格"が"下"な気がしませんか? "格"の定義が分からないなんて甘えたことは言わないでください。感じるのです。 この方法で生みされたフレーズの中で良かったものは(上には載ってませんが)「おとなのなつやすみ、おとなつやすみ」くらいですかね。 さて、この差は何に起因するのでしょうか?

そもそもバナナがおもしろい

シンプルな話、そもそもバナナが面白いという説もありますね。だって、おもしろくないですか?バナナですよ?バナナ? 冷静に考えたら、明るい黄色や曲線的な形状が結構面白いし、なにより皮をむけるという点が激アツです。

読み手が参加する余地

バナナとナスという二つの単語が地味に似ているので、頑張れば"バナナス"を想像することがでます。 この想像するという行為に読み手が参加する余地が生まれ、よりバナナスを印象付けていると言える気がします。

解説の図

図1.バナナスの一例

バナナのように何個も連なったナスを想像する人もいれば、画像のようなバナナスを連想する人もいるでしょう。とても面白いです。

バナナとナスの類似性と"うんちくび"

「読み手が参加する余地」の想像の余地があるという点に通ずるものがあるが、バナナとナスには食糧であり、植物であるという共通点があります。 やはり、無関係な二つの単語が並んでいるよりもずっと趣深く、読者に楽しみを与えてくれる気がしなくもないです。素晴らしい。 これに関しては、「うんちのちくび、うんちくび」にも通ずるところがあると思います。

バナナの図

図2. バナナ

ナスの図

図3. ナス

見た目の類似性もありますね。

結論

やはり、上で挙げた三点はかなり重要な要素だとおもいます。 奇跡的に、これらの要素がバランスを保ったフレーズが「バナナのナス、バナナス」だったのでした(?)。

ちなみに、chatGPTにバナナスについて教えてあげると、もっと別のフレーズも聞きたいというほどに好評でした。やはり、素晴らしいフレーズです。

解説の図

図4.chatGPTのバナナスに対する反応