吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2628|回复: 15
收起左侧

[Python 转载] 参考文献编号(可能只适用于本科)

[复制链接]
Zeaf 发表于 2022-4-20 18:42
本帖最后由 Zeaf 于 2022-4-20 18:44 编辑

背景:最近写论文,需要将所有脚注转为尾注,但遇到了重复、排序、分号等问题。
功能:
1.去重
2.按文献类型排序
3.遇到分号自动分割
4.去掉图书文献所包含的页码
代码:
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
"""
Created on Wed Apr 20 16:40:01 2022

@author: Zeaf
"""
import re
with open('test.txt', 'r', encoding='utf8') as f1, open('全部文献.txt', 'w') as f2:
    literatures=f1.readlines()#逐行读取生成列表
    literatures=list(set(literatures))#去重
    books=[]
    journals=[]
    dissertations=[]
    others=[]
    for literature in literatures:#读取每行数据
        literature = literature.strip()#去除空格
        if len(re.findall(';',literature))!=0:#当文献出现分号时
            literature = literature.split(';')
            for x in literature:
                if len(re.findall('\.',x))==0:
                    x=x+'.'
                if len(re.findall('\[\d*?\]',x))!=0:
                    x=x.replace(re.findall('\[\d*?\]',x)[0],'')#去除前缀
                if len(re.findall('【\d*?】',x))!=0:
                    x=x.replace(re.findall('【\d*?】',x)[0],'')#去除前缀
                if len(re.findall('[M]',x))!=0:#书籍归类
                    if len(re.findall('\d.*?:\d',x))!=0:
                        x=x.replace(re.findall(':\d.*',x)[0],'.')
                    books.append(x)
                elif len(re.findall('[J]',x))!=0:#期刊归类
                    journals.append(x)
                elif len(re.findall('[D]',x))!=0:#论文归类
                    dissertations.append(x)
                else:#其他归类
                    others.append(x)     
        else:            
            if len(re.findall('\[\d*?\]',literature))!=0:
                literature=literature.replace(re.findall('\[\d*?\]',literature)[0],'')#去除前缀
            if len(re.findall('【\d*?】',literature))!=0:
                literature=literature.replace(re.findall('【\d*?】',literature)[0],'')#去除前缀
            if len(re.findall('[M]',literature))!=0:#书籍归类
                if len(re.findall('\d.*?:\d',literature))!=0:
                    literature=literature.replace(re.findall(':\d.*',literature)[0],'.')
                books.append(literature)
            elif len(re.findall('[J]',literature))!=0:#期刊归类
                journals.append(literature)
            elif len(re.findall('[D]',literature))!=0:#论文归类
                dissertations.append(literature)
            else:#其他归类
                others.append(literature)
    i=1
    books=list(set(books))#再次去重
    journals=list(set(journals))#再次去重
    dissertations=list(set(dissertations))#再次去重
    others=list(set(others))#再次去重
    literatures=books+journals+dissertations+others#合并整理好的列表
    for literature in literatures:
        f2.write('['+str(i)+'] '+literature+'\n')#写入编号
        i+=1               


打包好的成品:文叔叔https://ws28.cn/f/84fjopq65zr 蓝奏https://zeaf.lanzouq.com/iCpS803i54hi
使用方法:将wps文件内的脚注复制,粘贴入test.txt文件内,然后运行同目录下的exe程序

结果示例如图

