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