удалить все возможные нежелательные символы из строки Python сразу - PullRequest
0 голосов
/ 02 октября 2018

Я использую модуль Python newspaper3k и извлекаю резюме статьи, используя его веб-URL.Как,

from newspaper import Article
article = Article('https://www.abcd....vnn.com/dhdhd')
article.download()
article.parse()
article.nlp()
text = article.summary
print (text)

Дает,

Often hailed as Hollywood\xe2\x80\x99s long standing, commercially successful filmmaker, Spielberg\xe2\x80\x99s lifetime gross, if you include his productions, reaches a mammoth\xc2\xa0$17.2 billion\xc2\xa0\xc2\xad\xe2\x80\x93 unadjusted for inflation.
\r\rThe original\xc2\xa0Jurassic Park\xc2\xa0($983.8 million worldwide), which released in 1993, remains Spielberg\xe2\x80\x99s highest grossing film.
Ready Player One,\xc2\xa0currently advancing at a running total of $476.1 million, has become Spielberg\xe2\x80\x99s seventh highest grossing film of his career.It will eventually supplant Aamir\xe2\x80\x99s 2017 blockbuster\xc2\xa0Dangal\xc2\xa0(1.29 billion yuan) if it achieves the Maoyan\xe2\x80\x99s lifetime forecast of 1.31 billion yuan ($208 million) in the PRC.

Все, что я хочу удалить все нежелательные символы, такие как \xe2\x80\x99s.Я избегаю использовать несколько replace функций.Все, что я хочу что-то вроде: -

Often hailed as Hollywood long standing, commercially successful filmmaker, 
Spielberg lifetime gross, if you include his productions, reaches a 
mammoth $17.2 billion unadjusted for inflation.
The original Jurassic Park ($983.8 million worldwide), 
which released in 1993, remains Spielberg highest grossing film.
Ready Player One,currently advancing at a running total of $476.1 million, 
has become Spielberg seventh highest grossing film of his career.
It will eventually supplant Aamir 2017 blockbuster Dangal (1.29 billion yuan) 
if it achieves the Maoyan lifetime forecast of 1.31 billion yuan ($208 million) in the PRC

Ответы [ 4 ]

0 голосов
/ 02 октября 2018

Статья была расшифрована неправильно.Вероятно, неправильная кодировка указана на веб-сайте, но без действительного URL в вопросе для воспроизведения выходных данных, которые трудно доказать.

Экранирующие коды указывают, что utf8 была правильной кодировкой, поэтому используйте следующее для кодированияобратно в байты напрямую (latin1 - это отображение 1: 1 из первых 256 кодовых точек Unicode в байты), затем декодирование с использованием utf8:

text = text.encode('latin1').decode('utf8')

Результат:

Часто провозглашается какДавний, коммерчески успешный голливудский режиссер, брутто жизни Спилберга, если вы включите его продакшн, достигает гигантских $ 17,2 млрд. Без учета инфляции.

Оригинальный Парк Юрского периода (983,8 млн. Долл. США во всем мире), выпущенный в 1993 году, остаетсяСамый кассовый фильм Спилберга.Ready Player One, в настоящее время продвигающийся на общую сумму 476,1 млн. Долларов, стал седьмым самым кассовым фильмом Спилберга в его карьере. В конечном итоге он вытеснит блокбастера Аамира в 2017 году (1,29 млрд. Юаней), если он достигнет прогноза жизни Маояна в 1,31 млрд. Юаней (208 миллионов долларов) в КНР.

0 голосов
/ 02 октября 2018

Вы можете использовать Python's encode / decode, чтобы избавиться от всех нелатинских символов

data = text.decode('utf-8')
text = data.encode('latin-1', 'ignore')
0 голосов
/ 02 октября 2018

Сначала используйте .encode('ascii',errors='ignore'), чтобы игнорировать все символы, не входящие в ASCII.

Если вам нужен этот текст для некоторого анализа настроений, то вам также может потребоваться удалить специальные символы, такие как \n, \r и т. д., что можно сделать, сначала выбрав экранирующие символы, а затем заменив их с помощью регулярных выражений.

from newspaper import Article
import re
article = Article('https://www.abcd....vnn.com/dhdhd')
article.download()
article.parse()
article.nlp()
text = article.summary
text = text.encode('ascii',errors='ignore')
text = str(text) #converts `\n` to `\\n` which can then be replaced by regex
text = re.sub('\\\.','',text) #Removes all substrings of form \\.
print (text)
0 голосов
/ 02 октября 2018

Попробуйте использовать регулярные выражения:

import re
clear_str = re.sub(r'[\xe2\x80\x99s]', '', your_input)

re.sub заменяет все вхождения шаблона в your_input на 2-й аргумент.Шаблон как [abc] соответствует символу a, b или c.

...