iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0
佛心分享-IT 人自學之術

Python學習馬拉松:30天挑戰系列 第 30

Day30. 實作練習:馬可夫鏈文本生成器 Markov Chain Text Composer

  • 分享至 

  • xImage
  •  
  • 教學來源:https://www.youtube.com/watch?v=8ext9G7xspg
  • 這個專案是一個基於馬可夫鏈(Markov Chain)的文本生成器,透過分析文本中的單詞之間的關聯,來生成新文本。
    ➤ 馬可夫鏈文本生成器的核心概念是透過「當前狀態」來決定「下一個狀態」,在這裡,狀態指的是一個單詞。換句話說,這個程式的目標是根據已知文本中單詞的排列規則,模擬生成類似的文本。
  • 程式碼:
    ➤ compose.py:
    https://ithelp.ithome.com.tw/upload/images/20241014/20168364QYY3bJgNaY.png

https://ithelp.ithome.com.tw/upload/images/20241014/20168364BVDyIsjMjK.png

➤ graph.py:
https://ithelp.ithome.com.tw/upload/images/20241014/20168364BjHv3gKhgy.png

https://ithelp.ithome.com.tw/upload/images/20241014/20168364caKQiKXOJ1.png

  • 執行3次程式碼的結果:
    https://ithelp.ithome.com.tw/upload/images/20241014/20168364MmXfQk3duR.png

  • 程式說明:
    ➤ compose.py:

  1. get_words_from_text函數:
    -從給定的文本檔案中讀取內容,去除標點符號,將文本轉換為小寫,並分割成最多 1000 個單詞的列表。
  2. make_graph函數:
    -建立一個圖(Graph)來表示單詞之間的關聯。每個單詞是圖中的一個節點(Vertex),如果兩個單詞在文本中連續出現,則在它們之間建立一條邊,邊的權重表示它們一起出現的頻率。
    -該圖的功能是幫助後續生成文本時,根據單詞的出現頻率來預測下一個單詞。
  3. compose函數:
    -使用生成的圖,隨機選擇一個單詞作為起點,並根據圖中節點之間的關聯逐步生成文本。文本的長度由 length 參數決定(默認為 50 個單詞)。
  4. main函數:
    -讀取指定文本檔案,提取單詞,建立單詞之間的關聯圖,並最終生成一段隨機文本。

➤ graph.py:

  1. Vertex 類別:
    -圖中的節點,表示一個單詞。每個節點都有一個 adjacent 字典,用來儲存與其他單詞的關聯及其權重。當兩個單詞一起出現時,增加它們之間邊的權重。
    -還包含一個方法 next_word(),用來根據關聯單詞的權重,隨機選擇下一個單詞。
  2. Graph 類別:
    -圖結構,用來管理所有單詞及它們之間的關聯。每個單詞都是圖中的一個節點,可以根據關聯性預測下一個單詞。
    -generate_probability_mappings 用來為每個單詞生成一個概率映射,讓文本生成器根據權重來選擇下一個單詞。

上一篇
Day29. 實作練習:圈圈叉叉Tic-Tac-Toe --AI
系列文
Python學習馬拉松:30天挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言