Frage

Ich bin Python-Neuling und finde keine Möglichkeit, nutzlosen Text zu entfernen.Der Hauptzweck besteht darin, das Wort, das ich möchte, beizubehalten und den Rest zu entfernen.Zu diesem Zeitpunkt kann ich meine überprüfen in_data und finde das Wort, das ich will.Wenn Satz.find(wordToCheck) positiv ist, dann behalte es.Der in_data ist ein Satz pro Zeile, aber die aktuelle Ausgabe ist ein Wort pro Zeile.Was ich möchte, ist, die Formate beizubehalten, das Wort in jeder Zeile zu finden und den Rest zu entfernen.

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

Ausgabe

roaming
overseas
roaming
overseas
roaming
overseas
samsung
samsung

Der in_data ist satzartig

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.

Ich erwarte, dass die Ausgabe so ist

overseas roaming overseas
War es hilfreich?

Lösung

Sie können hierfür Regex verwenden:

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

Es wäre ein Nicht-Regex-Ansatz zu verwenden str.join mit str.strip und ein Generatorausdruck.Der Aufruf von strip() ist erforderlich, um die Satzzeichen wie zu entfernen '.', ',' usw.

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

Andere Tipps

Hier ist eine einfachere Weise:

generasacodicetagpre.

Sie können es viel einfacher machen, so:

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

Hier teilen wir zunächst die in_data durch Leerzeichen, was eine Liste von Wörtern zurückgibt.Anschließend durchlaufen wir jedes Wort in den Eingangsdaten und prüfen, ob das Wort einem der gesuchten Wörter entspricht.Wenn ja, dann drucken wir es aus.

Und für eine noch schnellere Suche machen Sie das word-list stattdessen einen Satz.Viel schneller.

Wenn Sie außerdem Satzzeichen und Symbole verarbeiten möchten, müssen Sie entweder Regex verwenden oder prüfen, ob alle Zeichen in der Zeichenfolge ein Buchstabe sind.Um also die gewünschte Ausgabe zu erhalten:

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)

Eine Antwort mit Split wird auf Interpunktion überfallen.Sie müssen die Wörter mit einem regulären Ausdruck aufbrechen.

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top