一. 背景目的
上一篇推文可以獲得WOS導出文獻內容,接著就是對文本進行處理。提取出其中的有用信息,比如 作者信息、年份、引用因子、題目等等,同樣繼續用Python處理很方便。
二. 實現方法
2.1 分析需要什麼樣的數據結構
txt 文檔內容可以簡化為如下的文檔結構,每一篇文獻的參數用兩位大寫字母表示。比如,TI 表示文獻的標題,AU表示文獻的作者等等,ER表示到達文獻的末尾,同時文獻與文獻之間用空行分隔!
PJ : YYYYYYAU : XXXXXXTI : MMMMMMAB : ZZZZZZ UT : UUUUUUPM : IIIIIIER
PG : YYYYY真實的文檔結構如下圖所示
如果想提取其中的某些關鍵信息,用正則表達式可以做到。但是作為一個輕微強迫症就想把所有信息都保存下來,然後就可以根據自己的規則隨意調取所需數據,於是我想到了用 list 和 dict 來保存所有數據。
total = [paper1, paper2, paper3]paper = { "AU': "UUUUU", ''' "TI": "TTTT",}整個文件打包成一個list,這樣可以通過切片訪問每一篇文獻,同時具體的文獻信息用dict表示,根據索引 "AU" ,"TI"...等等就可以訪問到其中的內容。
2.2 代碼的實現
這次代碼不多,直接貼在這裡!
def get_doi(file_name): packages = [] package_dict = {} flag = False with open(file_name, 'r', encoding='utf-8') as f: while True: line = f.readline() if line: if line[:2] != 'ER': if line[:2] != ' ': flag = False if not flag: temp_str = '' temp_title = '' temp_title = line[:2] temp_str = line[3:-1] if temp_title != 'AU' else line[3:-1] + ';' package_dict[temp_title] = temp_str elif line[:2] == ' ' and line != '\n': flag = True temp_str += line[2:-1] if temp_title != 'AU' else line[3:-1] + ';' package_dict[temp_title] = temp_str else: packages.append(package_dict) package_dict = {} else: break return packages三. 結果展示
if __name__ == "__main__": file_name = 'LNOI.txt' allpapers = get_doi(file_name) print("total has {} papers".format(len(allpapers))) for index, items in enumerate(allpapers[10:20]): try: doi = items['DI'] print(doi) except Exception : print('no doi')輸出顯示:可以看到成功的列印了第10-19的文獻doi。
四. 後續計劃
將提取出來的數據進行分析,EXCEL?根據DOI爬蟲下載文獻?