用VOSviewer嘗試CNKI中文文獻(xiàn)關(guān)鍵詞共現(xiàn)(keyword co-occurence)分析時镣丑,你可能會踩到一個大坑。本文幫助你繞開這個坑娱两,或是從坑里爬出來莺匠。
疑惑
在《如何用VOSviewer分析CNKI數(shù)據(jù)?》一文中十兢,我們提到了如何用VOSviewer可視化分析CNKI文獻(xiàn)趣竣。
依照文中的步驟,我們從CNKI下載并導(dǎo)出《圖書情報(bào)知識》期刊2016年全年文獻(xiàn)數(shù)據(jù)旱物,通過Endnote作為中轉(zhuǎn)遥缕,最終導(dǎo)出了VOSviewer可以讀取的RIS文件。
我把這個幾經(jīng)輾轉(zhuǎn)得來的RIS文件存放到了這里宵呛,你可以直接下載使用单匣。
利用該數(shù)據(jù)文件,我們用VOSviewer分析合作者(Co-authorship)宝穗,做出了這張圖户秤。
有的讀者很興奮,立即打算用同樣的方法逮矛,做CNKI中文文獻(xiàn)的關(guān)鍵詞共現(xiàn)分析(keyword co-occurence)鸡号。
很快,他們就遇到了問題橱鹏。因?yàn)橛脴永龜?shù)據(jù)膜蠢,雖然可以做出分析結(jié)果圖堪藐,卻是這個樣子的:
圖里面只有關(guān)鍵詞莉兰,沒有任何關(guān)鍵詞之間的連接。這叫什么共現(xiàn)分析礁竞?糖荒!
有讀者很沮喪地把這幅圖發(fā)給了我。問我這是否意味著模捂,VOSviewer不能勝任中文文獻(xiàn)的關(guān)鍵詞共現(xiàn)分析捶朵?
當(dāng)然不是蜘矢。
VOSviewer做的是統(tǒng)計(jì)和可視化。對于它來說综看,中文和英文關(guān)鍵詞沒有本質(zhì)區(qū)別品腹。只要來源數(shù)據(jù)處理得當(dāng),分析的結(jié)果都應(yīng)該是正確的红碑。
那么問題究竟出在哪里呢舞吭?
原因
我們用樣例數(shù)據(jù),重新走一遍流程析珊。復(fù)現(xiàn)讀者遇到的困境羡鸥。
VOSviewer主界面里,我們選擇File -> map -> create忠寻,新建一個分析圖惧浴。
第一個對話框問我們映射方式。
我們從中選擇第二項(xiàng)奕剃。
然后新彈出的對話框會詢問分析源文件的格式衷旅。
我們選擇RIS。
下面的對話框纵朋,詢問分析類型芜茵。默認(rèn)是合作者分析(Co-authorship)。
我們選擇關(guān)鍵詞共現(xiàn)分析(Co-occurence)倡蝙。
然后VOSviewer詢問我們閾值的選擇九串。
注意默認(rèn)的閾值為3,可是這樣只有3個關(guān)鍵詞滿足閾值寺鸥。最終的圖上如果只有3個節(jié)點(diǎn)猪钮,就太稀疏了。于是我們降低閾值到1胆建。
VOSviewer提示我們烤低,通過閾值過濾的關(guān)鍵詞有83個。
我們選擇下一步笆载。這時可以看到全部關(guān)鍵詞列表扑馁。
我們可以從中選擇或者反選關(guān)鍵詞做分析。
但是此處別著急進(jìn)行下一步凉驻。我們看到了非常奇異的現(xiàn)象腻要。
注意圖中列表的最后一列,是連接強(qiáng)度涝登,也就是這一行的關(guān)鍵詞與其他關(guān)鍵詞共同出現(xiàn)的總次數(shù)雄家。默認(rèn)從大到小排列,可是所有的關(guān)鍵詞共現(xiàn)次數(shù)居然都是0次胀滚。
難怪我們點(diǎn)擊下一步的時候趟济,會出現(xiàn)關(guān)鍵詞節(jié)點(diǎn)間乱投,全無鏈接。
為什么關(guān)鍵詞同時出現(xiàn)次數(shù)分析值都是0呢顷编?難道每篇論文只有1個關(guān)鍵詞戚炫?關(guān)鍵詞之間從來沒有同時出現(xiàn)過?
這不符合常識媳纬。
我們發(fā)表期刊論文或者寫畢業(yè)論文時嘹悼,一般情況關(guān)鍵詞至少也要列出3個吧。
帶著這樣的疑惑层宫,我們就要檢查一下RIS源文件了杨伙。
以其中的第一篇《信息素養(yǎng)的歷史與實(shí)踐之旅》為例,我們看到關(guān)鍵詞一共有3個萌腿,分別為“信息素養(yǎng)”限匣、“行動素養(yǎng)”和“行動素養(yǎng)聯(lián)盟”。
如何識別它們是關(guān)鍵詞呢毁菱?
因?yàn)榍懊嬗袀€KW -
前綴作為標(biāo)志米死。
然而問題來了,我們看到作者信息部分贮庞,每個作者名字前峦筒,都有AU -
前綴。
AU - G.Zurkowski, Paul
AU - V.Kelly, Jeffrey
AU - 劉千卉
AU - 程璐
可是關(guān)鍵詞這里窗慎,除了第一個有KW -
前綴物喷,其他都沒有。
KW - 信息素養(yǎng)
行動素養(yǎng)
行動素養(yǎng)聯(lián)盟
會不會是因?yàn)檫@個緣故遮斥,導(dǎo)致合作者分析鏈接正常峦失,而關(guān)鍵詞共現(xiàn)分析鏈接消失呢?
我們做個實(shí)驗(yàn)术吗,驗(yàn)證一下咱們的猜測尉辑。
實(shí)驗(yàn)的方法很簡單。我們把第一篇文獻(xiàn)的另外兩個關(guān)鍵詞之前较屿,都加上KW -
前綴隧魄。其他文獻(xiàn)的關(guān)鍵詞不做任何處理。
修改后的RIS文件隘蝎,就成了這樣子:
我們回到VOSviewer购啄,重新分析。前面的步驟和上一節(jié)完全一致末贾。直至最后一步闸溃。
我們非常明顯地對比出整吆,關(guān)鍵詞總鏈接強(qiáng)度(Total Link Strength)一項(xiàng)發(fā)生了變化拱撵,有幾個關(guān)鍵詞辉川,不再是0了。
發(fā)生改變的這幾個關(guān)鍵詞拴测,恰恰是剛才添加過前綴的那幾個乓旗。
這個簡單的實(shí)驗(yàn),驗(yàn)證了我們的猜測集索。
并不是VOSviewr的處理能力有缺失屿愚,而是中文文獻(xiàn)元數(shù)據(jù),經(jīng)由Endnote導(dǎo)出為RIS格式的時候有紕漏务荆,導(dǎo)致多關(guān)鍵詞的前綴沒有全部正確添加妆距。
效率
問題找到了。
下面我們該怎么辦函匕?
很簡單娱据,把所有關(guān)鍵詞的前綴都添上就好了啊。
你可能立即覺得天旋地轉(zhuǎn)盅惜。
把前綴都添上中剩?說得輕巧!
樣例數(shù)據(jù)里抒寂,文獻(xiàn)有數(shù)十篇结啼。一篇篇找關(guān)鍵詞,添加前綴屈芜,雖然會做個頭暈?zāi)X漲郊愧,但畢竟還有個盼頭兒。
問題是井佑,要分析的文獻(xiàn)有好幾千篇糕珊。都添完的時候,是不是下學(xué)期都該開學(xué)了毅糟?
也沒那么夸張了红选。
想想愚公移山,精衛(wèi)填耗妨恚……先賢的精神力量還不夠給你以感召嗎喇肋?
精神固然要有,但效率也是要追求的迹辐。
我們當(dāng)然不能一條條手動查找關(guān)鍵詞并添加前綴蝶防,那樣效率太低。我們要用工具來自動化解決這個問題明吩。
好消息是间学,工具我已經(jīng)幫你編寫好了。
下面我詳細(xì)告訴你,該怎么使用低葫。
工具
我?guī)湍憔帉懙墓ぞ呦晗郏莻€Python腳本。
我們需要安裝Python運(yùn)行環(huán)境Anaconda嘿悬,來使用這個腳本实柠。
請到這個網(wǎng)址 下載最新版的Anaconda。下拉頁面善涨,找到下載位置窒盐。根據(jù)你目前使用的系統(tǒng),網(wǎng)站會自動推薦給你適合的版本下載钢拧。我使用的是macOS蟹漓,下載文件格式為pkg。
下載頁面區(qū)左側(cè)是Python 3.6版源内,右側(cè)是2.7版牧牢。請選擇2.7版本。
雙擊下載后的pkg文件姿锭,根據(jù)中文提示一步步安裝即可塔鳍。
安裝好Anaconda后,我們來下載腳本呻此。
我把腳本存儲在了Github項(xiàng)目里轮纫。請從這個位置下載壓縮包。
下載后解壓到本地焚鲜,這個目錄就是咱們的演示目錄掌唾。
請進(jìn)入終端(macOS或者Linux),用cd命令進(jìn)入到這個目錄忿磅。如果你用的是Windows糯彬,請運(yùn)行Anaconda Prompt程序,并進(jìn)入該目錄葱她。
下面撩扒,請執(zhí)行以下命令。
python ris-add-kw-prefix.py tsqbzs.ris
如果你要嘗試處理自己的RIS文件吨些,請把它拷貝到這個演示目錄里面搓谆,然后把上面命令語句中最后部分(文件名)改成你自己的RIS文件。
執(zhí)行后豪墅,你會發(fā)現(xiàn)目錄下多了一個文件泉手,叫做output.ris。
我們打開這個新生成的RIS文件偶器。
可以看到斩萌,所有的未加前綴的關(guān)鍵詞缝裤,都已經(jīng)自動添加了前綴。
我們嘗試將這個output.ris輸入到VOSviewer颊郎,這次的分析結(jié)果列表如下:
這時候再看關(guān)鍵詞鏈接數(shù)量憋飞,就合理多了。
利用這個分析結(jié)果來可視化袭艺,你會看到以下生成的圖形:
在這個樣例中搀崭,我們只有幾十篇文獻(xiàn)叨粘。利用腳本處理前綴猾编,顯得有些大炮轟蚊子。
但如果你需要處理幾千升敲、幾萬篇文獻(xiàn)的記錄信息答倡,用這個腳本也一樣可以瞬間完成操作。效率的差別就體現(xiàn)得淋漓盡致了驴党。
好了瘪撇,到這里為止,你已經(jīng)了解如何利用咱們編寫的工具港庄,對Endnote導(dǎo)出的中文文獻(xiàn)做關(guān)鍵詞處理倔既,在VOSviewer中正確分析關(guān)鍵詞共現(xiàn)了。
目標(biāo)達(dá)成鹏氧。
如果你對原理和技術(shù)細(xì)節(jié)不感興趣渤涌,下面就可以跳到小結(jié)部分了。
如果你還沒走把还,我來猜猜你在想什么实蓬。
這么高效的處理方法,是不是令你感覺不可思議吊履?
老師你的工具至少有300行語句吧安皱?
沒有。
其實(shí)程序從頭到尾艇炎,只有20多行酌伊。
而其中的核心部分,只有3行缀踪。
老師動用了什么黑魔法腺晾?!
魔法
我當(dāng)然不會魔法辜贵。
我們使用的悯蝉,是計(jì)算機(jī)最簡單的能力——根據(jù)指令,重復(fù)執(zhí)行枯燥勞動托慨。
從第一行開始鼻由,依次檢查每一行的文字。如果該行不是空行,而且其中不包含前綴連接符號“-”蕉世,那么我們就將其當(dāng)成未加前綴的關(guān)鍵詞蔼紧。
我們讓計(jì)算機(jī)在這行文字的最前面,加上KW -
前綴狠轻。
就是這么簡單奸例,一點(diǎn)也不炫酷。
但是計(jì)算機(jī)怎么理解“不是空行”向楼、“不包含符號‘-’”呢查吊?
請看我們Python文件中的核心函數(shù)代碼。
def add_kw_prefix(data):
regex = r"^([^\-\s]+?)\s+$"
subst = "KW - \\1"
newdata = re.sub(regex, subst, data, 0, re.MULTILINE)
return newdata
我們用到的工具湖蜕,叫做正則表達(dá)式(regular expression)逻卖,簡稱re。
它是計(jì)算機(jī)處理文本模式的一種經(jīng)典工具昭抒。
我們之前談到機(jī)器學(xué)習(xí)的時候评也,曾經(jīng)說過。機(jī)器學(xué)習(xí)模型灭返,是人不知道怎么描述規(guī)則的時候盗迟,讓計(jì)算機(jī)自己學(xué)。
而正則表達(dá)式熙含,則恰恰相反罚缕,是人類可以很準(zhǔn)確地描述規(guī)則時,為機(jī)器定義的模式婆芦。
正確定義模式后怕磨,計(jì)算機(jī)就會檢查文本中是否包含這種模式,并且做出對應(yīng)的處理消约。
正則表達(dá)式的功能非常強(qiáng)大肠鲫,不過學(xué)起來需要花一番功夫。
如果你對正則表達(dá)式感興趣或粮,希望自己也能操縱計(jì)算機(jī)程序导饲,對文本精確地做出模式識別與處理,可以參考DataCamp上的這篇教程來學(xué)習(xí)氯材。
小結(jié)
通過本文渣锦,希望你已經(jīng)了解了以下內(nèi)容:
- VOSviewer可以正確處理中文文獻(xiàn)的關(guān)鍵詞共現(xiàn)分析;
- CNKI文獻(xiàn)元數(shù)據(jù)經(jīng)由Endnote導(dǎo)出成RIS時氢哮,關(guān)鍵詞處理有瑕疵袋毙,需要添加對應(yīng)前綴;
- 你可以利用我提供的Python腳本冗尤,來快速完成前綴添加工作听盖;
- 正則表達(dá)式的使用胀溺,可以有效提升大規(guī)模文本模式匹配與處理操作的效率。
討論
用本文的方法皆看,你做出了正確的CNKI文獻(xiàn)關(guān)鍵詞共現(xiàn)分析了嗎仓坞?在此之前,你是如何處理關(guān)鍵詞共現(xiàn)分析的腰吟?有沒有什么更加簡便高效的方法无埃?歡迎留言,把你的經(jīng)驗(yàn)和思考分享給大家毛雇,我們一起交流討論嫉称。
如果你對我的文章感興趣,歡迎點(diǎn)贊禾乘,并且關(guān)注我的專欄澎埠,以便收到后續(xù)作品更新通知虽缕。
如果本文可能對你身邊的親友有幫助始藕,也歡迎你把本文通過微博或朋友圈分享給他們。讓他們一起參與到我們的討論中來氮趋。