我试图读取文件 corpus.txt(训练集)并生成一个模型,输出必须命名为 lexic.txt,并且包含单词、标签和出现次数…对于小型训练集它可以工作,但对于大学提供的训练集(30MB 的 .txt 文件,数百万行)代码无法工作,我猜想这可能是效率问题,因此系统内存不足…请问有人可以帮我修改代码吗?
我在这里附上我的代码:
from collections import Counterfile=open('corpus.txt','r')data=file.readlines()file.close()palabras = []count_list = []for linea in data: linea.decode('latin_1').encode('UTF-8') # 处理重音符号 palabra_tag = linea.split('\n') palabras.append(palabra_tag[0])cuenta = Counter(palabras) # 用于统计单词 + 标签出现次数的字典 # 为每个单词 + 标签分配出现次数for palabraTag in palabras: for i in range(len(palabras)): if palabras[i] == palabraTag: count_list.append([palabras[i], str(cuenta[palabraTag])])# 删除重复项finalList = []for i in count_list: if i not in finalList: finalList.append(i)outfile = open('lexic.txt', 'w') outfile.write('Palabra\tTag\tApariciones\n')for i in range(len(finalList)): outfile.write(finalList[i][0]+'\t'+finalList[i][1]+'\n') # finalList[i][0] 是单词 + 标签,finalList[i][1] 是出现次数outfile.close()
这里你可以看到 corpus.txt 的样本:
Al Prepmenos Advcinco Detreclusos Adjmurieron Ven Preplas Detúltimas Adj24 Numhoras NCen Preplas Detcárceles NCde PrepValencia NPy ConjBarcelona NPen Prepincidentes NCen Preplos Detque Pronsu Det
提前感谢!
回答:
最后我改进了代码,使用了字典,这里是运行良好的结果:
file=open('corpus.txt','r')data=file.readlines()file.close()diccionario = {}for linea in data: linea.decode('latin_1').encode('UTF-8') # 处理重音符号 palabra_tag = linea.split('\n') cadena = str(palabra_tag[0]) if(diccionario.has_key(cadena)): aux = diccionario.get(cadena) aux += 1 diccionario.update({cadena:aux}) else: diccionario.update({cadena:1})outfile = open('lexic.txt', 'w')outfile.write('Palabra\tTag\tApariciones\n')for key, value in diccionario.iteritems() : s = str(value) outfile.write(key +" "+s+'\n')outfile.close()