2015-05-23 105 views
0

我用beautifulsoup抓取了一些數據,並保存爲.txt文件。 IMDB.com的數據是電影評論 我發現了一個很好的字數統計python代碼,所以我可以做一個詞頻excel表。但是,我不能僅使用頻率表來繪製圖形。用於UCINET網絡圖形繪製的Python代碼

我想用UCINET 繪製語義網絡圖(應根據中介中心節點的大小。)

我的問題是如何使文本文件導入鄰接矩陣的數據繪製圖形UCINET。 這樣http://www.umasocialmedia.com/socialnetworks/wp-content/uploads/2012/09/senatorsxsenators1.png 我想使用評論者使用的詞來繪製網絡圖。

(計算頻率,如果兩個詞在同一個句子來了,當他們匹配的行和列線)

或者。你能告訴我如何在Python代碼中繪製網絡圖(使用中間性中心)?

+0

你在這種情況下定義爲「鄰接」是什麼?你的問題不清楚。 – JDong

+0

@JDong我很抱歉我英語能力差。審稿人寫這句話。 「X戰警非常棒」。有20x20矩陣。第二排是「X戰警」,第四欄是「超棒」。如果數據中有「X-Men is awsome」,則矩陣中的(2,4)將加1個頻率。 – Rejeena

+0

只是爲了確認,你的鄰接矩陣是對稱的,因爲你有一個無向圖,對嗎? – JDong

回答

1

使一個2D 20×20陣列,循環通過每個輸入字符串,以及使用該字符串更新矩陣:

adjacency_matrix = [[0 for _ in range(20)] for _ in range(20)] 


def get_lines(filename): 
    """Returns the lines in the file""" 
    with open(filename, 'r') as fp: 
     return fp.readlines() 


def update_matrix(matrix, mapping, string): 
    """Update the given adjacency matrix using the given string."""           
    words = [_ for _ in re.split("\s+", string) if _ in mapping.keys()]    
    for word_1 in words:               
     for word_2 in words:              
      matrix[mapping[word_1]][mapping[word_2]] += 1 


if __name__ == "__main__": 
    words_in_matrix = ["X-men", "awesome", "good", "bad", ... 16 more ...] 
    mapping = {word: index for index, word in enumerate(words_in_matrix)} 

    for line in get_lines("ibdb.txt"): 
     update_matrix(adjacency_matrix, mapping, line) 
    print(adjacency_matrix) 

類似於update_matrix一個函數可能是有用的,以matrix作爲鄰接矩陣,mapping一個將詞語映射到鄰接矩陣中的索引,以及string您的示例評論。

您需要根據需要進行修改。輸入可能有周期或其他噪聲字符,這些字符需要被去除。

+0

哦...非常感謝你的回答。但是,我是一名Python初學者。我不知道如何在我的數據中應用您的代碼。我的數據是包含超過100條評論的文本文件,其中包含超過10行的文本。 – Rejeena

+0

教學python的基礎知識不在這個問題的範圍內,對不起。不過,我會爲您提供更多示例代碼,以便您開始使用。 – JDong

+0

哇。謝謝。在你的例子中,什麼是'X-men':0?如果有「X人真棒」這樣的句子,那麼'X-men'字不是'1'嗎? – Rejeena