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

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

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

這程序不到50行

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

這代碼放到編輯器里還特么真能執行

當然啦,原作者也說了,這個代碼也是在無聊中誕生的,平時擼碼是不寫中文變量名的, 中文變量名只是最開始瞎寫的時候邊寫語料邊寫代碼時懶得切英文輸入法了。
中文變量名也就忍了,但代碼邏輯不好懂,最后我還是忍著劇烈的頭痛把它的原理讀懂了。
這究竟咋實現的呢?

我肯定是不服的,這代碼要是被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, 發生了會如何, 不發生又會如何. 莎士比亞說過一句著名的話, 意志命運往往背道而馳,決心到最后會全部推倒。這句話語雖然很短, 但令我浮想聯翩.
是不是很簡單。

當然,你也可以引入更多NLP等技術進來,不過這對我來說

原項目地址:https://github.com/menzi11/BullshitGenerator
重構后的代碼地址:
https://github.com/lzjun567/BullshitGenerator
總結
以上所述是小編給大家介紹的so easy!10行代碼寫個"狗屁不通"文章生成器功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
您可能感興趣的文章:- 一篇文章弄懂Python中的可迭代對象、迭代器和生成器
- 一篇文章徹底搞懂Python中可迭代(Iterable)、迭代器(Iterator)與生成器(Generator)的概念