如何使近重复删除代码更快?

时间:2019-04-21 08:39:40

标签: python-3.x performance duplicates jupyter-notebook

我正在使用推文创建单词嵌入。我已经删除了完整的重复项,但是现在我也需要删除几乎重复项,比方说,如果我的语料库中有5条tweet有80%重叠,则应该只保留其中1条。我正在使用来自textdistance库的levenshtein.normalized_similarity()距离度量来遍历我的推文。但是,这需要永远的时间...我怎样才能使其更快?任何建议,将不胜感激!

在df数据框下面的代码中,推文本身包含变量tweet ID(ID)(SentimentText_Clean,类型:字符串)。在每次迭代中,选择第一个鸣叫并将其与其余所有其他鸣叫进行比较。然后,从原始数据框中删除所选的tweet,并将其添加到新的tweet中。如果相似度大于阈值,则从数据帧中删除这些推文。重设索引,并选择新的第一条推文。

我也已经尝试了其他距离测量方法,但这似乎并不快。另外,我尝试仅删除转发,但这并不是我真正需要的。此外,我尝试使用列表代替熊猫,但这似乎并不快。

import textdistance

def remove_near_duplicates(df, threshold = 0.8):

   new_df = pd.DataFrame(columns=["ID", "SentimentText_Clean", 
                                  "Sim"])

   while len(df) > 0: 

      comp = df["SentimentText_Clean"][0]
      t_id = df["Tweet_ID"][0]
      df["Sim"] = df["SentimentText_Clean"].apply(lambda x: 
        textdistance.levenshtein.normalized_similarity(comp, x))
      new_df = new_df.append(df.iloc[[0]])
      df = df.iloc[1:]
      df = df.loc[df["Sim"] < threshold]
      df.reset_index(drop = True, inplace = True)

   return new_df

0 个答案:

没有答案