词典相似度比较

需求:

有两列A和B,每一列的行都是不重复的一个单词或短语,要求以A为主体,在B找出与A相似度>X%的B短语,并输出到文本进行后续处理。
其中A和B在不同的表里,数据也有重合。需要一定的处理才能得到A和B。
其中A约1600行,B约800行。

用mysql写了个相似度的函数,当然可能是因为原表比较复杂的原因,跑了近1个小时了也没出来。

然后参考网上的代码用python写了个原型,执行起来大概1~2分钟的样子。
A和B分别放进不同的文件,最终生成C。

from difflib import SequenceMatcher

def calculate_similarity(s1, s2):
    return SequenceMatcher(None, s1, s2).ratio()

def main():
    with open('a.txt', 'r',encoding='utf-8') as file_a, open('b.txt', 'r',encoding='utf-8') as file_b, open('c.txt', 'w') as output_file:
        phrases_a = file_a.read().splitlines()
        phrases_b = file_b.read().splitlines()
       
        for phrase_a in phrases_a:
            for phrase_b in phrases_b:
                similarity = calculate_similarity(phrase_a, phrase_b)
                if similarity > 0.7:
                    output_file.write(f"{phrase_a}||{phrase_b}\n")

if __name__ == "__main__":
    main()