Python: после замены осталось несколько пробелов? - PullRequest
0 голосов
/ 07 августа 2020

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

Я знаю, что этот topi c часто упоминается в Stack Overflow. Однако использование обычных способов, таких как:

string = ' '.join(string.split())

или

string = re.sub(' +', ' ', string)

, похоже, не дает ожидаемых результатов для каждой веб-страницы. Ниже приведен фрагмент кода, который я использую, и пример регистрации SE C, для которой мне не удается не иметь нескольких пробелов.

import re
from selenium import webdriver

link = r"https://www.sec.gov/Archives/edgar/data/1800/000104746919001316/a2237648zdef14a.htm"
driver = webdriver.Chrome('./chromedriver')
driver.get(link)
x = driver.page_source

#Function to clean
def cleanhtml(raw_html):
    cleanr = re.compile('<.*?>')
    cleantext = re.sub(cleanr, '', raw_html)
    return cleantext

#Cleaning
x = str(x).replace('<', ' <')
x = cleanhtml(x)
x = x.replace('<br>', ' ').replace('&nbsp;', ' ').replace('&amp;', '&').replace('/\s\s+/g',' ').replace('•', ' ').replace("&lt", " ").replace("_", " ").replace("●", " ")
x = ' '.join(x.split())

#Results with persist to have multiple white spaces :-(
print(x)

Примечание : Я только что отредактировал свой вопрос, так как мой предыдущий пример был неподходящим! Спасибо за ваши ответы!

Ответы [ 3 ]

2 голосов
/ 07 августа 2020

обновлено в связи с изменением описания проблемы: вы должны использовать html парсер для обработки тегов и html сущностей. как только вы получите текст, удалите ненужные символы, такие как nda sh, маркеры, несколько символов пробела:

1 голос
/ 07 августа 2020
import re

sample = '''<font color="#952369" size="1"><b>


<!-- COMMAND= GRID_ADD,"background-color:#952369;" -->


 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX&nbsp;&nbsp;</b></font>'''

def replace(match):
    return ''
    
sample = re.sub('\s+', replace, sample)

print(sample)
# Output:
# <fontcolor="#952369"size="1"><b><!--COMMAND=GRID_ADD,"background-color:#952369;"-->XXXXXXXXXXXXXXXXXXXXXXXXXXXXX&nbsp;&nbsp;</b></font>
1 голос
/ 07 августа 2020

Я бы попытался сделать что-то вроде этого:

clean = ' '.join([word.strip() for word in not_clean.strip().split()])

Таким образом вы не только разбиваете пробелы, но и очищаете каждое разбитое слово и весь ввод.

edit: Поскольку OP отредактировал свой вопрос, этот ответ больше не решает проблему.

...