前幾天,GitHub 有個(gè)開源項(xiàng)目特別火,只要輸入標(biāo)題就可以生成一篇長(zhǎng)長(zhǎng)的文章。
背后實(shí)現(xiàn)代碼一定很復(fù)雜吧,里面一定有很多高深莫測(cè)的機(jī)器學(xué)習(xí)等復(fù)雜算法
不過,當(dāng)我看了源代碼之后
這程序不到50行
盡管我有多年的Python經(jīng)驗(yàn),但我竟然一時(shí)也沒有看懂
這代碼放到編輯器里還特么真能執(zhí)行
當(dāng)然啦,原作者也說了,這個(gè)代碼也是在無(wú)聊中誕生的,平時(shí)擼碼是不寫中文變量名的, 中文變量名只是最開始瞎寫的時(shí)候邊寫語(yǔ)料邊寫代碼時(shí)懶得切英文輸入法了。
中文變量名也就忍了,但代碼邏輯不好懂,最后我還是忍著劇烈的頭痛把它的原理讀懂了。
這究竟咋實(shí)現(xiàn)的呢?
我肯定是不服的,這代碼要是被Python之父看見了,他一定后悔發(fā)明這門語(yǔ)言。
其實(shí),生成的文章內(nèi)容都來(lái)自于素材文件 data.json, 這個(gè)文件的結(jié)構(gòu)是個(gè)字典結(jié)構(gòu)
{
"famous":[
"愛迪生a,天才是百分之一的勤奮加百分之九十九的汗水。b",
"查爾斯·史a,一個(gè)人幾乎可以在任何他懷有無(wú)限熱忱的事情上成功。b",
....
],
"bosh":[
"現(xiàn)在, 解決x的問題, 是非常非常重要的. 所以, ",
"我們不得不面對(duì)一個(gè)非常尷尬的事實(shí), 那就是, ",
....
],
"after":[
"這不禁令我深思. ",
"帶著這句話, 我們還要更加慎重的審視這個(gè)問題: ",
....
],
"before":[
"曾經(jīng)說過",
"在不經(jīng)意間這樣說過",
....
]
}
famous
里面收集了很多名人語(yǔ)錄, 里面的關(guān)鍵字”a”和”b” 將分別被 before
和 after
列表中的內(nèi)容替換,這樣處理后句子看起來(lái)具有邏輯性
bosh
里面是各種各樣的的廢話, 里面關(guān)鍵字”x”最后會(huì)用標(biāo)題替換,這樣會(huì)讓人感覺,這篇文章還是和標(biāo)題有那么一丟丟聯(lián)系的。
一篇完整的文章就是靠不斷隨機(jī)從famous、bosh列表獲取元素,之后拼接成一篇文章。
搞懂了原理,如果我們自己來(lái)寫的話,除去代碼注釋,就10來(lái)行代碼
import random
import json
data = json.load(open("data.json", encoding="utf-8"))
def generator(title, length=800):
"""
:param title: 文章標(biāo)題
:param length: 生成正文的長(zhǎng)度
:return: 返回正文內(nèi)容
"""
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
來(lái)測(cè)試一下
from bullshit import generator
content = generator("我愛Python")
print(content)
輸出
一般來(lái)說, 問題的關(guān)鍵究竟為何? 既然如何,
對(duì)我個(gè)人而言,我愛Python不僅僅是一個(gè)重大的事件,還可能會(huì)改變我的人生.
我愛Python, 到底應(yīng)該如何實(shí)現(xiàn). 生活中, 若我愛Python出現(xiàn)了, 我們就不得不考慮它出現(xiàn)了的事實(shí). 從這個(gè)角度來(lái)看, 易卜生說過一句富有哲理的話, 偉大的事業(yè),需要決心,能力,組織和責(zé)任感。我希望諸位也能好好地體會(huì)這句話. 我們不妨可以這樣來(lái)想: 我們不妨可以這樣來(lái)想: 奧斯特洛夫斯基曾經(jīng)提到過, 共同的事業(yè),共同的斗爭(zhēng),可以使人們產(chǎn)生忍受一切的力量?!∵@不禁令我深思. 在這種困難的抉擇下, 本人思來(lái)想去, 寢食難安.問題的關(guān)鍵究竟為何? 帶著這些問題, 我們來(lái)審視一下我愛Python. 我愛Python似乎是一種巧合,但如果我們從一個(gè)更大的角度看待問題,這似乎是一種不可避免的事實(shí).
現(xiàn)在, 解決我愛Python的問題, 是非常非常重要的. 所以, 對(duì)我個(gè)人而言,我愛Python不僅僅是一個(gè)重大的事件,還可能會(huì)改變我的人生. 現(xiàn)在, 解決我愛Python的問題, 是非常非常重要的. 所以,
這樣看來(lái), 在這種不可避免的沖突下,我們必須解決這個(gè)問題. 既然如何, 要想清楚, 我愛Python, 到底是一種怎么樣的存在. 既然如此, 總結(jié)的來(lái)說, 經(jīng)過上述討論, 我愛Python因何而發(fā)生?總結(jié)的來(lái)說, 就我個(gè)人來(lái)說, 我愛Python對(duì)我的意義, 不能不說非常重大. 而這些并不是完全重要, 更加重要的問題是, 問題的關(guān)鍵究竟為何? 笛卡兒曾經(jīng)提到過, 我的努力求學(xué)沒有得到別的好處,只不過是愈來(lái)愈發(fā)覺自己的無(wú)知。這句話語(yǔ)雖然很短, 但令我浮想聯(lián)翩. 我認(rèn)為, 我愛Python, 發(fā)生了會(huì)如何, 不發(fā)生又會(huì)如何. 經(jīng)過上述討論,
在這種困難的抉擇下, 本人思來(lái)想去, 寢食難安.我愛Python, 到底應(yīng)該如何實(shí)現(xiàn). 我愛Python, 到底應(yīng)該如何實(shí)現(xiàn).
你還自定義內(nèi)容長(zhǎng)度
content = generator("我愛Python", length=1000)
print(content)
輸出
要想清楚, 我愛Python, 到底是一種怎么樣的存在. 我們都知道, 只要有意義, 那么就必須慎重考慮.了解清楚我愛Python到底是一種怎么樣的存在, 是解決一切問題的關(guān)鍵.
從這個(gè)角度來(lái)看, 一般來(lái)說, 帶著這些問題, 我們來(lái)審視一下我愛Python. 我們不得不面對(duì)一個(gè)非常尷尬的事實(shí), 那就是, 吉姆·羅恩在不經(jīng)意間這樣說過, 要么你主宰生活,要么你被生活主宰。這句話把我們帶到了一個(gè)新的維度去思考這個(gè)問題: 我愛Python, 到底應(yīng)該如何實(shí)現(xiàn). 每個(gè)人都不得不面對(duì)這些問題. 在面對(duì)這種問題時(shí), 問題的關(guān)鍵究竟為何? 可是,即使是這樣,我愛Python的出現(xiàn)仍然代表了一定的意義. 我們一般認(rèn)為, 抓住了問題的關(guān)鍵, 其他一切則會(huì)迎刃而解.了解清楚我愛Python到底是一種怎么樣的存在, 是解決一切問題的關(guān)鍵.我認(rèn)為, 了解清楚我愛Python到底是一種怎么樣的存在, 是解決一切問題的關(guān)鍵.我愛Python, 到底應(yīng)該如何實(shí)現(xiàn). 我愛Python的發(fā)生, 到底需要如何做到, 不我愛Python的發(fā)生, 又會(huì)如何產(chǎn)生. 現(xiàn)在, 解決我愛Python的問題, 是非常非常重要的. 所以, 我們不妨可以這樣來(lái)想: 現(xiàn)在, 解決我愛Python的問題, 是非常非常重要的. 所以, 我愛Python, 到底應(yīng)該如何實(shí)現(xiàn). 馬克思說過一句富有哲理的話, 一切節(jié)省,歸根到底都?xì)w結(jié)為時(shí)間的節(jié)省。這啟發(fā)了我. 我們不妨可以這樣來(lái)想: 我愛Python似乎是一種巧合,但如果我們從一個(gè)更大的角度看待問題,這似乎是一種不可避免的事實(shí). 問題的關(guān)鍵究竟為何? 歌德曾經(jīng)說過一句富有哲理的話,流水在碰到底處時(shí)才會(huì)釋放活力。帶著這句話, 我們還要更加慎重的審視這個(gè)問題: 我們不得不面對(duì)一個(gè)非常尷尬的事實(shí), 那就是, 我們不得不面對(duì)一個(gè)非常尷尬的事實(shí), 那就是, 我愛Python, 到底應(yīng)該如何實(shí)現(xiàn). 一般來(lái)講, 我們都必須務(wù)必慎重的考慮考慮. 我們都知道, 只要有意義, 那么就必須慎重考慮.總結(jié)的來(lái)說,
我們一般認(rèn)為, 抓住了問題的關(guān)鍵, 其他一切則會(huì)迎刃而解.
這種事實(shí)對(duì)本人來(lái)說意義重大, 相信對(duì)這個(gè)世界也是有一定意義的.既然如何, 就我個(gè)人來(lái)說, 我愛Python對(duì)我的意義, 不能不說非常重大. 我愛Python, 發(fā)生了會(huì)如何, 不發(fā)生又會(huì)如何. 莎士比亞說過一句著名的話, 意志命運(yùn)往往背道而馳,決心到最后會(huì)全部推倒。這句話語(yǔ)雖然很短, 但令我浮想聯(lián)翩.
是不是很簡(jiǎn)單。
當(dāng)然,你也可以引入更多NLP等技術(shù)進(jìn)來(lái),不過這對(duì)我來(lái)說
原項(xiàng)目地址:https://github.com/menzi11/BullshitGenerator
重構(gòu)后的代碼地址:
https://github.com/lzjun567/BullshitGenerator
總結(jié)
以上所述是小編給大家介紹的so easy!10行代碼寫個(gè)"狗屁不通"文章生成器功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
您可能感興趣的文章:- 一篇文章弄懂Python中的可迭代對(duì)象、迭代器和生成器
- 一篇文章徹底搞懂Python中可迭代(Iterable)、迭代器(Iterator)與生成器(Generator)的概念