Python fjerne stop-ord fra pandaer dataframe

Jeg ønsker at fjerne stop-ord fra min klumme “tweets”. Hvordan kan jeg iterativ over hver række, og hver post?

pos_tweets = [('I love this car', 'positive'),
    ('This view is amazing', 'positive'),
    ('I feel great this morning', 'positive'),
    ('I am so excited about the concert', 'positive'),
    ('He is my best friend', 'positive')]

test = pd.DataFrame(pos_tweets)
test.columns = ["tweet","class"]
test["tweet"] = test["tweet"].str.lower().str.split()

from nltk.corpus import stopwords
stop = stopwords.words('english')
gamle indlæg, men for henvisning til stop-ord, der vil have ord som “jeg” og “et”. @EdChum din kode vil medføre, at alle de ord, at blive ruineret på grund af, at
sandsynligvis du kan sortere stopwords baseret på rum og længde.

OriginalForfatteren I am not George | 2015-04-08

3 svar

  1. 18

    Hjælp Liste Forståelse

    test['tweet'].apply(lambda x: [item for item in x if item not in stop])

    Returnerer:

    0               [love, car]
    1           [view, amazing]
    2    [feel, great, morning]
    3        [excited, concert]
    4            [best, friend]
    Dette er ikke i besiddelse af strengen, så du vil være i stand til at søge efter ord, kombinationer, når du fjerner stop-ord. Ed Chum ‘ s kommentar ovenfor opretholder streng.
    jeg har brug for at tilføje str(x).split() og vil blive test['tweet'].apply(lambda x: [item for item in str(x).split() if item not in stopwords.words('spanish')]) fordi vise en fejl, der sagde, at ‘float’ objekt er ikke iterable

    OriginalForfatteren Liam Foley

  2. 20

    Vi kan importere stopwords fra nltk.corpus som nedenfor. Med det, Vi udelukke stopwords med Python ‘ s liste forståelse og pandas.DataFrame.apply.

    # Import stopwords with nltk.
    from nltk.corpus import stopwords
    stop = stopwords.words('english')
    
    pos_tweets = [('I love this car', 'positive'),
        ('This view is amazing', 'positive'),
        ('I feel great this morning', 'positive'),
        ('I am so excited about the concert', 'positive'),
        ('He is my best friend', 'positive')]
    
    test = pd.DataFrame(pos_tweets)
    test.columns = ["tweet","class"]
    
    # Exclude stopwords with Python's list comprehension and pandas.DataFrame.apply.
    test['tweet_without_stopwords'] = test['tweet'].apply(lambda x: ' '.join([word for word in x.split() if word not in (stop)]))
    print(test)
    # Out[40]:
    #                                tweet     class tweet_without_stopwords
    # 0                    I love this car  positive              I love car
    # 1               This view is amazing  positive       This view amazing
    # 2          I feel great this morning  positive    I feel great morning
    # 3  I am so excited about the concert  positive       I excited concert
    # 4               He is my best friend  positive          He best friend

    Det kan også være udelukket ved hjælp pandas.Series.str.replace.

    pat = r'\b(?:{})\b'.format('|'.join(stop))
    test['tweet_without_stopwords'] = test['tweet'].str.replace(pat, '')
    test['tweet_without_stopwords'] = test['tweet_without_stopwords'].str.replace(r'\s+', ' ')
    # Same results.
    # 0              I love car
    # 1       This view amazing
    # 2    I feel great morning
    # 3       I excited concert
    # 4          He best friend

    Hvis du ikke kan importere stopwords, du kan downloade som følger.

    import nltk
    nltk.download('stopwords')

    En anden måde at svare på er at importere text.ENGLISH_STOP_WORDS fra sklearn.feature_extraction.

    # Import stopwords with scikit-learn
    from sklearn.feature_extraction import text
    stop = text.ENGLISH_STOP_WORDS

    Bemærke, at antallet af ord i scikit-lære stopwords og nltk stopwords er forskellige.

    OriginalForfatteren Keiku

  3. 4

    Tjek pd.DataFrame.replace(), det kan arbejde for dig:

    In [42]: test.replace(to_replace='I', value="",regex=True)
    Out[42]:
                                  tweet     class
    0                     love this car  positive
    1              This view is amazing  positive
    2           feel great this morning  positive
    3   am so excited about the concert  positive
    4              He is my best friend  positive

    Edit : replace() vil søge efter en streng(og endda delstrenge). For fx at det ville erstatte rk fra work hvis rk er et stopord, der nogle gange er ikke forventet.

    Derfor brugen af regex her :

    for i in stop :
        test = test.replace(to_replace=r'\b%s\b'%i, value="",regex=True)
    fungerede godt! bare tanken om at opdatere svaret med flere cases

    OriginalForfatteren mok0

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *