неправильное разбиение содержимого при записи в файл в python - PullRequest
1 голос
/ 01 февраля 2012

У меня есть входной файл .txt, который конвертируется из pdf.
У меня также есть 50 слов (ключевых слов), которые, как правило, находятся во входном файле.
Для каждого из 50 слов в структуре, Я создал один выходной файл, и моя цель - разделить содержимое входного файла .txt, записав его в соответствующие выходные файлы в соответствии с набросками, найденными во входных данных.

Наброскиможно найти по всему тексту, но мы специально нацелены на «заголовки», которые идентифицируются тем фактом, что они содержат набросок слова, перед которым следует символ новой строки.Я использую регулярное выражение, например, для первого наброскового слова:

t = re.search("\nAbduction\n",content, re.I)

Но у меня есть еще 49 таких слов для каждого из возможных названий.Поскольку я знаю, что t может не возвращать значение, что я должен сделать, чтобы он возвратил значение для всех возможных названий?
2-й вопрос: Когда определен конкретный заголовок, мне нужно вывести следующий текст в соответствующий выходной файл, пока не будет найден другой заголовок (или EOF).Как я могу это сделать?

Любая помощь приветствуется.

[Редактировать] Текст этого вопроса был значительно переписан, реструктурирован.Извинения за такое тяжелое редактирование;как правило, лучше оставаться ближе к исходному тексту, но в этом случае оказалось полезным иметь более тяжелую руку ... Проверьте предыдущую версию [или отмените редактирование], если считаете иначе!

[re-edit] (из текста OP, опубликованного в качестве ответа)
Пример файла .txt выглядит так:

Abduction 

Definition
Abduction is a form of reasoning , sometimes described
as “deduction in reverse,” Abduction whereby given a rule that
“A follows from B” and the observed result of “A” we
infer the condition “B” of the rule. More generally,
given a theory, T , modeling a domain of interest and
an observation, “A,” we infer a hypothesis “B” such that

Accuracy

Definition
Accuracy refers to a measure of the degree to which the
predictions of a (cid:55)model match the reality being mod.

Это похоже на конец файла св том числе 50 названий.Я уже создал файлы для каждого из названий заголовков. Я написал такую ​​функцию, как;

def TextBetween(self, s, leader, trailer):
    end_of_leader = s.index(leader) + len(leader)
    if trailer == " ":
        return s[end_of_leader:]
    else :
        start_of_trailer = s.index(trailer, end_of_leader)
        return s[end_of_leader:start_of_trailer]

Это вычисляет содержание между лидером и трейлером, поэтому проблема в том, что когда я выбираю лидера и трейлера, я хочуиспользуйте пустое пространство, чтобы найти правильный заголовок. Из-за этого я использую регулярное выражение, которое я упомянул в своем вопросе. Я создал 50 регулярных выражений для каждого заголовка и хочу использовать их при записи в файлы, но я не знаю, как мне этого добиться.

1 Ответ

1 голос
/ 01 февраля 2012

Хотя ваш вопрос будет понятнее, если вы разместите образец файла input.txt, этот код может быть тем, что вы пытаетесь сделать:

keywords = ["Abduction", "Foobar"]
inf = open("infile.txt")
outf = None
for l in inf:
    if l[:-1] in keywords:
        if outf != None:
            outf.close()
        outf = open(l[:-1] + ".txt", "w")
    elif outf != None:
        outf.write(l)

Это создаст один файл для каждого раздела документа, названного в честь ключевого слова, которое предшествует ему. Так что, если я правильно вас интерпретирую и файл выглядит как

Abduction
Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Foobar
Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum

В итоге вы получите два выходных файла, один с именем Abduction.txt и один с именем Foobar.txt, каждый с соответствующим разделом текста. Я уверен, что ваше конкретное приложение потребует больше работы, но это должно привести вас на правильный путь.

...