python文本處理入門:44行代碼寫一個簡單的藏頭詩生成器

想必最近大家家庭羣裏最近都會看到這麼一張圖:

一驚,這什麼玩意兒???後來一搜會發現裏面不同的詩句來自於不同的古詩,嘛,這不是很好玩的一件事情嗎?這次我們使用Github的唐詩宋詞dataset:https://github.com/chinese-poetry/chinese-poetry

來寫一個簡單的藏頭詩生成器。

迎合最近大家在家的心情,以下是效果圖:

我只講思路不說詳細的代碼講解:代碼地址:https://github.com/timcanby/Chinese_acrostic_generator(給star的是好青年)

其實這件事就是先觀察數據:

 

數據是這個樣子的,句子長短不一,有作者,編號信息,標題和本文。那麼我們需要做的事情就是,統一詩句橫向長度,以及順利遍歷所有的數據。所以問題轉移到,step1:遍歷文件夾數據和json數據的導出 step2:抽取每句詩第一個字做匹配  step3:根據所需詩句長度來當匹配的條件 step4:隨機抽取同樣頭文字的詩句 step5:按照目標語句順序輸出 step6:針對數據庫中不對應漢字的情況做異常處理。

所以首先就是遍歷所有的json文件了,這個每個人操作不同

我選擇使用 os.listdir所以讀目標文件下所有的文件就是:

def getfileFromfilter(rootdir):
    list = os.listdir(rootdir)
    ReturnList=[]
    for i in range(0, len(list)):
        if list[i]!='.DS_Store':

            path = os.path.join(rootdir, list[i])
            ReturnList.append(path)
    return (ReturnList)

rootdir下所有文件名會以list的形式返回。

接下來就是json文件的讀入了

咱們

import json

這是個很方便的標準庫,想了解更多:https://www.json.org/json-en.html

然後

 f=open(eachJson ,'r',encoding='utf-8')
            dict=json.load(f)

這樣所有的數據就會變成dict詞典形式

建立一個用於存篩選過的句子的字典:

sentencelist={}

然後開始篩選我們要的詩句,

我們找到屬性名是

['paragraphs'](詩句)

所以直接用這個做匹配:

 try:
            f=open(eachJson ,'r',encoding='utf-8')
            dict=json.load(f)

            for each in dict:
                for eachsentence in each['paragraphs']:
                    if len(eachsentence)==weight:

                        for eachCharacter in text:
                            if eachsentence[0] == eachCharacter:
                                sentencelist[each['author'],each['title'],eachsentence]=eachCharacter
        except:continue

這裏weight是詩句長度,可以是12也可以是16,8言就是16,先用長度來篩選後再匹配每句第一個詞 。eachsentence 是句子,那麼eachsentence 【0】自然就是第一個文字。爲了方便查找,匹配後所有的詩句作爲key,對應的頭文字作爲value存進sentencelist這個詞典。存出來是這樣的:(這裏我還存了['author'],['title']以方便以後使用)

因爲key不能重複這個大家都知道。

    for eachcha in text:
        txt=[]
        for key, value in sentencelist.items():
            if value==eachcha:
                txt.append(key)
        print(random.choice(txt)[2])

然後最後再掃一遍用戶要的字符串做randomlist抽選就ok了!

 

整個過程非常非常簡單,甚至這個版本有很多冗餘的操作,僅供初學者參考!!!轉載留地址,github期待star~~

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