python做马尔科夫模型预测法_Python 3 爬虫学习笔记 8 马尔科夫模型
此學習筆記整理于 Ryan Mitchell Web Scraping with Python- Collecting Data from the Modern Web (2015) Chapter 8 Reading and writing natural languages
這一章比較有意思,值得一看!
首先上代碼
上面的沒什么可說的,urlopen,read,utf-8 解碼(好像是),str變成文本。
下面的這是一個構造對應字典的函數。哦,差點忘了介紹馬爾科夫模型和這一章作者拿來玩的東西。馬爾科夫模型,我也說不清,大致就是一個分析流程,看A后面可能發生什么東東(BCDEFG等等,各有各的概率),隨機從一個字母開始,隨機生成其跟隨的字母,最后組成一系列流程。作者根據一篇演講(http://pythonscraping.com/files/inaugurationSpeech.txt)分析,看某個單詞后面都跟了哪些單詞,然后再從I 出發,構造一段話。就是I 然后后面隨機選擇一個單詞,比如believe,然后再根據這個believe再隨機選取一個單詞,最后構成一段話。聽起來挺簡單的,大致分析下,流程如下:
1,找到頻率分析文本,我們已經做了
2,構造對應關系,比如I后面都有哪些單詞,出現了幾次之類的
3,隨機生成一個單詞
4,重復2-4 N 次
下面我們看構造對應關系的函數,作者用的是嵌套字典。舉個栗子,{‘我’:{‘愛’:1,‘恨’:1}} 在第一層 的字典‘我’是key,然后value是第二層的字典,里面有兩個key 愛,恨,兩個value 1 1.表示頻次。
8-15很清楚,也有注釋,可以看清楚的。
17行真的是讓我打開眼界啊。還可以這么簡潔地表達!正常應該寫
words=[]
for word in 集合:
if word != ""
words.append(word)
作者四行寫作一行也是讓我看得一個形容詞。
21行到28行:首先,為第一個單詞甲來一個字典A,然后它的value是個字典B,字典B是否包括甲后面的單詞乙。不包括的話加進去,字典B的key就是乙,value設為0,后面加一,沒出現一次再加一。效果是{‘甲’:{‘乙’:1}}
上面完成了步驟2,然后就需要隨機選擇一個了。舉個栗子:{‘我’:{‘愛’:1,‘恨’:1}}?,F在需要我們在‘我’的后面隨機選擇一個字。作者用的方法非常巧妙,先算出有多少個字,這個栗子是2個,然后隨機生成數字1或者2,然后用這個1或者2依次減去‘愛’和‘恨’的頻次,出現0或者負數的時候,選取這個key值。比如,生成了1,1-1=0符合條件,那么就選擇‘愛’,生成了2,2-1=1不符合條件,然后再次減去‘恨’的頻次數,1(上一次計算剩下的1)-1(恨的品次數)=0,符合條件就選擇‘恨’了。
這里需要 from random import randint 來生成隨機整數
P.S.:沒能上車的小伙伴歡迎留言,如果我會我直接回答你!如果不會,我谷歌后回答你!如果要加我微信,不行。
總結
以上是生活随笔為你收集整理的python做马尔科夫模型预测法_Python 3 爬虫学习笔记 8 马尔科夫模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用python提取SWAT模型outp
- 下一篇: arrayrand php,php中ar