2017-09-12 1 views
0

Je suis en train de faire une analyse de texte:erreur Wordcount NoneType pyspark-

def cleaning_text(sentence): 
    sentence=sentence.lower() 
    sentence=re.sub('\'','',sentence.strip()) 
    sentence=re.sub('^\d+\/\d+|\s\d+\/\d+|\d+\-\d+\-\d+|\d+\-\w+\-\d+\s\d+\:\d+|\d+\-\w+\-\d+|\d+\/\d+\/\d+\s\d+\:\d+',' ',sentence.strip())# dates removed 
    sentence=re.sub(r'(.)(\/)(.)',r'\1\3',sentence.strip()) 
    sentence=re.sub("(.*?\//)|(.*?\\\\)|(.*?\\\)|(.*?\/)",' ',sentence.strip()) 
    sentence=re.sub('^\d+','',sentence.strip()) 
    sentence = re.sub('[%s]' % re.escape(string.punctuation),'',sentence.strip()) 
    cleaned=' '.join([w for w in sentence.split() if not len(w)<2 and w not in ('no', 'sc','ln') ]) 
    cleaned=cleaned.strip() 
    if(len(cleaned)<=1): 
     return "NA" 
    else: 
     return cleaned 

org_val=udf(cleaning_text,StringType()) 
df_new =df.withColumn("cleaned_short_desc", org_val(df["symptom_short_description_"])) 
df_new =df_new.withColumn("cleaned_long_desc", org_val(df_new["long_description"])) 
longWordsDF = (df_new.select(explode(split('cleaned_long_desc',' ')).alias('word')) 
longWordsDF.count() 

Je reçois l'erreur suivante.

File "<stdin>", line 2, in cleaning_text AttributeError: 'NoneType' object has no attribute 'lower'

Je veux effectuer le nombre de mots, mais tout type de fonction d'agrégation me donne une erreur.

J'ai essayé des choses suivantes:

sentence=sentence.encode("ascii", "ignore") 

ajouté cette déclaration dans la fonction cleaning_text

df.dropna() 

Son donnant toujours le même problème, je ne sais pas comment résoudre ce problème.

Répondre

1

Il semble que vous ayez des valeurs nulles dans certaines colonnes. Ajoutez un si au début de la fonction cleaning_text et l'erreur disparaîtra:

if sentence is None: 
    return "NA"