Вопрос

Я новичок в 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
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top