Domanda

Sono nuovo a Python e non riesco a trovare un modo per rimuovere il testo inutile.Lo scopo principale è mantenere la parola che voglio e rimuovere tutto il resto.In questa fase, posso controllare il mio in_data e trovare la parola che voglio.Se frase.Find (WordTheckCheck) è positivo, quindi mantienilo. In_Data è la frase ogni riga, ma l'uscita corrente è una parola ogni riga.Quello che voglio è rimanere i formati, trova la parola in ogni riga e rimuovere il 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
.

output

roaming
overseas
roaming
overseas
roaming
overseas
samsung
samsung
.

Il In_Data è la frase come

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

Mi aspetto di vedere l'output è come

overseas roaming overseas
.

È stato utile?

Soluzione

È possibile utilizzare Regex per questo:

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

L'approccio non regex sarebbe quello di utilizzare str.join con str.strip e un'espressione del generatore.La chiamata Strip () è richiesta per sbarazzarsi delle puntuazioni come '.', ',' ecc.

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

Altri suggerimenti

Ecco un modo più semplice:

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

Puoi farlo molto più semplice, come questo:

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

Qui abbiamo prima diviso il in_data da spazi, che restituisce un elenco di parole.Quindi passiamo attraverso ogni parola nei dati nei dati e controlla se la parola è uguale a uno di quelli che stai cercando.Se lo fa, lo stampiamo.

E, per la ricerca ancora più rapida, rendi invece l'elenco di word.Molto più veloce.

Inoltre, se si desidera gestire la punteggiatura e i simboli necessari per utilizzare Regex o controllare se tutti i caratteri nella stringa è una lettera.Quindi, per ottenere l'output che desideri:

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 risposta che utilizza la divisione cadrà sulla punteggiatura.Devi rompere le parole con un'espressione regolare.

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top