so easy! 10行程式碼寫個"狗屁不通"文章生成器
前幾天,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
Python之父退休,龜叔與Python的淵源
關注“Python之禪“,學地道的Python技術
相關文章
- 寫一個簡單的程式碼生成器
- "狗屁不通文章生成器"登頂GitHub熱榜,分分鐘寫出萬字形式主義大作Github
- “狗屁不通文章生成器”登頂GitHub熱榜,分分鐘寫出萬字形式主義大作Github
- 超優惠:程式設計師的第一個一百萬,So easy!程式設計師
- 使用 Node.js 寫一個程式碼生成器Node.js
- 學會這個Python庫,介面測試so easy!Python
- 這個輪子讓SpringBoot實現api加密So EasySpring BootAPI加密
- 前端註釋那些事兒:看懂這篇,提高程式碼質量So easy前端
- so easy 前端實現多語言前端
- 不停機替換線上原始碼,教你一招So Easy原始碼
- LVM與磁碟配額管理 so easy come onLVM
- Docker容器:將帶UI的程式直接轉為Web應用,so easyDockerUIWeb
- JAVA實現編寫平臺程式碼生成器Java
- “狗屁不通文章生成器”火爆Github,一句話生成萬字論文的神器瞭解一下?Github
- 寫一個密碼生成器,並同時寫一個密碼強度校驗的方法密碼
- 程式碼生成器
- 記住這11點,找工作變得 So easy!
- 微軟全球生態,讓遊戲出海 So Easy!微軟遊戲
- 寫個文章,居然把我寫哭了.....
- PHP擴充套件php-redis 用起來so easyPHP套件Redis
- 這些 JavaScript函式讓你的工作更加 So Easy!JavaScript函式
- 解決跨海高併發崩潰難題?so easy
- Laravel 程式碼生成器Laravel
- SpringBoot程式碼生成器Spring Boot
- 有了這4個安全測試工具,對軟體安全測試say so easy!
- 尋找寫程式碼感覺(五)之Mybatis官方程式碼生成器的使用MyBatis
- JNI初步(五)jni ndk 一個.so檔案依賴另一個.so檔案的寫法
- 兩行程式碼 寫個代理行程
- go模板-程式碼生成器Go
- MyBatis Plus程式碼生成器MyBatis
- 現在哪個 UI 會寫程式碼?UI
- 開啟、關閉、切換App以及清除App程序,操作so easy!APP
- 開啟、關閉、切換 App 以及清除 App 程序,操作 so easy!APP
- 搞定這套 Python 爬蟲面試題,面試會 so easyPython爬蟲面試題
- SegmentFault 思否技術週刊 — 想玩轉 Python?簡直 So Easy!Python
- 企業上雲?也許只差一個程式碼生成器
- beego 程式碼自動生成器Go
- 程式碼都寫不完,還寫個錘子註釋!