Filtrer le pays pour appliquer différents mots d’arrêt

2020-06-30 python pandas

J'ai le jeu de données suivant

                                   Text
country     file                          
US          file_US                The Dish: Lidia Bastianich shares Italian recipes ... - CBS News
            file_US                Blog - Tasty Yummies
            file_US                Acne Alternative Remedies: Manuka Honey, Tea Tree Oil ...
            file_US                Looking back at 10 years of Downtown Arts | Times Leader 

IT          filename_IT            Tornando indietro a ...
            filename_IT            Questo locale è molto consigliato per le famiglie
                                                                            ...                                 
            filename_IT            Ci si chiede dove poter andare a mangiare una pizza  Melanzana Capriccia ...
            filename_IT            Ideale per chi ama mangiare vegano
              

avec les indices de pays et de fichiers. Je souhaite appliquer une fonction qui supprime les mots vides en fonction de la valeur de l'index:

def removing(sent):
    
    if df.loc['US','UK']:
        stop_words = stopwords.words('english')
    if df.loc['ES']:
        stop_words = stopwords.words('spanish')    
    
# (and so on)
                      
    c_text = []

    for i in sent.lower().split():
        if i not in stop_words:
            c_text.append(i)

    return(' '.join(c_text))

df['New_Column'] = df['Text'].astype(str)
df['New_Column'] = df['New_Column'].apply(removing)

Malheureusement, je reçois cette erreur:

----> 6 si df.loc ['US']: 7 stop_words = stopwords.words ('anglais') 8 si df.loc ['ES']:

/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py dans non nul (auto) 1477 def non nul (auto): 1478 augmenter ValueError ( -> 1479 f "La valeur de vérité d'un {type (auto) nom.} Est ambigu." 1480 « Utiliser a.empty, a.bool (), a.item (), a.any () ou a.all (). "1481)

ValueError: la valeur de vérité d'un DataFrame est ambiguë. Utilisez a.empty, a.bool (), a.item (), a.any () ou a.all ().

et je ne comprends toujours pas comment y remédier. Pouvez-vous s'il vous plaît me dire comment je peux exécuter le code sans obtenir l'erreur?

Answers

définir votre fonction avec

thecountry = x["Country"]
if thecountry == "UK" or thecountry=="US"
x["text"] = remove_stopwords("English")

... (etc)

Et puis df["filtered"] = df.apply(removing, axis=1)

#Assuming you have imported all the required libraries
#Make a dictionary with country code & language
lang={'UK':'english','US':'english','ES':'spanish'}
#assuming your dataframe as df
for index,row in df.iterrows():
   df.loc[index,'TEXT']=' '.join([word for word in str(row['TEXT']).split(' ') if word not in stopwords.words(lang[index])])

Réponse mise à jour:

 import pandas as pd
 import numpy as np
 import nltk
 from nltk.corpus import stopwords
 ind=pd.MultiIndex.from_arrays([['ind','ind','ind','ind','aus','aus','aus','aus'], ['1','2','3','4','5','6','7','8']])
 df=pd.DataFrame(['he is boy','he is boy','he is boy','he is boy','he is boy','he is boy','he is boy','he is boy'],index=ind,columns=['text'])
 lang={'ind':'spanish','aus':'english'}
 for index,row in df.iterrows():
       df.at[(index[0],index[1]),'text']=' '.join([word for word in str(row['text']).split(' ') if word not in stopwords.words(lang[index[0]])])

Avant d'exécuter la boucle:

entrez la description de l'image ici

Après l'exécution de la boucle:

entrez la description de l'image ici

Essayez de prendre référence à l'exemple que j'ai utilisé !!

Voici comment vous pouvez utiliser numpy.where() :

import pandas as pd
from numpy import where

df = pd.DataFrame(...)

# Remove the english stopwords from the english sentences
c = ['US','UK']
for p in c:
    stop_words = stopwords.words('english')
    for w in stop_words:
        df['Text'] = where(df['country'] == p, # If the country is english
                              df['Text'].str.replace(w,''), # Replace each stopword in each sentence with blank
                              df['Text'])


# Remove the spanish stopwords from the spanish sentences
stop_words = stopwords.words('spanish')
for w in stop_words:
    df['Text'] = where(df['country'] == 'ES', # If the country is spanish
                          df['Text'].str.replace(w,''), # Replace each stopword in each sentence with blank
                          df['Text'])

Related