文本比较算法Ⅴ——回顾贴,对前面几篇文章的回顾与质疑

简介:

文本比较算法Ⅰ——LD算法

  文本比较算法Ⅱ——Needleman/Wunsch算法

  文本比较算法Ⅲ——计算文本的相似度

  文本比较算法Ⅳ——Nakatsu算法

  在写了本系列的前面几篇文章之后。有些网友质疑文章的正确性。在仔细的推敲之下,这些网友指正的不无道理。下面举一个反例,来质疑前面文章的正确性。

  文本:A:481234781;B:4411327431

  先按照LD算法,计算LD矩阵  

    4 4 1 1 3 2 7 4 3 1
  0 1 2 3 4 5 6 7 8 9 10
4 1 0 1 2 3 4 5 6 7 8 9
8 2 1 1 2 3 4 5 6 7 8 9
1 3 2 2 1 2 3 4 5 6 7 8
2 4 3 3 2 2 3 3 4 5 6 7
3 5 4 4 3 3 2 3 4 5 5 6
4 6 5 4 4 4 3 3 4 4 5 6
7 7 6 5 5 5 4 4 3 4 5 6
8 8 7 6 6 6 5 5 4 4 5 6
1 9 8 7 6 6 6 6 5 5 5 5

  可知,LD(A,B)=5,最佳匹配为

  A:4812347_81

  B:4411327431

  再按照LCS算法,计算LCS矩阵 

    4 4 1 1 3 2 7 4 3 1
  0 0 0 0 0 0 0 0 0 0 0
4 0 1 1 1 1 1 1 1 1 1 1
8 0 1 1 1 1 1 1 1 1 1 1
1 0 1 1 2 2 2 2 2 2 2 2
2 0 1 1 2 2 2 3 3 3 3 3
3 0 1 1 2 2 3 3 3 3 4 4
4 0 1 2 2 2 3 3 3 4 4 4
7 0 1 2 2 2 3 3 4 4 4 4
8 0 1 2 2 2 3 3 4 4 4 4
1 0 1 2 3 3 3 3 4 4 4 5

  可知,LCS(A,B)=5,匹配为

  A:4_81_234781

  B:44113274_31

  不是最佳匹配,而蓝色部分41241的确是最长公共子序列。只是和LD算法算出的最长公共子序列不一样而已。这个说明,最长公共子序列不是唯一的。问题出在哪?出在白色部分的第7行第8列这个单元格的回溯上,在这个单元格,有两个方向可以选,一个是向上,一个是向左,在前文中说到,回溯时优先考虑左上角、上方、下方的顺序。这个是不完全正确的。本例中,这个单元格向左回溯能得到最佳匹配。

 

  然后看看,Nakatsu算法的L矩阵

 

    4 8 1 2 3 4 7 8 1
  i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9
k=0 0 0 0 0 0 0 0 0 0 0
k=1 V 1 1 1 1 1 1 1 1 1
k=2 V V V 3 3 3 2 2 2 2
k=3 V V V V 6 5 5 5 5 3
k=4 V V V V V 9 8 7 7 7
k=5 V V V V V V V V V 10
k=6 V V V V V V V V V V
k=7 V V V V V V V V V V
k=8 V V V V V V V V V V
k=9 V V V V V V V V V V

  正如网友Sumtec指正,红色部分才是最长公共子序列的下标。

  出于好奇,我分析了L矩阵中那些数值

  L(k,i)=j→LCS(i,j)=k

  于是在LCS中,把这些对应值表示出来

  

    4 4 1 1 3 2 7 4 3 1
  0 0 0 0 0 0 0 0 0 0 0
4 0 1 1 1 1 1 1 1 1 1 1
8 0 1 1 1 1 1 1 1 1 1 1
1 0 1 1 2 2 2 2 2 2 2 2
2 0 1 1 2 2 2 3 3 3 3 3
3 0 1 1 2 2 3 3 3 3 4 4
4 0 1 2 2 2 3 3 3 4 4 4
7 0 1 2 2 2 3 3 4 4 4 4
8 0 1 2 2 2 3 3 4 4 4 4
1 0 1 2 3 3 3 3 4 4 4 5

  可以看出,L矩阵的元素表示每一行每个值出现的最左边的位置。这个能求出最长公共子序列。不过,能否求出最佳匹配,还得思量一番。

 

  最近在研究国外的两篇论文,估计研究完了,应该会有所收获。

  《A longest common subsequence algorithm suitable for similar text strings》

  《An almost-linear time and linear space algorithm for the longest common subsequence problem》

 

  在这里打个广告。这两篇论文,在网上能找到下载页面,但因为没有帐号,所以一直无法下载。昨天在“小米粒资源网”上发帖求助,不过半小时而已,就有人帮你下载,共享给你。效果非常好,在这里也向帮我下载的网友致敬。如果,你需要找一些学术论文(无论是中文的还是英文的),不妨在“小米粒资源网”试试,也许会有意想不到的惊喜。

相关文章
|
3月前
|
数据采集 算法 数据可视化
基于Python的k-means聚类分析算法的实现与应用,可以用在电商评论、招聘信息等各个领域的文本聚类及指标聚类,效果很好
本文介绍了基于Python实现的k-means聚类分析算法,并通过微博考研话题的数据清洗、聚类数量评估、聚类分析实现与结果可视化等步骤,展示了该算法在文本聚类领域的应用效果。
|
2月前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
42 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
4月前
|
机器学习/深度学习 数据采集 算法
Python基于KMeans算法进行文本聚类项目实战
Python基于KMeans算法进行文本聚类项目实战
148 19
|
3月前
|
算法 数据可视化 搜索推荐
基于python的k-means聚类分析算法,对文本、数据等进行聚类,有轮廓系数和手肘法检验
本文详细介绍了基于Python实现的k-means聚类分析算法,包括数据准备、预处理、标准化、聚类数目确定、聚类分析、降维可视化以及结果输出的完整流程,并应用该算法对文本数据进行聚类分析,展示了轮廓系数法和手肘法检验确定最佳聚类数目的方法。
|
3月前
|
数据采集 自然语言处理 数据可视化
基于Python的社交媒体评论数据挖掘,使用LDA主题分析、文本聚类算法、情感分析实现
本文介绍了基于Python的社交媒体评论数据挖掘方法,使用LDA主题分析、文本聚类算法和情感分析技术,对数据进行深入分析和可视化,以揭示文本数据中的潜在主题、模式和情感倾向。
100 0
|
4月前
|
文字识别 算法 Java
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
|
4月前
|
算法 JavaScript
「AIGC算法」将word文档转换为纯文本
使用Node.js模块`mammoth`和`html-to-text`,该代码示例演示了如何将Word文档(.docx格式)转换为纯文本以适应AIGC的文本识别。流程包括将Word文档转化为HTML,然后进一步转换为纯文本,进行格式调整,并输出到控制台。转换过程中考虑了错误处理。提供的代码片段展示了具体的实现细节,包括关键库的导入和转换函数的调用。
38 0
|
机器学习/深度学习 自然语言处理 算法
解读未知:文本识别算法的突破与实际应用
解读未知:文本识别算法的突破与实际应用
解读未知:文本识别算法的突破与实际应用
|
文字识别 算法 Shell
突破边界:文本检测算法的革新与应用前景
突破边界:文本检测算法的革新与应用前景
突破边界:文本检测算法的革新与应用前景
|
人工智能 自然语言处理 算法
Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索
Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索
Similarities:精准相似度计算与语义匹配搜索工具包,多维度实现多种算法,覆盖文本、图像等领域,支持文搜、图搜文、图搜图匹配搜索