LINUX.ORG.RU
ФорумTalks

Скрипт для послескановой обработки текстов


0

0

Продолжаю изучать Python. На этот раз практиковался в обработке 
регулярных выражений. Попутно изготовил программу для для очистки 
текста. Например, книги с lib.ru часто приходят в эээ...
непотребном виде. Например, в таком: 
http://sunspire.euro.ru/book.txt
Мой скрипт позволяет за секунды превратить эту гадость вот в такую конфетку:
http://sunspire.euro.ru/book-cleaned.txt
Я видел похожие программы (платные, в гуях и до кучи под винду онли), но 
результат их работы меня всякий раз не устраивал.

Собственно, документировать тут нечего; если посмотреть на вывод 
скрипта, все очевидно:

$ BookCleaner.py --encoding cp1251 book.txt

Processing file: book.txt

Performing basic operations:

	Delete multiple spaces		...		4 time(s)
	Delete spaces at end		...		6 time(s)
	Clear empty lines		...		1 time(s)
	Delete multiple lines		...		3 time(s)
	Normalize identation		...		9 time(s)

The following variations of broken hyphens found:

	Broken hyphenation pattern N1	...		1 time(s):
		>> Аргей-
	ской
	Operations:
		1. Assume as broken hyphens
		2. Assume as broken dashes
		3. Leave it as is
Please, enter your choice:	1

	Broken hyphenation pattern N2	...		6 time(s):
		>> ле- систых
		>> до- роге,
		>> пли- та
		>> гре- ческой
		>> неприкосновен- ными,
	Operations:
		1. Assume as broken hyphens
		2. Assume as broken dashes
		3. Leave it as is
Please, enter your choice:	1

	Broken hyphenation pattern N3	...		1 time(s):
		>> святых --Косьмы
	Operations:
		1. Assume as broken hyphens
		2. Assume as broken dashes
		3. Leave it as is
Please, enter your choice:	2

File written: book-cleaned.txt:
975 chars: 37 cleaned

Пользуйтесь
http://sunspire.euro.ru/BookCleaner.py

BTW...
Говорят, что Python - сам по себе тормоз. Говорят, что движок 
регекспов  тормозной. Это не так. Этот скрипт даже отдельные 
операции выполняет гораздо быстрее регексп-aware текстовых 
редакторов. Например, тот же ворд успевает сделать прогон только 
по одному паттерну, а мой скрипт уже сделал всю работу.

PS LORNewsClient также обновлен.
http://www.linux.org.ru/profile/Sunspire/view-message.jsp?msgid=1117294

Молодец! Успехов!

Ща заюзаем эту диковинку :)

gh0stwizard ★★★★★
()

лучше б на С написал :)

stassats ★★★★
()

Feature Request: разбиение на строки, число символов в строке указывается пользователем.

Obidos ★★★★★
()
Ответ на: комментарий от Obidos

>Feature Request: разбиение на строки, число символов в строке >указывается пользователем

Нет, это будет решение обратной задачи и велосипед. Я делал этот скрипт исключительно для удобного чтения с мобильных дивайсов типа телефонов и КПК. Читалки сами умеют разбивать на строки.

Впрочем, если очень нужно, добавь следующие строки перед open(saveAs, "w").write(buffer):

___cut here___

import StringIO

charsPerLine = 90 # Число символов на строку

def splitParagraph(paragraph): paragraph = StringIO.StringIO(paragraph) tBuffer = [] while paragraph.tell() < paragraph.len: tBuffer.append(paragraph.read(charsPerLine)) return "\n".join(tBuffer)

buffer = "\n".join(map(splitParagraph, buffer.splitlines()))

Sunspire
() автор топика
Ответ на: комментарий от Sunspire

Блин, сбилась индентация...

	import StringIO

	charsPerLine = 10

	def splitParagraph(paragraph):
		paragraph = StringIO.StringIO(paragraph)
		tBuffer = []
		while paragraph.tell() < paragraph.len:
			tBuffer.append(paragraph.read(charsPerLine))
		return "\n".join(tBuffer)

	buffer = "\n".join(map(splitParagraph, buffer.splitlines()))

Sunspire
() автор топика
Ответ на: комментарий от Sunspire

Я наверное ничего не понимаю в колбасных обрезках, но мне питон кажется ужасным языком. Perl куда приятнее и проще читается...

Eldhenn
()

Смотрю, вроде питон простой язык, где можно почитать чего-либо для введения?

anonymous
()
Ответ на: комментарий от Eldhenn

> Perl куда приятнее и проще читается...

То есть ты не знаком с семантикой Питона и специфическими для него
конструкциями и на этом основании делаешь занятный вывод, что
Питон - ужасный язык. Ну да, ну да. :))

Sunspire
() автор топика
Ответ на: комментарий от anonymous

>Смотрю, вроде питон простой язык, где можно почитать чего-либо 
>для введения?

Мне понравилась "Dive into Python". Хотя для "введения" она наверное,
не очень подойдет, т.к. предполагает некий бэкграунд в CS.

Sunspire
() автор топика
Ответ на: комментарий от Sunspire

Честно скажу - не знаком. Впрочем, когда я загрузил скрипт в vim, стало немного проще. Вообще отсутствие знаков препинания напрягает, и серьёзно.

Eldhenn
()
Ответ на: комментарий от Eldhenn

>А про рекурсию vs итерацию (оно же МТ vs lambda) мы уже флеймили

Ой, а где на это можно посмотреть? Поиск дал мне кучу мусора...

Sunspire
() автор топика
Ответ на: комментарий от Sunspire

Честно говоря уже не помню. Начиналось с обучения детей линуксу. Или компьютеру. Не помню. Из участников помню себя, nsav (ещё с таким ником), ugoday. Возможно, int19h, хотя не факт. Искать наверное надо упоминание машины Тьюринга мной :)

Eldhenn
()
Ответ на: комментарий от linux_newbe

Да, создан :) И меня в этом никто не разубедит :)

Eldhenn
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.