博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代码16
阅读量:5099 次
发布时间:2019-06-13

本文共 2106 字,大约阅读时间需要 7 分钟。

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

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

每个intend的处理代码:

f = open('/home/xbwang/Desktop/cs_update30','r')num = 0line = f.readline()while True:    if line[0] == 'Q':        num = num+1    elif line[0] == 'R':        break    line = f.readline()print numnum1 = numf1 = open('/home/xbwang/Desktop/cs_update30','r')f1.readline()num = num -1epoch = numfor 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 anum1 = num1-1for 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 = 0for line in f:    if(line[0] == 'I'):        num = num+1f1 = 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.之所以会出现之前那种很蠢的方法,实际上是对列表作为内存存储没有概念。其他语言中,只要是容器都可以进行中间存储,方便之后进行操作。如果每次都像我之前那样生成一个现成的文件再来处理,效率会大大降低。

 

转载于:https://www.cnblogs.com/ymjyqsx/p/6413290.html

你可能感兴趣的文章
java解决跨域
查看>>
css scroll bug
查看>>
[编织消息框架][JAVA核心技术]动态代理应用8-IRpcReceive实现
查看>>
由一个经典布局问题引发的思考
查看>>
vue 字符串长度控制显示的字数超出显示省略号
查看>>
vim常用命令
查看>>
tensorboard 远程
查看>>
mysql常用操作(测试必备)
查看>>
修改tcp内核参数:somaxconn
查看>>
欧几里德算法(模板)
查看>>
oracle 11g 压缩数据文件
查看>>
opencv2411配置
查看>>
【洛谷P1061 Jam的计数法】搜索
查看>>
Android studio 安装apk时报错:INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries...
查看>>
20. 多态
查看>>
pip国内源
查看>>
docker 从本地拷贝文件
查看>>
第1章 iOS逆向工程简介
查看>>
VS 2013使用ReportViewer 提示An error occurred during local report processing异常处理
查看>>
protobuf 协议 windows 下 java 环境搭建
查看>>