用VOSviewer嘗試CNKI中文文獻關鍵詞共現(keyword co-occurence)分析時,你可能會踩到一個大坑。本文幫助你繞開這個坑,或是從坑裡爬出來。
疑惑
在《如何用VOSviewer分析CNKI數據?》一文中,我們提到了如何用VOSviewer可視化分析CNKI文獻。
依照文中的步驟,我們從CNKI下載并導出《圖書情報知識》期刊2016年全年文獻數據,通過Endnote作為中轉,最終導出了VOSviewer可以讀取的RIS文件。
我把這個幾經輾轉得來的RIS文件存放到了這裡,你可以直接下載使用。
利用該數據文件,我們用VOSviewer分析合作者(Co-authorship),做出了這張圖。
有的讀者很興奮,立即打算用同樣的方法,做CNKI中文文獻的關鍵詞共現分析(keyword co-occurence)。
很快,他們就遇到了問題。因為用樣例數據,雖然可以做出分析結果圖,卻是這個樣子的:
圖裡面隻有關鍵詞,沒有任何關鍵詞之間的連接。這叫什麼共現分析?!
有讀者很沮喪地把這幅圖發給了我。問我這是否意味着,VOSviewer不能勝任中文文獻的關鍵詞共現分析?
當然不是。
VOSviewer做的是統計和可視化。對于它來說,中文和英文關鍵詞沒有本質區别。隻要來源數據處理得當,分析的結果都應該是正确的。
那麼問題究竟出在哪裡呢?
原因我們用樣例數據,重新走一遍流程。複現讀者遇到的困境。
VOSviewer主界面裡,我們選擇File -> map -> create,新建一個分析圖。
第一個對話框問我們映射方式。
我們從中選擇第二項。
然後新彈出的對話框會詢問分析源文件的格式。
我們選擇RIS。
下面的對話框,詢問分析類型。默認是合作者分析(Co-authorship)。
我們選擇關鍵詞共現分析(Co-occurence)。
然後VOSviewer詢問我們阈值的選擇。
注意默認的阈值為3,可是這樣隻有3個關鍵詞滿足阈值。最終的圖上如果隻有3個節點,就太稀疏了。于是我們降低阈值到1。
VOSviewer提示我們,通過阈值過濾的關鍵詞有83個。
我們選擇下一步。這時可以看到全部關鍵詞列表。
我們可以從中選擇或者反選關鍵詞做分析。
但是此處别着急進行下一步。我們看到了非常奇異的現象。
注意圖中列表的最後一列,是連接強度,也就是這一行的關鍵詞與其他關鍵詞共同出現的總次數。默認從大到小排列,可是所有的關鍵詞共現次數居然都是0次。
難怪我們點擊下一步的時候,會出現關鍵詞節點間,全無鍊接。
為什麼關鍵詞同時出現次數分析值都是0呢?難道每篇論文隻有1個關鍵詞?關鍵詞之間從來沒有同時出現過?
這不符合常識。
我們發表期刊論文或者寫畢業論文時,一般情況關鍵詞至少也要列出3個吧。
帶着這樣的疑惑,我們就要檢查一下RIS源文件了。
以其中的第一篇《信息素養的曆史與實踐之旅》為例,我們看到關鍵詞一共有3個,分别為“信息素養”、“行動素養”和“行動素養聯盟”。
如何識别它們是關鍵詞呢?
因為前面有個KW -
前綴作為标志。
然而問題來了,我們看到作者信息部分,每個作者名字前,都有AU -
前綴。
AU - G.Zurkowski, Paul
AU - V.Kelly, Jeffrey
AU - 劉千卉
AU - 程璐
可是關鍵詞這裡,除了第一個有KW -
前綴,其他都沒有。
KW - 信息素養
行動素養
行動素養聯盟
會不會是因為這個緣故,導緻合作者分析鍊接正常,而關鍵詞共現分析鍊接消失呢?
我們做個實驗,驗證一下咱們的猜測。
實驗的方法很簡單。我們把第一篇文獻的另外兩個關鍵詞之前,都加上KW -
前綴。其他文獻的關鍵詞不做任何處理。
修改後的RIS文件,就成了這樣子:
我們回到VOSviewer,重新分析。前面的步驟和上一節完全一緻。直至最後一步。
我們非常明顯地對比出,關鍵詞總鍊接強度(Total Link Strength)一項發生了變化,有幾個關鍵詞,不再是0了。
發生改變的這幾個關鍵詞,恰恰是剛才添加過前綴的那幾個。
這個簡單的實驗,驗證了我們的猜測。
并不是VOSviewr的處理能力有缺失,而是中文文獻元數據,經由Endnote導出為RIS格式的時候有纰漏,導緻多關鍵詞的前綴沒有全部正确添加。
效率問題找到了。
下面我們該怎麼辦?
很簡單,把所有關鍵詞的前綴都添上就好了啊。
你可能立即覺得天旋地轉。
把前綴都添上?說得輕巧!
樣例數據裡,文獻有數十篇。一篇篇找關鍵詞,添加前綴,雖然會做個頭暈腦漲,但畢竟還有個盼頭兒。
問題是,要分析的文獻有好幾千篇。都添完的時候,是不是下學期都該開學了?
也沒那麼誇張了。
想想愚公移山,精衛填海……先賢的精神力量還不夠給你以感召嗎?
精神固然要有,但效率也是要追求的。
我們當然不能一條條手動查找關鍵詞并添加前綴,那樣效率太低。我們要用工具來自動化解決這個問題。
好消息是,工具我已經幫你編寫好了。
下面我詳細告訴你,該怎麼使用。
工具我幫你編寫的工具,是個Python腳本。
我們需要安裝Python運行環境Anaconda,來使用這個腳本。
請到這個網址 下載最新版的Anaconda。下拉頁面,找到下載位置。根據你目前使用的系統,網站會自動推薦給你适合的版本下載。我使用的是macOS,下載文件格式為pkg。
下載頁面區左側是Python 3.6版,右側是2.7版。請選擇2.7版本。
雙擊下載後的pkg文件,根據中文提示一步步安裝即可。
安裝好Anaconda後,我們來下載腳本。
我把腳本存儲在了Github項目裡。請從這個位置下載壓縮包。
下載後解壓到本地,這個目錄就是咱們的演示目錄。
請進入終端(macOS或者Linux),用cd命令進入到這個目錄。如果你用的是Windows,請運行Anaconda Prompt程序,并進入該目錄。
下面,請執行以下命令。
python ris-add-kw-prefix.py tsqbzs.ris
如果你要嘗試處理自己的RIS文件,請把它拷貝到這個演示目錄裡面,然後把上面命令語句中最後部分(文件名)改成你自己的RIS文件。
執行後,你會發現目錄下多了一個文件,叫做output.ris。
我們打開這個新生成的RIS文件。
可以看到,所有的未加前綴的關鍵詞,都已經自動添加了前綴。
我們嘗試将這個output.ris輸入到VOSviewer,這次的分析結果列表如下:
這時候再看關鍵詞鍊接數量,就合理多了。
利用這個分析結果來可視化,你會看到以下生成的圖形:
在這個樣例中,我們隻有幾十篇文獻。利用腳本處理前綴,顯得有些大炮轟蚊子。
但如果你需要處理幾千、幾萬篇文獻的記錄信息,用這個腳本也一樣可以瞬間完成操作。效率的差别就體現得淋漓盡緻了。
好了,到這裡為止,你已經了解如何利用咱們編寫的工具,對Endnote導出的中文文獻做關鍵詞處理,在VOSviewer中正确分析關鍵詞共現了。
目标達成。
如果你對原理和技術細節不感興趣,下面就可以跳到小結部分了。
如果你還沒走,我來猜猜你在想什麼。
這麼高效的處理方法,是不是令你感覺不可思議?
老師你的工具至少有300行語句吧?
沒有。
其實程序從頭到尾,隻有20多行。
而其中的核心部分,隻有3行。
老師動用了什麼黑魔法?!
魔法我當然不會魔法。
我們使用的,是計算機最簡單的能力——根據指令,重複執行枯燥勞動。
從第一行開始,依次檢查每一行的文字。如果該行不是空行,而且其中不包含前綴連接符号“-”,那麼我們就将其當成未加前綴的關鍵詞。
我們讓計算機在這行文字的最前面,加上KW -
前綴。
就是這麼簡單,一點也不炫酷。
但是計算機怎麼理解“不是空行”、“不包含符号‘-’”呢?
請看我們Python文件中的核心函數代碼。
def add_kw_prefix(data): regex = r"^([^\-\s] ?)\s $" subst = "KW - \\1" newdata = re.sub(regex, subst, data, 0, re.MULTILINE) return newdata
我們用到的工具,叫做正則表達式(regular expression),簡稱re。
它是計算機處理文本模式的一種經典工具。
我們之前談到機器學習的時候,曾經說過。機器學習模型,是人不知道怎麼描述規則的時候,讓計算機自己學。
而正則表達式,則恰恰相反,是人類可以很準确地描述規則時,為機器定義的模式。
正确定義模式後,計算機就會檢查文本中是否包含這種模式,并且做出對應的處理。
正則表達式的功能非常強大,不過學起來需要花一番功夫。
如果你對正則表達式感興趣,希望自己也能操縱計算機程序,對文本精确地做出模式識别與處理,可以參考DataCamp上的這篇教程來學習。
小結
通過本文,希望你已經了解了以下内容:
VOSviewer可以正确處理中文文獻的關鍵詞共現分析;
CNKI文獻元數據經由Endnote導出成RIS時,關鍵詞處理有瑕疵,需要添加對應前綴;
你可以利用我提供的Python腳本,來快速完成前綴添加工作;
正則表達式的使用,可以有效提升大規模文本模式匹配與處理操作的效率。
用本文的方法,你做出了正确的CNKI文獻關鍵詞共現分析了嗎?在此之前,你是如何處理關鍵詞共現分析的?有沒有什麼更加簡便高效的方法?歡迎留言,把你的經驗和思考分享給大家,我們一起交流讨論。
如果你對我的文章感興趣,歡迎點贊,并且關注我的專欄,以便收到後續作品更新通知。
如果本文可能對你身邊的親友有幫助,也歡迎你把本文通過微博或朋友圈分享給他們。讓他們一起參與到我們的讨論中來。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!