zoukankan      html  css  js  c++  java
  • 代码16

    需要将cs文件中同一个intend下所有的query构造成a.toks和b.toks用于寻找相同intend却分数很低的句子对

    最原始的做法,有30个intend,写一个代码把每个intend从文件中切分出来形成新的文件,然后再写一个代码对每个文件再进行处理,这样的方法很愚蠢,需要很多人工操作,并且还要生成新的文件,并且要写两个代码。如果对于工程来说这种方式是不允许的

    每个intend的处理代码:

    f = open('/home/xbwang/Desktop/cs_update30','r')
    num = 0
    line = f.readline()
    while True:
        if line[0] == 'Q':
            num = num+1
        elif line[0] == 'R':
            break
        line = f.readline()
    print num
    num1 = num
    f1 = open('/home/xbwang/Desktop/cs_update30','r')
    f1.readline()
    num = num -1
    epoch = num
    for i in range(epoch):
        row = f1.readline()[2:]*num
        num = num-1
        #print row
        f2 = open('/home/xbwang/Desktop/a.toks','a')
        f2.write(row)
    f3 =  open('/home/xbwang/Desktop/cs_update30','r')
    aline = f3.readlines()
    #a = aline[num-37:42]
    #print a
    num1 = num1-1
    for j  in range(num1):
        #a1 = aline[num-37:42]
        a = aline[2+j:num1+2]
        #print a1
        for k in a:
            k1 = k[2:]    
            f4 = open('/home/xbwang/Desktop/b.toks','a')
            f4.write(k1)

    简便方法,无需将每个intend保存到文件,只需要保存到列表,然后对列表进行操作就可实现任务。以下是生成列表部分的代码,后续只要将intend处理代码稍作改动加入这段代码后面就可以实现整个功能:

    f = open('/home/xbwang/Desktop/same-intend/cs_update','r')
    same = []
    num = 0
    for line in f:
        if(line[0] == 'I'):
            num = num+1
    f1 = open('/home/xbwang/Desktop/same-intend/cs_update','r')
    line1 = f1.readline()
    partsame = []
    for i in range(num):
        line1 = f1.readline()
        while line1:
            if(line1[0] == 'I'):
                break
            elif(line1[0] == 'Q'):
                partsame.append(line1)
                line1 = f1.readline()
            else:
                line1 = f1.readline()
        same.append(partsame)
        partsame = []

    以上这个代码要注意以下几点:

                  1.改变一个列表有两种方式,一种是append函数,一种是same[i]=xxx。开始我写这个代码的时候,same初始化为same = [ ],然后用来for i in range(): same[i] = .....,这个时候会报数组越界的错误。实际上,same为空列表,是没有下标的,你可以append加元素进空列表,却不能用same[i]=xxx。

                  2.对于一个非空列表,只能用same[i]=xxx来改变这个位置的元素,不能用same[i].append来改变

                  3.在第一点出现问题后,我就思考了same有两种初始化的思路,一个继续为;另一种就是same = [0]*10这种设定了列表的大小,当然这个初始化的0可以是其他东西,看情况而定

                    4.之所以会出现之前那种很蠢的方法,实际上是对列表作为内存存储没有概念。其他语言中,只要是容器都可以进行中间存储,方便之后进行操作。如果每次都像我之前那样生成一个现成的文件再来处理,效率会大大降低。

  • 相关阅读:
    模板
    待补 http://acm.hdu.edu.cn/showproblem.php?pid=6602
    待补 http://acm.hdu.edu.cn/showproblem.php?pid=6583
    2019 Multi-University Training Contest 1
    洛谷
    2019 Multi-University Training Contest 2
    模板
    2019牛客暑期多校训练营(第三场)
    2019牛客暑期多校训练营(第三场)
    模板
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/6413290.html
Copyright © 2011-2022 走看看