so easy! 10行代碼寫個300字文章

前幾天,GitHub 有個開源項目特別火,只要輸入標題就可以生成一篇長長的文章。


640?wx_fmt=png




背後實現代碼一定很複雜吧,裏面一定有很多高深莫測的機器學習等複雜算法


640?wx_fmt=jpeg


不過,當我看了源代碼之後


640?wx_fmt=jpeg


這程序不到50行


640?wx_fmt=jpeg


儘管我有多年的Python經驗,但我竟然一時也沒有看懂



640?wx_fmt=jpeg




當然啦,原作者也說了,這個代碼也是在無聊中誕生的,平時擼碼是不寫中文變量名的, 中文變量名只是最開始瞎寫的時候邊寫語料邊寫代碼時懶得切英文輸入法了。


中文變量名也就忍了,但代碼邏輯不好懂,最後我還是忍着劇烈的頭痛把它的原理讀懂了。


這究竟咋實現的呢?


640?wx_fmt=jpeg


我肯定是不服的,這代碼要是被Python之父看見了,他一定後悔發明這門語言。


其實,生成的文章內容都來自於素材文件 data.json, 這個文件的結構是個字典結構


{
    "famous":[
    "愛迪生a,天才是百分之一的勤奮加百分之九十九的汗水。b",
    "查爾斯·史a,一個人幾乎可以在任何他懷有無限熱忱的事情上成功。b",
    ....
    ],
    "bosh":[
    "現在, 解決x的問題, 是非常非常重要的. 所以, ",
    "我們不得不面對一個非常尷尬的事實, 那就是, ",
    ....
    ],
    "after":[
    "這不禁令我深思. ",
    "帶着這句話, 我們還要更加慎重的審視這個問題: ",
   ....
 
    ],
    "before":[
    "曾經說過",
    "在不經意間這樣說過",
    ....
    ]
}

famous 裏面收集了很多名人語錄, 裏面的關鍵字”a”和”b” 將分別被 before 和 after列表中的內容替換,這樣處理後句子看起來具有邏輯性


bosh裏面是各種各樣的的廢話, 裏面關鍵字”x”最後會用標題替換,這樣會讓人感覺,這篇文章還是和標題有那麼一丟丟聯繫的。


一篇完整的文章就是靠不斷隨機從famous、bosh列表獲取元素,之後拼接成一篇文章。


搞懂了原理,如果我們自己來寫的話,除去代碼註釋,就10來行代碼


import random
import json
 
data = json.load(open("data.json", encoding="utf-8"))
 
def generator(title, length=800):
    """
    :param title: 文章標題
    :param length: 生成正文的長度
    :return: 返回正文內容
    """
    body = ""
    while len(body) < length:
        num = random.randint(0, 100)
        if num < 10:
            body += "\r\n"
        elif num < 20:
            body += random.choice(data["famous"]) \
                .replace('a', random.choice(data["before"])) \
                .replace('b', random.choice(data['after']))
        else:
            body += random.choice(data["bosh"])
        body = body.replace("x", title)
 
    return body

來測試一下


from bullshit import generator
content = generator("我愛Python")
print(content)

輸出

一般來說, 問題的關鍵究竟爲何? 既然如何,
對我個人而言,我愛Python不僅僅是一個重大的事件,還可能會改變我的人生.
我愛Python, 到底應該如何實現. 生活中, 若我愛Python出現了, 我們就不得不考慮它出現了的事實. 從這個角度來看, 易卜生說過一句富有哲理的話, 偉大的事業,需要決心,能力,組織和責任感。我希望諸位也能好好地體會這句話. 我們不妨可以這樣來想: 我們不妨可以這樣來想: 奧斯特洛夫斯基曾經提到過, 共同的事業,共同的鬥爭,可以使人們產生忍受一切的力量。 這不禁令我深思. 在這種困難的抉擇下, 本人思來想去, 寢食難安.問題的關鍵究竟爲何? 帶着這些問題, 我們來審視一下我愛Python. 我愛Python似乎是一種巧合,但如果我們從一個更大的角度看待問題,這似乎是一種不可避免的事實.
現在, 解決我愛Python的問題, 是非常非常重要的. 所以, 對我個人而言,我愛Python不僅僅是一個重大的事件,還可能會改變我的人生. 現在, 解決我愛Python的問題, 是非常非常重要的. 所以,
 
