Возможен ли шаг назад в петле с питоном? - PullRequest
0 голосов
/ 15 марта 2019

Я ЖДУ ЛУЧШЕГО РЕШЕНИЯ ЭТОЙ ПРОБЛЕМЫ:

То, что я хочу сделать, - это автоматически объединять слова книги, разделенные переносами строк. Код, который я пробовал:

import nltk
from nltk.tokenize import word_tokenize
import re

with open ('Fr-dictionary.txt') as fr:  #opens the dictionary
dic = word_tokenize(fr.read().lower()) #stores the first dictionary

pat=re.compile(r'[.?\-",:;.?!»’()quls\d]+|\w+(?:-\w+)+') #pattern for 
punctuation, digits and words separated by hyphens (-)
reg= list(filter(pat.match, text))


with open ('fr-text.txt') as tx2:  #opening text containing the 
separated words
    text_input = word_tokenize(tx2.read().lower()) #stores the input 
text

words_it = iter(text_input) 

out_file1=open("finaltext.txt","w") #defining name of output file
valid_words1=[ ] #empty list to append the existing words 
invalid_words1=[ ] #empty list to append the invalid(non-existing)words 


for w in words_it: #looping through the tokenized text
    if w in dic:
        valid_words1.append(w)
    elif w in reg:
        valid_words1.append(w)#appending the valid items 
    else:
        try:
            concatenated = w + next(words_it) #concatenating strings
            if concatenated in dic:
                valid_words1.append(concatenated)#append if valid
        except StopIteration:
                   pass
        else:
           invalid_words1.append(w) #appending the invalid_words

a1=' '.join(valid_words1) #converting list into a string

out_file1.write(a1) #writing the output to a file
out_file1.close()



print(a1) #print list converted into text

print(invalid_words1)
print(len(invalid_words)

с этим кодом у меня есть:

a) разбил текст на части (в список) и зацикливал по всему списку, проверяя, существует ли каждый элемент в словаре (включая пунктуацию) б) если нет, я пытаюсь соединить две части слова, c) проверить, существует ли объединенный вывод в словаре, и, г) если да, добавьте в тот же список допустимых слов, но д) если не добавить в другой список с недействительными словами.

ПРОБЛЕМА. Проблема в том, что иногда первая часть слова, которое нужно объединить, представляет собой существующее / действительное слово (существует в словаре), а затем программа игнорирует его и не объединяет его со второй частью, что приводит к тексту с эти ошибки. ЛЮБАЯ ИДЕЯ для решения этой проблемы? Я думаю, что решение может быть таким: зациклить и добавить все слова, которые существуют, и когда появляется несуществующее слово, программа может вернуться к предыдущему, объединить, проверить в словаре и затем продолжить ... Как это сделать?

1 Ответ

0 голосов
/ 15 марта 2019

Не уверен, что у меня возникла ваша проблема, но способ решить проблему шага назад в цикле с помощью python - просто сохранить последнее состояние цикла, а именно:

last = None
for i in list_:
    #do stuff
    last = i

Или вы можетеиспользуйте функцию перечисления

for index, i in enumerate(list_):
    #do stuff
    previous = list_[index-1]
...