Author Net based on DBLP and NetworkX

這幾天花了點時間寫了兩支程式, 作為實驗室內部失敗 task 的小小結案用, 至少還留下一點有趣的東西. 其中一支是會自動以某個 author 為中心 (root author), 到 DBLP, 依據該 root author 的 co-authors 往外延伸抓取 authors 的資料, 以 papers 為主, 會自動遞迴式 ( recursively ) 地進行分析, 換句話說, 會從 root author 到 co-author, 再從 co-author 到 co-author 的 co-author 一直抓下去, 直到形成一個 closure.

很令人驚訝地, 我以 G. C. Murphy 為中心, 居然抓了超過 48 hours 無法得到一個 closure (其中每一個 author page 隔一秒才抓, 避免我的 IP 被 DBLP 給 ban 了), 最後等不完就停掉了, 結果得到超過 20000 個 authors 的資料 XD ( 附帶一提, 中間很無聊地順便抓了所有的 author URLs, 發現 DBLP 到 2007/01/27 為止, 共有 50 萬多的 authors )

資料是利用 SQLite 存起來, 再用 NetworkX 作 visualization, 最後畫了一個比較簡單的圖做實驗. 綠色圓的大小是每個 author 自己的 paper 數量, 黃色的寬度是合作的 paper 數量, 黑色的線就只是表示有合作關係而已. 因為對 NetworkX 還不是很熟析, 所以不知道怎樣把點弄的分布均勻點, 直接改 nodes position 太麻煩了, 應該可以用特定的 layout library 處理.

NetworkX 花了我很多時間, 主要是他 project 內的 pygraphviz 的安裝, 在 Windows 上有很大的問題, 不過後來發現其實 pygraphviz 不一定會用到, 只是少了它很多 library 都不能用就是了. pygraphviz 的安裝需要 compile 它的一個 python extension, 但是因為我用 python 2.4.3, 是用 VC++ 7.1 (VS.net 2003) 去 compile 的, 因此需要準備 VC++ 7.1, 這就已經很麻煩了(因為 MS 現在不提供下載了, VC++ express 2005 在此不能取代使用), 加上即便有 VC++ 7.1 後, Graphviz 的 agraph.lib 還是會出現 symbols 找不到的情況, 在 NetworkX 的論壇上也是有人有一樣的問題, 但是無解. 我在猜想可能跟編譯 Graphviz 的 VC++ 版本有關, 所以或許在 Windows 上用 VC++ 7.1 重新編譯 Graphviz 可以解決此問題, 不過因為我已花了超過三個小時在此問題, 同時後來發現其實不用 pygraphviz 也大略可以達到我想要的效果, 所以就不管這問題了. 對於還是想 try 的人, 建議不要了, 改用 linux 比較實際.

除去以上的麻煩不談, NetworkX 還蠻好用的, 但是他把 node 的 position 與 node 分開管理的作法讓我有點不解, 雖然說利用 dictionary key 可以輕鬆取得 mapping, 但是把 position 作為 node 的 data 讓 node 管理不是比較直覺嗎 ? 恩...持續使用後再看看是怎麼一回事吧.

0 意見:

Designed by Posicionamiento Web | Modified by seLain | Bloggerized by GosuBlogger | Blue Business Blogger