我必须从已损坏的文本文件中搜索某些标签,因为文件已损坏,数据已更改(某些字符已删除,有些已被修改)。例如,我必须搜索标签->“页数”
文本文件 1:
BHASKAR RAO MUKKU (57)Abstract 在这个系统中,有 2 个带踏板的踏板杆、一侧球轴、空心辅助轴、副轴、两个在圆形节距上有两个离合器销孔的花键齿轮、两个带棘轮的花键齿轮圆节距的齿轮、链轮、四个离合器销和一个肝脏,用于将普通自行车改装成齿轮自行车。页数:10
文本文件 2:
BHASKAR RAO MUKKU (57)Abstract 在这个系统中,有 2 个带踏板的踏板杆、一侧球轴、空心辅助轴、副轴、两个在圆形节距上有两个离合器销孔的花键齿轮、两个带棘轮的花键齿轮圆节距的齿轮、链轮、四个离合器销和一个肝脏,用于将普通自行车改装成齿轮自行车。页数:10
文本文件 3:
BHASKAR RAO MUKKU (57)Abstract 在这个系统中,有 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,此代码会失败。是否有任何其他方法可以更准确有效地进行搜索。