首页 > 解决方案 > PySpark - 文本列的余弦相似度

问题描述

我正在尝试对来自两个数据帧的文本执行余弦相似度分析。

我通过删除所有停用词来清理文本,并执行了词干提取。

我的数据框中剩下两列,如下所示:数据框一只有一行用于词干列

df1 =

Stemmed col
every solut catch except new

而数据框二的词干列有多行

df2= 

colum_num    stemmed col

    1         every except new
    2         didnt find solut ye
    3         fatal except main 
    4        access databas everi 

我希望得到一个输出,在词干 col 旁边显示每个余弦相似度值,然后我想选择余弦相似度最高的列

df_cosine_similarity = 

colum_num    stemmed col                cosine_similarity

    1         every except new               0.230
    2         didnt find solut ye            0.652
    3         fatal except main              0.095
    4        access databas everi            0.159


   original_text_body                highest_similarity        cosine_similarity
every solut catch except new           didnt find solut ye            0.652

到目前为止,我知道我需要对词干文本进行矢量化,因此我尝试创建一个文本到矢量函数:

def text_to_vector(text):
    words = WORD.findall(text)
    return Counter(words)

def get_cosine(vec1, vec2):
    intersection = set(vec1.keys()) & set(vec2.keys())
    numerator = sum([vec1[x] * vec2[x] for x in intersection])

    sum1 = sum([vec1[x] ** 2 for x in list(vec1.keys())])
    sum2 = sum([vec2[x] ** 2 for x in list(vec2.keys())])
    denominator = math.sqrt(sum1) * math.sqrt(sum2)

    if not denominator:
        return 0.0
    else:
        return float(numerator) / denominator

不幸的是,这些功能没有按照他们应该的方式工作

标签: pythonpyspark

解决方案


推荐阅读