需求:
有两列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()
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()
发表回复