Очистка текста в Python
-
21-12-2019 - |
Вопрос
Я новичок в Python и не могу найти способ удалить ненужный текст.Основная цель — сохранить слово «хочу» и убрать все остальное.На этом этапе я могу проверить свои in_data и найди нужное мне слово.Если предложение.find(wordToCheck) положительный, то сохраните его.А in_data представляет собой предложение в каждой строке, но текущий вывод представляет собой слово в каждой строке.Я хочу сохранить форматы, найти слово в каждой строке и удалить остальное.
import Orange
import orange
word = ['roaming','overseas','samsung']
out_data = []
for i in range(len(in_data)):
for j in range(len(word)):
sentence = str(in_data[i][0])
wordToCheck = word[j]
if(sentence.find(wordToCheck) >= 0):
print wordToCheck
выход
roaming
overseas
roaming
overseas
roaming
overseas
samsung
samsung
А in_data это предложение типа
contacted vodafone about going overseas and asked about roaming charges. The customer support officer says there isn't a charge but while checking my usage overseas.
Я ожидаю увидеть результат, похожий на
overseas roaming overseas
Решение
Для этого вы можете использовать регулярное выражение:
>>> import re
>>> word = ['roaming','overseas','samsung']
>>> s = "Contacted vodafone about going overseas and asked about roaming charges. The customer support officer says there isn't a charge but while checking my usage overseas."
>>> pattern = r'|'.join(map(re.escape, word))
>>> re.findall(pattern, s)
['overseas', 'roaming', 'overseas']
>>> ' '.join(_)
'overseas roaming overseas'
Нерегулярный подход будет заключаться в использовании str.join
с str.strip
и выражение-генератор.Вызов Strip() необходим, чтобы избавиться от таких знаков препинания, как '.'
, ','
и т. д.
>>> from string import punctuation
>>> ' '.join(y for y in (x.strip(punctuation) for x in s.split()) if y in word)
'overseas roaming overseas'
Другие советы
Вот более простой способ:
>>> import re
>>> i
"Contacted vodafone about going overseas and asked about roaming charges. The customer support officer says there isn't a charge but while checking my usage overseas."
>>> words
['roaming', 'overseas', 'samsung']
>>> [w for w in re.findall(r"[\w']+", i) if w in words]
['overseas', 'roaming', 'overseas']
. Можно сделать гораздо проще, вот так:
for w in in_data.split():
if w in word:
print w
Здесь мы сначала разделили in_data
по пробелам, что возвращает список слов.Затем мы просматриваем каждое слово во входных данных и проверяем, соответствует ли это слово одному из тех, которые вы ищете.Если да, то мы его распечатываем.
А для еще более быстрого поиска сделайте word
-вместо этого перечислите набор.Намного быстрее.
Кроме того, если вы хотите обрабатывать знаки препинания и символы, вам нужно либо использовать регулярное выражение, либо проверять, являются ли все символы в строке буквами.Итак, чтобы получить желаемый результат:
import string
in_words = ('roaming','overseas','samsung')
out_words = []
for w in in_data.split():
w = "".join([c for c in w if c in string.letters])
if w in in_words:
out_words.append(w)
" ".join(out_words)
Ответ, использующий разделение раскола на пунктуацию.Вам нужно разбить слова с регулярным выражением.
import re
in_data = "contacted vodafone about going overseas and asked about roaming charges. The customer support officer says there isn't a charge but while checking my usage overseas."
word = ['roaming','overseas','samsung']
out_data = []
word_re = re.compile(r'[^\w\']+')
for check_word in word_re.split(in_data):
if check_word in word:
print check_word
.