BR_0_~TT[U7T`~{Y)DH8[KB.png
CFSOV)[9DN@VLHV]FP23Q)1.png

免费评分

参与人数 1热心值 +1 收起 理由
Elias_ + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Zeaf 发表于 2022-4-21 15:39
2.2版本新增按文献出版日期排序
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 21 12:04:03 2022

@author: Zeaf
"""

import re#导入正则匹配库

def zeaf(books,books_foreign,journals,journals_foreign,dissertations,others,literature):#定义一个整理单条文献的函数
    if len(re.findall('\.',literature))==0:
        literature=literature+'.'
    if len(re.findall('\[\d*?\]',literature))!=0:
        literature=literature.replace(re.findall('\[\d*?\]',literature)[0],'')#去除前缀
    if len(re.findall('【\d*?】',literature))!=0:
        literature=literature.replace(re.findall('【\d*?】',literature)[0],'')#去除前缀
    if len(re.findall('[M]',literature))!=0:#书籍归类
        if len(re.findall('\d.*?:\d',literature))!=0:#英文冒号后去除
            literature=literature.replace(re.findall(':\d.*',literature)[0],'.')
        elif len(re.findall('\d.*?:\d',literature))!=0:#中文冒号后去除
            literature=literature.replace(re.findall(':\d.*',literature)[0],'.')
        if len(re.findall('[A-Za-z][A-Za-z]',literature))!=0:#英文文献分类
            books_foreign.append(literature)
        else:
            books.append(literature)
    elif len(re.findall('[J]',literature))!=0:#期刊归类
        if len(re.findall('[A-Za-z][A-Za-z]',literature))!=0:#英文文献分类
            journals_foreign.append(literature)
        else:
            journals.append(literature)
    elif len(re.findall('[D]',literature))!=0:#论文归类
        dissertations.append(literature)
    else:#其他归类
        others.append(literature)

def date_sorted(literatures):#定义一个日期排序的函数
    newliteratures={}
    datedict={}
    datelist=[]
    sortedliteratures=[]
    for literature in literatures:
        date=re.findall('\d\d\d\d',literature)[0]
        datelist.append(date)
        datedict[literature]=date#创建以文献为key的字典(日期不唯一)
    sorted_datelist=sorted(datelist,reverse=True)#降序排序
    for sorted_date in sorted_datelist:
        lis=[key for key,value in datedict.items() if value==sorted_date]#通过值查找键
        for li in lis:            
            newliteratures[li]=sorted_date#建立排序好的键值对
    for key in newliteratures.keys():
        sortedliteratures.append(key)#遍历键
    return sortedliteratures#返回排序好的键

                       
with open('test.txt', 'r', encoding='utf8') as f1, open('全部文献.txt', 'w') as f2:
    literatures=f1.readlines()#逐行读取生成列表
    literatures=list(set(literatures))#去重
    books=[]
    books_foreign=[]
    journals=[]
    journals_foreign=[]
    dissertations=[]
    others=[]
    for literature in literatures:#读取每行数据
        literature = literature.strip()#去除空格
        if len(re.findall(';',literature))!=0:#当文献出现英文分号时
            literature = literature.split(';')
            literature[-1]=literature[-1][:-1]#去除最后一个文献的句号以统一格式
            for x in literature:
                x=x+'.'#加上句号
                x=x.strip()#去除空格
                zeaf(books,books_foreign,journals,journals_foreign,dissertations,others,x)
        elif len(re.findall(';',literature))!=0:#当文献出现中文分号时
            literature = literature.split(';')
            literature[-1]=literature[-1][:-1]#去除最后一个文献的句号以统一格式
            for x in literature:
                x=x+'.'#加上句号
                x=x.strip()#去除空格
                zeaf(books,books_foreign,journals,journals_foreign,dissertations,others,x)  
        else:            
            zeaf(books,books_foreign,journals,journals_foreign,dissertations,others,literature)
    #图书再处理
    books=list(set(books))#再次去重
    if len(books)!=0:
        books=date_sorted(books)
    #外文图书再处理
    books_foreign=list(set(books_foreign))#再次去重
    if len(books_foreign)!=0:
         books_foreign=date_sorted(books_foreign)
    #期刊再处理
    journals=list(set(journals))#再次去重
    if len(journals)!=0:
         journals=date_sorted(journals)
    #外文期刊再处理
    journals_foreign=list(set(journals_foreign))#再次去重
    if len(journals_foreign)!=0:
         journals_foreign=date_sorted(journals_foreign)
    #论文再处理
    dissertations=list(set(dissertations))#再次去重
    if len(dissertations)!=0:
         dissertations=date_sorted(dissertations)
    #其他再处理
    others=list(set(others))#再次去重
    if len(others)!=0:
         others=date_sorted(others)
    
    literatures=books+books_foreign+journals+journals_foreign+dissertations+others#合并整理好的列表
    i=1
    for literature in literatures:
        f2.write('['+str(i)+'] '+literature+'\n')#写入编号
        i+=1     
       

文叔叔https://ws28.cn/f/84onnxhqo5z
putitree 发表于 2022-4-21 08:09
yisongtang 发表于 2022-4-20 18:59
谷歌学术 可以自动生成 参考文献格式。批量好像不行。

求教,如何登陆谷歌学术,需要“科学”吗
shamshiel 发表于 2022-4-20 18:53
yisongtang 发表于 2022-4-20 18:59
谷歌学术 可以自动生成 参考文献格式。批量好像不行。
hacker922 发表于 2022-4-20 21:14
谷歌学术 NoteExpress软件 都是可以的 硕博用note的比较多
dzqaww 发表于 2022-4-20 21:20
谢谢楼主分享,最近毕业季,写论文。哎。
onpure 发表于 2022-4-20 22:01
谢谢楼主
gallantsa 发表于 2022-4-21 00:45
感谢分享
yisongtang 发表于 2022-4-21 08:24
putitree 发表于 2022-4-21 08:09
求教,如何登陆谷歌学术,需要“科学”吗

需要。百度学术 也可以的。
putitree 发表于 2022-4-21 08:26
yisongtang 发表于 2022-4-21 08:24
需要。百度学术 也可以的。

谢谢,回头试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表