Pregunta

Soy nuevo en Python y no puede encontrar una manera de eliminar el inútil de texto.El propósito principal es mantener la palabra que quiero y eliminar el resto.En esta etapa, puedo comprobar mi in_data y encontrar la palabra que yo quiero.Si frase.encontrar(wordToCheck) es positivo, luego la guardo.El in_data es la frase que cada fila, pero la corriente de salida es una palabra de cada línea.Lo que quiero es permanecer en los formatos, buscar la palabra en cada fila y eliminar el resto.

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

salida

roaming
overseas
roaming
overseas
roaming
overseas
samsung
samsung

El in_data es frase como

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.

Puedo esperar a ver la salida es como

overseas roaming overseas
¿Fue útil?

Solución

Puede usar REGEX para esto:

>>> 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'

El enfoque no regeo sería usar str.join con str.strip y una expresión del generador.Se requiere la llamada de la tira () para deshacerse de las puntuaciones como '.', ',', etc.

>>> from string import punctuation
>>> ' '.join(y for y in (x.strip(punctuation) for x in s.split()) if y in word)
'overseas roaming overseas'

Otros consejos

Aquí hay una forma más sencilla:

>>> 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']

Usted puede hacer que sea mucho más sencillo, como este:

for w in in_data.split():
    if w in word:
        print w

Aquí tenemos la primera división el in_data por espacios, que devuelve una lista de palabras.Tenemos entonces el bucle a través de cada palabra en los datos y comprobar si la palabra es igual a uno de los que está buscando.Si lo hace, entonces le imprima.

Y, aún más rápido de búsqueda, hacer el word-lista de un conjunto en su lugar.Mucho más rápido.

Además, si desea manejar puntuaciones y símbolos que usted necesita para usar regex o comprobar si todos los caracteres de la cadena es una carta.Así, para obtener el resultado que usted desea:

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)

Una respuesta con Split se caerá en la puntuación.Necesitas romper las palabras con una expresión regular.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top