python自然語言處理 馬爾科夫模型

2021-08-09 04:50:39 字數 2680 閱讀 6944

馬爾科夫模型常用於分析大量隨機事件,隨機事件的特點是乙個離散事件發生之後,另乙個離散事件將在前乙個事件的條件下以一定的概率發生。以天氣的馬爾科夫模型為例:

在這個天氣系統模型中,如果今天是晴天,那麼明天有70%的可能是晴天,20%的可能是多雲,10%的可能下雨。如果今天是下雨天,那麼明天有50%的可能也下雨,25%的可能是晴天,25%的可能是多雲。

需要注意以下幾點:

很明顯,這是乙個很簡單的系統,而馬爾科夫模型可以演化成任意規模的複雜系統。事實上,google的page rank演算法也是基於馬爾科夫模型,把**做為節點,入站/出站鏈結作為節點之間的連線。連線某乙個節點的「可能性」(likehood)表示乙個**的相對關注度。也就是說,如果我們的天氣系統表示乙個微型網際網路,那麼「雨天」的頁面等級(page rank)相對比較低,而「多雲」的頁面等級相對比較高。

繼續前面的**演講的例項,分析乙個具體的例項:文字分析與寫作,通過演講內容的結構生成任意長度的(下面的示例中長為100)馬爾科夫鏈組成的句子:

from urllib.request import urlopen

from random import randint

def wordlistsum(wordlist):

sum=0

for word,value in wordlist.items():

sum+=value

return sum

def retrieverandomword(wordlist):

randindex=randint(1,wordlistsum(wordlist))

for word,value in wordlist.items():

randindex-=value

if randindex<0:

return word

def buildworddict(text):

#剔除換行符和引號

text=text.replace("\n"," ")

text=text.replace("\"","")

text=text.replace("--","")

#保證每個標點符號都和前面的單詞在一起

#這樣不會被剔除,保留在馬爾科夫鏈中

punctuation=[',','.',';',':']

for symbol in punctuation:

text=text.replace(symbol," "+symbol+" ")

words=text.split(" ")

#過濾空單詞

words=[word for word in words id word !=""]

worddict={}

for i in range(1,len(words)):

if words[i-1] not in worddict:

#為單詞新建乙個字典

worddict[words[i-1]]={}

if words[i] not in worddict[words[i-1]]:

worddict[words[i-1]][words[i]] = 0

worddict[words[i-1]][words[i]]=worddict[words[i-1]][words[i]]+1

return worddict

text=str(urlopen("").read(),'utf-8')

worddict=buildworddict(text)

#生成鏈長為100的馬爾科夫鏈

length=100

chain=""

currentword="i"

for i in range(0,length):

chain += str(currentword)

currentword=retrieverandomword(worddict[currentword])

print(chain)

對這段**進行分析,buildworddict函式把網上的演講文字字串作為引數,然後對字串做一些清理和格式化處理,去掉引號,把其他標點符號兩端加上空格,這樣就可以對每乙個單詞進行有效的處理。最後,再建立如下所示的二維字典-字典裡有字典:

,

word_e:...}

在這個字典中,「word_a」出現了四次,其中兩次後面跟的單詞是「word_b」,一次是「word_c」,一次是「word_d」。「word_e」出現了七次,其中五次後面跟的是「word_b」,兩次是「word_d」。

如果我們要畫出整個結果的節點模型,那麼「word_a」可能帶有50%的概率箭頭指向「word_b」(四次中出現了兩次),帶25%的概率箭頭指向「word_c」,還有帶25%的箭頭指向「word_d」。

一旦字典建成,不管你現在看到文章的哪個詞,都可以用這個字典作為查詢表來選擇下乙個節點。這個字典的字典是這麼使用的,如果我們現在位於「word_e」節點,那麼下一步就要把字典傳遞到retrieveranddomword。這個函式會按照字典中單詞頻次的權重隨機獲取乙個單詞。先確定乙個隨機的開始詞(例子使用的是「i」),我們可以通過馬爾科夫鏈隨意地重複,生成我們需要的任意長度的句子。

上述例項的執行結果如下,且每次執行的結果會出現不一致:

《Python自然語言處理》

python自然語言處理 基本資訊 出版社 人民郵電出版社 isbn 9787115333681 出版日期 2014 年6月 開本 16開 頁碼 508 版次 1 1 所屬分類 計算機 軟體與程式設計 python 更多關於 python自然語言處理 內容簡介 書籍計算機書籍 自然語言處理 natu...

自然語言處理

自然語言處理主要步驟包括 2.詞法分析 對於英文,有詞頭 詞根 詞尾的拆分,名詞 動詞 形容詞 副詞 介詞的定性,多種詞意的選擇。比如diamond,有菱形 棒球場 鑽石3個含義,要根據應用選擇正確的意思。3.語法分析 通過語法樹或其他演算法,分析主語 謂語 賓語 定語 狀語 補語等句子元素。4.語...

自然語言處理

前言 自然語言處理 natural language processing 是計算科學領域與人工智慧領域中的乙個重要方向。它研究能實現人與計算機之間用自然語言進行有效通訊的各種理論和方法。自然語言處理是一門融語言學 電腦科學 數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言...