這樣看來, 在這種不可避免的衝突下,我們必須解決這個問題. 既然如何, 要想清楚, 我愛Python, 到底是一種怎麼樣的存在. 既然如此, 總結的來說, 經過上述討論, 我愛Python因何而發生?總結的來說, 就我個人來說, 我愛Python對我的意義, 不能不說非常重大. 而這些並不是完全重要, 更加重要的問題是, 問題的關鍵究竟爲何? 笛卡兒曾經提到過, 我的努力求學沒有得到別的好處,只不過是愈來愈發覺自己的無知。這句話語雖然很短, 但令我浮想聯翩. 我認爲, 我愛Python, 發生了會如何, 不發生又會如何. 經過上述討論,
在這種困難的抉擇下, 本人思來想去, 寢食難安.我愛Python, 到底應該如何實現. 我愛Python, 到底應該如何實現.

你還自定義內容長度

content = generator("我愛Python", length=1000)
print(content)

輸出

要想清楚, 我愛Python, 到底是一種怎麼樣的存在. 我們都知道, 只要有意義, 那麼就必須慎重考慮.瞭解清楚我愛Python到底是一種怎麼樣的存在, 是解決一切問題的關鍵.
從這個角度來看, 一般來說, 帶着這些問題, 我們來審視一下我愛Python. 我們不得不面對一個非常尷尬的事實, 那就是, 吉姆·羅恩在不經意間這樣說過, 要麼你主宰生活,要麼你被生活主宰。這句話把我們帶到了一個新的維度去思考這個問題: 我愛Python, 到底應該如何實現. 每個人都不得不面對這些問題.  在面對這種問題時, 問題的關鍵究竟爲何? 可是,即使是這樣,我愛Python的出現仍然代表了一定的意義. 我們一般認爲, 抓住了問題的關鍵, 其他一切則會迎刃而解.瞭解清楚我愛Python到底是一種怎麼樣的存在, 是解決一切問題的關鍵.我認爲, 瞭解清楚我愛Python到底是一種怎麼樣的存在, 是解決一切問題的關鍵.我愛Python, 到底應該如何實現. 我愛Python的發生, 到底需要如何做到, 不我愛Python的發生, 又會如何產生. 現在, 解決我愛Python的問題, 是非常非常重要的. 所以, 我們不妨可以這樣來想: 現在, 解決我愛Python的問題, 是非常非常重要的. 所以, 我愛Python, 到底應該如何實現. 馬克思說過一句富有哲理的話, 一切節省,歸根到底都歸結爲時間的節省。這啓發了我. 我們不妨可以這樣來想: 我愛Python似乎是一種巧合,但如果我們從一個更大的角度看待問題,這似乎是一種不可避免的事實. 問題的關鍵究竟爲何? 歌德曾經說過一句富有哲理的話,流水在碰到底處時纔會釋放活力。帶着這句話, 我們還要更加慎重的審視這個問題: 我們不得不面對一個非常尷尬的事實, 那就是, 我們不得不面對一個非常尷尬的事實, 那就是, 我愛Python, 到底應該如何實現. 一般來講, 我們都必須務必慎重的考慮考慮. 我們都知道, 只要有意義, 那麼就必須慎重考慮.總結的來說,
我們一般認爲, 抓住了問題的關鍵, 其他一切則會迎刃而解.
這種事實對本人來說意義重大, 相信對這個世界也是有一定意義的.既然如何, 就我個人來說, 我愛Python對我的意義, 不能不說非常重大. 我愛Python, 發生了會如何, 不發生又會如何. 莎士比亞說過一句著名的話, 意志命運往往背道而馳,決心到最後會全部推倒。這句話語雖然很短, 但令我浮想聯翩.

是不是很簡單。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章