Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 8, 2009 07:58:49

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Очистка текста

Здравствуйте.

Я тут пишу парсер, который предварительно чистит текст от всего лишнего мусора.
Сначала просматривал весь текст (~2 Мб), и делал правила по каждому из случаев (мусора там навалом, и очеь ужасно выглядящего), но в итоге понял, что проще сделать исключение, чем правило )

Итак, суть. Нужно удалять ВСЕ символы, кроме пробела, точки, запятой, (тире), и русских букв.

Правда, даже после этой очистки, в тексте могут оставаться такие неприятности, как, например:
“задается . -. -. -..- .-, - ,= . При правильном”
или
“П.р,р.ва.кКН3ОН – -”, причём это всё - русские буковки.

Но, если с этих ещё нужно тщательно разбираться, то в первом случае - я не знаю, как быть :(
как одним махом полностью очистить от ВСЕХ символов, кроме русских букв, пробела, точки, запятой и тире.

Помогите, пожалуйста..



Офлайн

#2 Сен. 8, 2009 09:41:05

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Очистка текста

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



Офлайн

#3 Сен. 8, 2009 11:11:39

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Очистка текста

а я думал что это можно через регулярки решить

Офлайн

#4 Сен. 8, 2009 11:16:23

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Очистка текста

Регулярным выражением, однозначно.

Офлайн

#5 Сен. 8, 2009 11:44:43

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Очистка текста

Думаю, вот такие “П.р,р.ва.кКН3ОН” последовательности будет сложно вычистить, поскольку программа не может знать слово ли это, сокращение или аббревиатура.
А в остальном что-то вроде этого:

import re
text = u"текст, нормальный-принормальный. русский, s, musorom - английским."
clearText = re.sub(u"[^а-яА-Я0-9.,\-\s]", "", text)
clearText = re.sub(u"[.,\-\s]{3,}", " ", clearText)
print clearText
первым проходом оставляем только нужные нам символы, вторым убираем последовательности знаков препинания.



Офлайн

#6 Сен. 8, 2009 15:55:03

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Очистка текста

кажется, второй камент мне более подходит..
Потому как, всякие последовательности знаков препинания могут быть НАСТОЛЬКО разными, плюс всякие пробелы там между ними в разной форме.. В общем, не подходит. Более того, если Вы видели текст на пару метров - Вы понимаете, как сложно выловить из него все последовательности и мусор. Проще даже руками. А если текста на 200 метров?!

А регулярками я и так делал, но они не достаточно эффективны. Фишка в том, что нужно сделать так, чтобы удалялось ВСЁ, кроме русских букв, запятой, точки, тире.

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

igor.kaist
Спасибо, покурю про ord() ;)



Офлайн

#7 Сен. 8, 2009 16:00:19

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Очистка текста

pasaranax
clearText = re.sub(u"“, ”", text)
Хотя, вот это мне понравилось )



Офлайн

#8 Сен. 8, 2009 20:34:22

Chrizt
От: Владивосток
Зарегистрирован: 2009-07-18
Сообщения: 88
Репутация: +  0  -
Профиль   Отправить e-mail  

Очистка текста

Хмм.. и тут вознмкла проблемка..
Есть два зависимых друг от друга цикла, со сложными условиями, с разными выражениями:
цикл1 проверяет на наличие последовательностией, и, при их наличии, чистит текст
цикл2 проверяет на наличие двойных пробелов, и, при их наличии, чистит текст

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

Но циклов может быть и три и пять, поэтому, не могу найти решение :(

Помогите, плиз..



Офлайн

#9 Сен. 8, 2009 22:33:47

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Очистка текста

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



Отредактировано (Сен. 8, 2009 22:34:55)

Офлайн

#10 Сен. 9, 2009 02:14:30

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Очистка текста

выложи этот 2 метровый фаил и дай сюда

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version