清理 pandas 列中的文本

Cleaning text in a pandas column

我在清理此数据集时遇到问题:

我需要绘制此数据集中的 Text 列:

Date                 Account  Text
0   [28/07/2018]    412 ‎   [MAN]
1   [28/07/2018]    21403   ‎['photo', 'photo']
2   [28/07/2018]    3193    [Describe, Links']
3   [28/07/2018]    4239    ‎['photo']
4   [03/08/2018]    051     []
5   [03/08/2018]    21      []
6   [16/08/2018]    4124    ['XCUUE', 'HB']
7   [16/08/2018]    412     [program]
8   [16/08/2018]    410     []
9   [16/08/2018]    9543    [Links]

具体来说,我需要处理“文本”列。该列中的行是标记化的结果,因此它们包含在括号中。我想做的是将这些词绘制在词云或简单的条形图中以研究它们的频率。 我遇到的问题是同一个词的重复,例如 'photo' 'photo' 当我尝试绘制频率时。

我的代码用于为词云准备数据集。

comment_words = '' 
stopwords = remove_stop() # you can use a default one
  
for val in df['Text']: 
        
    tokens = val.split() 
      
    for i in range(len(tokens)): 
        tokens[i] = tokens[i].str.lower()
      
    comment_words += " ".join(tokens)+" "
  
wordcloud = WordCloud(width = 800, height = 800, 
                background_color ='white', 
                stopwords = stopwords, 
                min_font_size = 10).generate(comment_words) 

如果您能看看或尝试不同的方法来解决这个重复单词的问题(频率很重要,所以我不能删除任何重复的行)并最终用引号 '.谢谢

您可以采用多种方法来解决从给定行中删除重复单词的问题。这是一个:

for val in df['Text']: 
        
    tokens = val.split()

    tokens = list(set(tokens))
      
    for i in range(len(tokens)): 
        tokens[i] = tokens[i].str.lower()
      
    comment_words += " ".join(tokens)+" "

如果要去除记录中重复的with(通过去除记录中的重复来绘制wordcloud是没有意义的):

import pandas as pd
from wordcloud import WordCloud
from nltk.corpus import stopwords
import matplotlib.pyplot as plt

def plot(words):
  wordcloud = WordCloud(width = 800, height = 800, 
                  background_color ='white', 
                  stopwords = stopwords.words('english'), 
                  min_font_size = 10).generate(" ".join(words)) 

  plt.figure()
  plt.imshow(wordcloud, interpolation="bilinear")
  plt.axis("off")
  plt.show()

# Data
df = pd.DataFrame({'Text':
                   [
                    ['MAN'], 
                    ['photo', 'photo'], 
                    ['Describe', 'Links'],
                    ['photo'], [], [], 
                    ['XCUUE', 'HB'], 
                    ['program'], [], 
                    ['Links']
                   ]})

# Remove duplicates within records
words = df['Text'].apply(lambda x: list(set(x))).tolist()
words = [item for sublist in words for item in sublist]

plot(words)

造字case-insensitive

plot([w.lower() for w in words])

最后,如果您的数据框记录是未标记化的文本,如下所示

df = pd.DataFrame({'Text': ['MAN', 'photo photo', 'Describe Links', 'photo', ' ', ' ', 'XCUUE HB', 'program', 'Links']})

那你可以

words = df['Text'].apply(lambda x: list(set(x.split()))).tolist()
words = [item for sublist in words for item in sublist]
plot([w.lower() for w in words])