这个脚本是我要完成特定任务而写的,可以提高我的科研效率,如果你是python语言的爱好者,或者是多标签分类的研究生,获取会有一点启示。但说实话,这个任务太具体,不具有普遍性,如果没有具体的正确格式文件,甚至很难跑通,所以不要抱有太大的希望,如果只是感兴趣,倒是还行,我的目的仅是为我以后的查阅而已。

代码如下

#! /usr/bin/python
# coding=utf-8

# 此脚本的功能是:将idea生成的词向量自动生成相应的arff文件和xml文件
# #   步骤是:  1. 去除词向量中的 '['  ']'  和 ','
# #           2. 将词向量与标签拼接
# #           3. 写arff文件和xml文件

# 这个脚本使用的时候需注意: 1.修改三个参数即可: min_dimension、max_dimension、size(具体意义看注释)
#                       2.目录文件需清空(这两个文件为该脚本的输出):/root/多标签分类实验文件/词向量+标签组成的记录/中英文、数字和.和
#                                                           /root/多标签分类实验文件/arff和xml文件/中英文、数字和.
#                       3.该脚本输入为词向量,文件目录为:/root/多标签分类实验文件/词向量文件/中英文、数字和.
#                                          这个文件一定要注意文件名的格式正确,内容格式正确,该文件来源于spark word2vec

import re

import time

import sys

min_dimension = 10  # 词向量最小维数
max_dimension = 850  # 词向量最大维数
size = 10  # 词向量维数间隔
global_x = min_dimension  # 写arff文件和xml文件的迭代索引(从最小维数到最大维数)
label_count = 70  # 标签个数

my_pattern1 = re.compile("[\[\]]")
my_pattern2 = re.compile("[,]")

# 缓冲区
buf1 = []  # 词频信息去掉数字.txt
buf2 = []  # 校对替换终2#.txt
buf3 = []  # 词向量txt文件

# i加的数,即i = i + number
def add():
    global global_x
    global_x += size

start_time = str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
print(start_time + "------开始步骤一和步骤二......")
# -----------------------------------------------分割线--------------------------------------------------------------
while global_x <= max_dimension:
    # 1.去除词向量中的 '['  ']'  和 ','
    time.sleep(1)
    print('......')
    time.sleep(2)
    print('......')
    time.sleep(0.5)
    print('......')
    time.sleep(0.2)
    print('......')
    print('处理中。。请不要关闭')

    # ----------------------------------------------------------------分割线----------------------------------------------------
    # 2.将词向量与标签拼接
    term_fre_file = open('/root/多标签分类实验文件/拼接标签用到的文件/词频信息去掉数字.txt', 'r')
    term_place_file = open('/root/多标签分类实验文件/拼接标签用到的文件/校对替换终2#.txt', 'r')
    term_file = open('/root/多标签分类实验文件/词向量文件/中英文、数字和./1-11303词向量1_没有符号' + str(global_x) + '.txt', 'r')
    result_file = open('/root/多标签分类实验文件/词向量+标签组成的记录/中英文、数字和./1-11303词向量+标签1_没有符号' + str(global_x) + '.txt', 'a')

    for data in term_fre_file.readlines():
        buf1.append(data)
    for data in term_place_file.readlines():
        buf2.append(data)
    for data in term_file.readlines():
        result = my_pattern2.sub(' ', my_pattern1.sub('', str(data).strip()))
        buf3.append(result)
    term_fre_file.close()
    term_place_file.close()
    term_file.close()

    for x in range(0, len(buf2)):
        ss = str(buf2[x])[7:].split(' ')
        sss = buf3[x]
        for y in range(0, label_count):
            s = '0'
            for z in range(len(ss)):
                if str(ss[z]).strip() == str(buf1[y]).strip():
                    s = '1'
            temp = ' ' + s
            sss += temp
        if x != len(buf2) - 1:
            result_file.write(sss + '\n')
        else:
            result_file.write(sss)
    result_file.flush()
    result_file.close()
    buf1.clear()
    buf2.clear()
    buf3.clear()
    print(global_x)
    add()

global_x = min_dimension
time.sleep(5)


print("步骤一和步骤二完成.......")
time.sleep(5)
print("开始步骤三.......")
time.sleep(5)  # 保证文件前面的文件写完
print('处理中。。请不要关闭')
time.sleep(2)
# --------------------------------------------------------------分割线-----------------------------------------------------------------
# 3.写arff文件和xml文件
while global_x <= max_dimension:
    # save_arff_file = open('/root/eclipse-workspace/mulan/' + str(i) + '-' + str(label_count) + '再除噪_没有符号.arff', 'a')
    save_arff_file = open('/root/多标签分类实验文件/arff和xml文件/中英文、数字和./' + str(global_x) + '-' + str(label_count) + '再除噪_没有符号.arff', 'a')
    # save_xml_file = open('/root/eclipse-workspace/mulan/' + str(i) + '-' + str(label_count) + '再除噪_没有符号.xml', 'a')
    save_xml_file = open('/root/多标签分类实验文件/arff和xml文件/中英文、数字和./' + str(global_x) + '-' + str(label_count) + '再除噪_没有符号.xml', 'a')

    # --------------开始写arff文件------------------------------------------------------------------
    save_arff_file.write("@relation Mymedical\n\n")

    for x in range(1, global_x + 1):
        save_arff_file.write("@attribute feature_" + str(x) + " numeric\n")

    for y in range(1, label_count + 1):
        save_arff_file.write('@attribute label_' + str(y) + ' {0,1}\n')
    save_arff_file.write('\n')
    save_arff_file.write('@data\n')

    # 数据部分文件路径
    src_file_path = '/root/多标签分类实验文件/词向量+标签组成的记录/中英文、数字和./1-11303词向量+标签1_没有符号' + str(global_x) + '.txt'
    data_file = open(src_file_path, 'r')
    for data_line in data_file.readlines():
        save_arff_file.write(str(data_line))
    data_file.close()
    save_arff_file.flush()
    save_arff_file.close()

    # --------------开始写xml文件-------------------------------------------------------------------
    save_xml_file.write('''<?xml version="1.0" encoding="utf-8"?>\n<labels xmlns="http://mulan.sourceforge.net/labels">\n''')
    for z in range(1, label_count + 1):
        save_xml_file.write('''    <label name="label_''' + str(z) + '''"></label>\n''')
    save_xml_file.write('</labels>')
    save_xml_file.flush()
    save_xml_file.close()

    add()

end_time = str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
print(end_time + '任务完成')
year = int(end_time[:4]) - int(start_time[:4])
month = int(end_time[5:7]) - int(start_time[5:7])
day = int(end_time[8:10]) - int(start_time[8:10])
hour = int(end_time[11:13]) - int(start_time[11:13])
minitue = int(end_time[14:16]) - int(start_time[14:16])
second = int(end_time[17:]) - int(start_time[17:])
if second < 0:
    second = 60 - second
    minitue = minitue - 1
if minitue < 0:
    minitue = 60 - minitue
    hour = hour - 1
print('共用时:' + str(year) + '年 ' + str(month) + '月 ' + str(day) + '日 '
      + str(hour) + '时 ' + str(minitue) +  '分 ' + str(second) + '秒')
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