我正在使用推文创建单词嵌入。我已经删除了完整的重复项,但是现在我也需要删除几乎重复项,比方说,如果我的语料库中有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