2013-04-26 2 views
0

Я работаю в офисе одного из профессоров моего колледжа, и он поручил мне прочитать все документы классов, чтобы попытаться поймать людей, которые плагиализируют, поэтому я решил написать программу с использованием python, которая просматривает все шесть словосочетания во всех газетах, и сравнивает их, чтобы увидеть, есть ли в одной из статей более 200 подходящих фраз. Шесть словосочетаний будут, например ...Получение ошибки памяти?

Я съел картофель, и это было хорошо. Было бы:

я съел картофель и

ели картошку, и это было

картофеля и это было хорошо.

Мой код в настоящее время

import re 
import glob 
import os 

def ReadFile(Filename): 
    try: 
     F = open(Filename) 
     F2=F.read() 
    except IOError: 
     print("Can't open file:",Filename) 
     return [] 
    F3=re.sub("[^a-z ]","",F2.lower()) 
    return F3 
def listEm(BigString): 
    list1=[] 
    list1.extend(BigString.split(' ')) 
    return list1 

Name = input ('Name of folder? ') 
Name2=[] 
Name3=os.chdir("Documents") 
for file in glob.glob("*txt"): 
    Name2.append(file) 

for file in Name2: 
    index1=0 
    index2=6 
    new_list=[] 
    Words = ReadFile(file) 
    Words2= listEm(Words) 
    while index2 <= len(Words2): 
     new_list.append(Words2[index1:index2]) 
     index1 += 1 
     index2 += 1 

    del Name2[0] ##Deletes first file from list of files so program wont compare the same file to itself. 

    for file2 in Name2: 
     index=0 
     index1=6 
     new_list2=[] 
     Words1= ReadFile(file2) 
     Words3= listEm(Words) 
     while index1 <= len(Words3): 
      new_list2.append(Words3[index:index1]) ##memory error 
      index+=1 
      index2+=1 
    results=[] 
    for element in new_list: 
     if element in new_list2: 
      results.append(element) 
    if len(results) >= 200: 
     print("You may want to examine the following files:",file1,"and",file2) 

Я получаю ошибку памяти на

new_list2.append(Words3[index:index1]) 

По какой-то причине, и я не могу понять, что я делаю неправильно, я имею никогда не получал ошибку памяти в моей короткой, одной программе программирования на семестр. Спасибо за любую помощь.

ответ

2

Возможно, вы захотите увеличить код index1, вместо index2 внутри while с ошибкой. Изменить index2+=1 на index1+=1.

В настоящее время вы находитесь в бесконечном цикле, потому что index1 <= len(Words3) всегда истинно, так как вы не меняете index1, и вы добавляете к new_list2, пока не исчерпаете память.


Мораль этой ошибки должна состоять в том, чтобы использовать лучшие имена переменных, чем просто добавлять числа к концу существующих. Возможности для ошибок, как и вы, будут уменьшены таким образом.

Смежные вопросы