|
98楼

楼主 |
发表于 2021-5-24 22:11:25
|
只看该作者
广东省东莞市
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# Author:Administrator 作者
# FileName:dome1 文件名称
# DateTime:2021/5/24 22:03 当前时间
# SoftWare: PyCharm 创建文件的IDE名称
import numpy as np
def Smith_Waterman(str1, str2, s_score, m_score):
len1, len2 = len(str1), len(str2)
matrix = np.zeros([len1 + 1, len2 + 1])
for i in range(len1):
matrix[i, 0] = 0
for i in range(len2):
matrix[0, i] = 0
Space = 0
for i in range(1, len1 + 1):
for j in range(1, len2 + 1):
Mkj = matrix[i-1, j] - Space
Mik = matrix[i, j-1] - Space
Mij = matrix[i-1, j-1] + 1 if str1[i-1] == str2[j-1] else matrix[i-1, j-1] -1
matrix[i, j] = max(Mij, Mkj, Mik, 0)
match_str1, match_str2, match_rate = Trace_back(str1, str2, matrix, Space)
# print(match_str1)
# print(match_str2)
# print(match_rate)
return match_str1, match_str2, match_rate
def Trace_back(str1, str2, M, Space):
#find max
x, y = np.where(M == np.max(M))
x, y = x[0], y[0]
# print(M)
# print(x, y)
match_str1, match_str2 = '', ''
match_count = 0
score = 0
count = 0
while M[x, y] != 0:
count += 1
# print(x, y)
if M[x - 1, y] - Space == M[x, y]:
x = x -1
match_str1, match_str2 = str1[x] + match_str1, '_' + match_str2
score += 0.5
elif M[x, y - 1] - Space == M[x, y]:
y = y - 1
match_str1, match_str2 = '_' + match_str1, str2[y] + match_str2
score += 0.5
else:
x, y = x-1, y-1
match_str1, match_str2 = str1[x] + match_str1, str2[y] + match_str2
match_count += 1
score += 1
# match_rate = match_count/min(len(str1), len(str2))
return match_str1, match_str2, score/count
if __name__ == '__main__':
str1 = '''刚吹牛完就被美颜社打了'''
str2 = '第一件事,说拜登,刚“吹牛”完就被美联社打了 你吹的是什么牛?为了反映个人成就,最近,据美联社报道,当地时间5月3日,乔拜登严重夸大了新冠肺炎的疫苗接种人数。 虽然印度疫情在最近一段时间有所爆发,但美国依然“高居榜首”,但有趣的是,拜登在弗吉尼亚州朴茨茅斯的演讲中标榜自己的政治成就,“超额完成了疫苗接种任务”。 总之,拜登说,他当选后,承诺执政100天给1亿人打疫苗。然而,事实证明,他已经为2.3亿人接种了疫苗。 对此,美国媒体立即曝光了拜登的谎言。事实上,拜登的承诺和实际结果都是错误的。第一,承诺数量少。到3月底,拜登已经将目标金额增加到2亿美元。第二,只有1.06亿人全面接种,而不是拜登所说的2.3亿人。除此之外,一亿多人只接到一个镜头,还差一个镜头。 第二件事,据国外媒体报道:莫迪的政党受到重创 随着疫情蔓延,印度大选如火如荼,但莫迪的“收获”却令人担忧。据西班牙网站《世界报》报道,印度总理莫迪领导的印度人民党在西孟加拉邦、泰米尔纳德邦和喀拉拉邦的选举中落败。 在此之前,莫迪强攻,全力应对整体可控疫情,成功挺过了第一次疫情。但就像印度随之而来的各种大规模集会,特别是大选期间,大量民众聚集,导致第二波疫情,印度濒临崩溃。 确诊感染者人数连续多日创新高,一天之内从20万、30万到40万。印度疫情全面崩溃,创造了全球新纪录。很多人把矛头指向莫迪,认为他应该为此承担不可推卸的责任。最直接的反应体现在大选票数上。在很多选区,莫迪的政党损失惨重,第一巴掌来自关键州的选举结果。 第三件事是英法争端升级,法国准备报复英国 英法之间关于海洋资源,特别是捕鱼权的争端再次升级。据英国广播公司(BBC)消息,当地时间5月4日,法国政府威胁要切断英国泽西岛的电力供应,原因是英国退出欧盟事件后,英法之间关于捕鱼权的争端升级。 据公开报道,主要原因是英国在4月30日公布了法国渔船名单。这份名单规定,从5月1日起,只有41艘装有船舶监控系统的法国渔船被允许进入英国水域捕鱼。而且英国不仅规定了渔船可以进入的水域,还规定了捕鱼作业的具体日期。 对此,法国渔民非常不满,强烈反对。至于英国单方面的新要求,法国海洋部也在新闻稿中表示,这些要求是无效的。 泽西岛是英吉利海峡群岛中最大的岛屿,95%的电力来自法国的三条海底电缆。法国海外事务部长安妮克吉拉丁表示,法国准备报复。'
str3=Smith_Waterman(str1, str2, 0.5, 1)
print(str3)
我提供一份py的代码,但是,其中有些文本 匹配不了
比如 把 str1 = '''一天之内从200030万到40万'''
这样匹配出来就是出来就是有问题的 |
|