Форум сайта python.su
Здравствуйте.
Я тут пишу парсер, который предварительно чистит текст от всего лишнего мусора.
Сначала просматривал весь текст (~2 Мб), и делал правила по каждому из случаев (мусора там навалом, и очеь ужасно выглядящего), но в итоге понял, что проще сделать исключение, чем правило )
Итак, суть. Нужно удалять ВСЕ символы, кроме пробела, точки, запятой, (тире), и русских букв.
Правда, даже после этой очистки, в тексте могут оставаться такие неприятности, как, например:
“задается . -. -. -..- .-, - ,= . При правильном”
или
“П.р,р.ва.кКН3ОН – -”, причём это всё - русские буковки.
Но, если с этих ещё нужно тщательно разбираться, то в первом случае - я не знаю, как быть :(
как одним махом полностью очистить от ВСЕХ символов, кроме русских букв, пробела, точки, запятой и тире.
Помогите, пожалуйста..
Офлайн
А если пройтись по тексту посимвольно, выискивая с помощью функции ord, подходит ли символ заданному диапазону?
Возможно есть и более красивое решение.
Офлайн
а я думал что это можно через регулярки решить
Офлайн
Регулярным выражением, однозначно.
Офлайн
Думаю, вот такие “П.р,р.ва.кКН3ОН” последовательности будет сложно вычистить, поскольку программа не может знать слово ли это, сокращение или аббревиатура.
А в остальном что-то вроде этого:
import re
text = u"текст, нормальный-принормальный. русский, s, musorom - английским."
clearText = re.sub(u"[^а-яА-Я0-9.,\-\s]", "", text)
clearText = re.sub(u"[.,\-\s]{3,}", " ", clearText)
print clearText
Офлайн
кажется, второй камент мне более подходит..
Потому как, всякие последовательности знаков препинания могут быть НАСТОЛЬКО разными, плюс всякие пробелы там между ними в разной форме.. В общем, не подходит. Более того, если Вы видели текст на пару метров - Вы понимаете, как сложно выловить из него все последовательности и мусор. Проще даже руками. А если текста на 200 метров?!
А регулярками я и так делал, но они не достаточно эффективны. Фишка в том, что нужно сделать так, чтобы удалялось ВСЁ, кроме русских букв, запятой, точки, тире.
Последовательности я вылавливать буду потом по условиям в регулярках: если слева и справа от знака препинания стоит другой знак препинания - чистим..
igor.kaist
Спасибо, покурю про ord() ;)
Офлайн
pasaranaxХотя, вот это мне понравилось )
clearText = re.sub(u"“, ”", text)
Офлайн
Хмм.. и тут вознмкла проблемка..
Есть два зависимых друг от друга цикла, со сложными условиями, с разными выражениями:
цикл1 проверяет на наличие последовательностией, и, при их наличии, чистит текст
цикл2 проверяет на наличие двойных пробелов, и, при их наличии, чистит текст
фишка в том, чтобы оба цикла выполнялись постоянно, пока их условия истинны. То есть, если мы удалим все двойные пробелы, и почистим от последовательностей знаков препинания текст, двойные пробелы могут снова появиться.
Но циклов может быть и три и пять, поэтому, не могу найти решение :(
Помогите, плиз..
Офлайн
а разве одними только регулярками не получается обойтись?
покажи какой-нибудь конкретный пример, и что надо сделать
Отредактировано (Сен. 8, 2009 22:34:55)
Офлайн
выложи этот 2 метровый фаил и дай сюда
Офлайн