将导入citespace的refworks格式和wos导出的txt文件转换为xlsx格式

 WOS的txt文件转换

import pandas as pd

# 定义有效的标签列表
VALID_TAGS = ['PT', 'AU', 'AF', 'TI', 'SO', 'LA', 'DT', 'DE', 'ID', 'AB', 'C1', 'C3', 'RP', 'EM', 'RI', 'CR', 'NR', 'TC', 'Z9', 'U1', 'U2', 'PU', 'PI', 'PA', 'SN', 'EI', 'J9', 'JI', 'PD', 'PY', 'VL', 'IS', 'SU', 'BP', 'EP', 'DI', 'PG', 'WC', 'WE', 'SC', 'GA', 'UT', 'PM', 'DA', 'ER']

def extract_info(text):
    records = []
    current_record = {}
    current_tag = None

    lines = text.splitlines()
    for line in lines:
        # 检查行首是否无空格
        if line and not line.startswith(" "):
            line = line.strip()
            if line == 'ER':
                # 一条记录结束,添加到记录列表中
                records.append(current_record)
                current_record = {}
                current_tag = None
                continue

            # 检查行首是否为大写字母开头,第二个字符为大写字母或数字,第三个字符为空格
            if len(line) >= 3 and line[0].isupper() and (line[1].isupper() or line[1].isdigit()) and line[2] == " ":
                tag = line[:3].strip()
                if tag in VALID_TAGS:
                    info = line[3:].strip()
                    current_tag = tag
                    if tag in current_record:
                        if isinstance(current_record[tag], list):
                            current_record[tag].append(info)
                        else:
                            current_record[tag] = [current_record[tag], info]
                    else:
                        current_record[tag] = info
            elif line and current_tag:
                # 无标签行,追加到当前标签的信息中
                if isinstance(current_record[current_tag], list):
                    current_record[current_tag][-1] += " " + line
                else:
                    current_record[current_tag] += " " + line

    return records


# 从文件中读取文本内容
file_path = r"input.txt"
try:
    with open(file_path, 'r', encoding='utf-8') as file:
        text = file.read()
except FileNotFoundError:
    print(f"文件 {file_path} 未找到,请检查文件路径是否正确。")
else:
    # 提取信息
    result = extract_info(text)

    # 转换为 DataFrame 查看
    df = pd.DataFrame(result)
    print(df)

    # 保存为 Excel 文件
    output_path = r"output.xlsx"
    df.to_excel(output_path, index=False)
    print(f"数据已成功保存到 {output_path}")

保存表格如下

CNKI的Refworks文件转换
 

import pandas as pd

# 定义文件路径
file_path = r"input.txt"
output_path = r"output.xlsx"

# 读取文件内容
with open(file_path, 'r', encoding='utf-8') as file:
    content = file.read()

# 分割不同文章
articles = content.split('\n\n')

# 定义标签
labels = ['RT', 'SR', 'A1', 'AD', 'T1', 'JF', 'YR', 'IS', 'vo', 'OP', 'K1', 'AB', 'SN', 'CN', 'LA', 'DS', 'LK', 'DO']

# 存储每篇文章的数据
data = []
for article in articles:
    article_data = {label: None for label in labels}
    lines = article.strip().split('\n')
    for line in lines:
        line = line.strip()
        if line:
            parts = line.split(' ', 1)
            if len(parts) == 2:
                label, value = parts
                label = label.strip()
                value = value.strip()
                if label in labels:
                    article_data[label] = value

    data.append(article_data)

# 创建 DataFrame
df = pd.DataFrame(data, columns=labels)

# 导出为 Excel 文件
df.to_excel(output_path, index=False)

将JSON数据转换为CiteSpace可以处理的格式通常需要几个步骤,因为CiteSpace主要用于文献计量分析,并不是直接支持JSON文件导入。一般情况下,你需要把JSON转化为CSV或其他适合的形式。 ### 步骤一:解析 JSON 数据 首先从API或者其他来源获取到的原始JSON数据可能是字符串形式或者是已经加载成字典、列表等结构化的Python对象(如果你是在用Python)。如果是一个字符串,你可以先将其解析: ```python import json json_string = '{"key": "value"}' data = json.loads(json_string) # 如果是从文件读取则是 data = json.load(file_object) ``` 对于一个已有的 Python 字典 `data` ,则不需要额外操作。 ### 步骤二:提取所需字段并整理 根据你要可视化的信息选择合适的属性,例如作者名、文章标题、发表年份等等。这一步取决于你想让 CiteSpace 分析的内容以及你的 JSON 数据的具体结构。假设我们有如下简化版学术论文数据库: ```json [ {"id":"1","title":"Title A", "year":2020,"author":["A"]}, {"id":"2","title":"Title B", "year":2021,"author":["B"]} ] ``` 我们可以遍历此列表并将每篇文献的相关元数据保存下来: ```python papers_list = [] for item in data: paper_info = { 'ID':item['id'], 'TI':item.get('title',''), # TI代表题目(Title),get()第二个参数是默认值用于防止缺失键的情况发生 'PY':str(item.get('year','')), 'AU':';'.join(item.get('author',[])) # AU表示作者姓名(Author), join()函数用来连接列表元素形成单个字符串 } papers_list.append(paper_info) ``` 这里我们将每个文档的信息按照特定规则组合成了一个新的字典列表 `papers_list` 。其中使用了CiteSpace所期望的一些列标识符如'TI'(标题),'PY'(出版年份)等。 ### 步骤三:写出 CSV 文件供CiteSpace 使用 最后我们需要创建一个 .csv 或者 .txt 格式的文本文件,它应该包含所有必要的字段作为表头并且每一行对应一条记录。 ```python keys = ['ID', 'TI', 'PY', 'AU'] # 这里只列举了一部分可能的关键字 with open("output.csv", mode='w', newline='', encoding="utf8") as file: writer = csv.DictWriter(file, fieldnames=keys) writer.writeheader() for row in papers_list: writer.writerow(row) print("File has been successfully created.") ``` 上面代码段会生成名为 output.csv 的新文件,在这个例子中它的内容将会像这样: | ID | TI | PY | AU | |----|----------|--------|---------| | 1 | Title A | 2020 | A | | 2 | Title B | 2021 | B | 然后就可以把这个CSV文件输入给CiteSpace来进行进一步的数据可视化研究啦! 希望这对您有所帮助!如果您还有其他疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值