如何从另一个文本文件中的一个文本文件中找到字符串的匹配字符串?

时间:2017-12-13 21:20:37

标签: algorithm pattern-matching string-matching pattern-recognition viterbi

我有两个文本文件。它们都具有相同的内容,但每种格式都不同。在一个文件中,单词或字母之间有额外的空格。还有不同的换行符。例如:

File1中:

The annotation framework we presented is 
embedded in the Knowledge Management and 
Acquisition Platform Semantic Turkey (Pazienza, et 
al., 2012), and comes out-the-box with a few 
annotation families which differ in the underlying 
annotation model and, notably, in the tasks they 
support. The default handlers take into consideration 
the annotation of atomic ontological resources, and 
complex activities that are provided as macros, e.g. 
the creation of new instances, the definition of new 
subclasses in OWL, or of narrower concepts in 
SKOS. 

文件2:

Theannotationframework we presented is 
embedded in th e K n o w l e d ge Management and 
Acquisition Platform Semantic Turkey (Pazienza, et 
al., 2012), and comes out-the-
box with a few 
annotation families which differ in the underlying 
annotation model and, notably, in the tasks they 
support. The default handlers take into consideration 
the a n n o t a t i o n  o f a t o m i c ontological resources, and 
complex activities that are provided as macros, e.g. 
the creation of new instances, the definition of new 
subclasses in OWL, or of narrower concepts in 
SKOS.

假设我从File1中选择了字符串the Knowledge Management,我想将它与File2中的字符串th e K n o w l e d ge Management匹配。

我怎样才能实现它?第二个文件中没有固定的畸形。唯一可以肯定的是,两个文件中的字符顺序相同,它们可能被额外的空格分开,或者它们之间的空间可能会丢失。

我想过应用卖家算法或维特比算法,但我不确定。近似字符串匹配也可能很昂贵。

任何领导都会有所帮助。 非常感谢!

2 个答案:

答案 0 :(得分:1)

你应该意识到你没有两个文本,但几乎只有一个文本,所有角色都在同一个位置!

通过什么魔法?嗯,它足以剥离所有的空格和分隔符,或者更好的是,当你从一个角色向前移动时跳过它们。

您可以轻松地并行遍历两个文本,保持同步,无需搜索

例如,“the Knowledge Management”和“th e K n o w l e d ge Management”都从第45位到第67位。

如果您不知道第一个文本中搜索字符串的起始位置,则在第一个文本中执行普通搜索(使用或不使用空格,这取决于您),并将第二个文本遍历到相同的文本位置。

The annotation framework we presented is
0          1         2           3 
0122345678901223467890122344567890123345

如果您需要在文本中执行多个字符串位置,则每次从头开始遍历会变得昂贵。然后,您可以使用将无空白位置与普通位置相关联的索引表,并在必要时执行二进制搜索。

答案 1 :(得分:0)

您可以将文件导入为字符串,并从两者中删除所有空格。它应该是一个直接的字符串匹配活动。

如果您还需要匹配模式的起始索引,请获取折叠字符串中起始点的索引,并在间隔开的版本上运行for循环,仅计算字符数。