我必须从损坏的文本文件中搜索某些标签,因为文件已损坏数据已更改(某些字符已删除且某些字符已被修改)。 例如,我必须搜索标签 - > " No of Pages"
文字档案1:
BHASKAR RAO MUKKU(57)摘要在该系统中,2个带踏板的踏板杆,一个侧球轴,空心副轴,副轴,两个花键齿轮,两个圆弧齿轮上的离合器销孔,两个花键齿轮它具有圆形齿轮上的棘轮齿轮,链轮,四个离合器销和用于将普通自行车转换成齿轮自行车的肝脏。 数量页面:10
文本文件2:
BHASKAR RAO MUKKU(57)摘要在该系统中,2个带踏板的踏板杆,一个侧球轴,空心副轴,副轴,两个花键齿轮,两个圆弧齿轮上的离合器销孔,两个花键齿轮它具有圆形齿轮上的棘轮齿轮,链轮,四个离合器销和用于将普通自行车转换成齿轮自行车的肝脏。 否。页数:10
文本文件3:
BHASKAR RAO MUKKU(57)摘要在该系统中,2个带踏板的踏板杆,一个侧球轴,空心副轴,副轴,两个花键齿轮,两个圆弧齿轮上的离合器销孔,两个花键齿轮它具有圆形齿轮上的棘轮齿轮,链轮,四个离合器销和用于将普通自行车转换成齿轮自行车的肝脏。 页数:10
以上是一些文本文件示例。正如您在上述所有文件中看到的那样,单词 NUMBER 已被修改为三种不同的形式,现在对于所有这3个文件,我的代码必须输出相应的粗体字。
我到目前为止尝试的是在文本文件中找到标签和连续字符串之间最长的公共子序列(长度几乎等于标签的长度),然后计算匹配字符的百分比,如果该百分比> 85我的代码输出连续字符串。
我的代码
def lcs(S,T):
m = len(S)
n = len(T)
counter = [[0]*(n+1) for x in range(m+1)]
longest = 0
lcs_set = set()
for i in range(m):
for j in range(n):
if S[i] == T[j]:
counter[i+1][j+1] = counter[i][j]+1
else:
counter[i+1][j+1]=max(counter[i+1][j],counter[i][j+1])
return counter[m][n]
def match(word,tag):
word=modify(word)
tag=modify(tag)
sq=lcs(word,tag)
return(float(float(sq)/float(max(len(word),len(tag)))))
i=0
start=end=0 #records position of the matched tag in string
p=0.85 #percentage
while i <len(string): #string contains the text file
j=i
while j <i+len(tag)+7:#tag is the tag we want to search
arr=match(string[i:j+1],tag)
#print(str(p)+" "+str(arr)+' '+string[i:j+1]+' '+str(i))
if (arr>p):
p=arr
start=i
end=j
elif(p==arr):
p=arr
if(end-start>=j-i):
start=i
end=j
j+=1
i+=1
但是,对于许多情况,例如文本文件1,此代码会失败。还有其他方法可以更准确,更有效地进行搜索。