之前有个需求,就是比较2个文本是否相近。

最牛逼的方法就是用语义去分析,然后比较结果。可是这个性能是在不敢恭维,于是想起了以前做过的人脸识别,使用特征值去操作。

人脸识别当是时把图片转变为一维向量,然后计算特征值。最终发现,如果是文本计算特征值,把文本的字符串输入后,简单的简化为每个char自相乘,再相加 = 向量的模的平方。

例如:

HI = (char 72)(char 73).

eigenValue = 72*72+73*73.

这样,IH的结果和HI就是一样了。 而且另外一个问题就是char的取值范围是0~255。如果对文本检测,那么很快就会超过了double的长度了。针对这些问题,我自己想到了一个算法。

代码

        public static double GetStringEigenValue(string value)
        {
            if (string.IsNullOrEmpty(value))
                return 0;

double length = value.Length;

double eigenvalue = 0;

int index = 1;

foreach (char str in value)
            {
                double strnum = (double)str;

eigenvalue += (strnum * strnum) / 100000 * index++;
            }

//计算由于每个位置添加了权重,导致最终值增加的值

double weightfactor = (length - 1) * 255 * 255 / 100000 + (length - 1) * (length - 2) * 255 * 255 / 2 / 100000;

if (weightfactor == 0)
                weightfactor = 1;

weightfactor = Math.Ceiling(Math.Log10(weightfactor));

if (weightfactor == 0)
                weightfactor = 1;

eigenvalue /= weightfactor;

eigenvalue /= length;

return length + eigenvalue;
        }

这里简单说下原理,还是很简单白痴的。

1.  char的取值范围是0~255.那么 char相乘的最大值=  255*255 = 65025. 我为了每次都让特征值保持在小数,于是除以了10000.

eigenvalue += (strnum * strnum) / 100000 * index++

2. 考虑到字符串位置的问题,我每个字符串都乘以了位置权重 index,这样不同顺序的字符串结果就一定不同了。

eigenvalue += (strnum * strnum) / 100000 * index++

3. 可是由于每个字符运算的时候都添加了权重,导致了结果比没有添加权重的大了很多。大了多少?我就按照 65025这个等差数列去运算:

N* 65025 + N(N-1)* 65025 /2, N = length -1

double weightfactor = (length - 1) * 255 * 255 / 100000 + (length - 1) * (length - 2) * 255 * 255 / 2 / 100000;

4. 最后,我计算这个增加的额外值到底是10的多少次方(需要再缩小多少)。得到:

weightfactor = Math.Ceiling(Math.Log10(weightfactor));

5. 然后根据权重放大的倍数,就是特征值再缩小回小数部分:

eigenvalue /= weightfactor;

6. 由于特征值结果是每个位置的char相乘再相加,因此相加导致放大的倍数 = 255*255/100000*length的倍数。因此就是length。最终需要缩小到小数:

eigenvalue /= length;

7. 为了保证不同长度的字符串可能计算出来的结果会一样,最终结果会再加上了字符串的长度。

return length + eigenvalue;

最后这个值,就是代表了这个文本的特征值了。整数部分是长度,小数部分是相似度。

最后,请各位大牛们拍拍砖。。。。小弟数学不才,在此献丑了。

转载于:https://www.cnblogs.com/zc22/archive/2010/09/05/1818540.html

最近在做文本匹配,想到了特征值的算法,自己写了一个文本计算算法。求批判。...相关推荐

  1. “应付”大学作业,我花3小时写了一个“文本转手写”神器

    作者 | Saurabh Daware 译者 | 弯月,责编 | 郭芮 来源 | CSDN(ID:CSDNnews) 最近,有一个名叫Saurabh Daware的印度大学生只花了3个小时就编写了一款 ...

  2. 自己试验写的一个文本转语音的一个小程序

    在工作中,会出现这个场景,需要对设备进行老化试验,会随机的对设备进行操作(通过上位机),产生告警,并且要判断终端是否真的动作了,我是将动作节点采集并上传然后有文字报警,另外要手动干预输入点,产生变位信 ...

  3. access文本框如何分开_ACCESS 2007 如何在窗体中将一个文本框的内容复制给另外一个文本框?...

    展开全部 假设:把文本框控件 Text1 里面的内容复制到文本框控件 Text2 中.. 如果,Text1 和 Text2 在同一个窗体e69da5e6ba9032313133353236313431 ...

  4. 我写了一个“文本转手写”神器来搞定作业!

    作者 | Saurabh Daware 译者 | 弯月,责编 | 郭芮 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 以下为译文: 最近,有一个名叫Saurabh ...

  5. c语言编程加密和解密,请问有学长做过这个程序设计的吗?C语言写加密解密问题,跪求代码!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 加解密处理 1.系统的基本功能 编写一个对文件(由数字或字母组成)进行加密解密的程序.可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的 ...

  6. c语言密文解密程序,请问有学长做过这个程序设计的吗?C语言写加密解密问题,跪求代码!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 加解密处理 1.系统的基本功能 编写一个对文件(由数字或字母组成)进行加密解密的程序.可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的 ...

  7. 手机python文本编辑器下载_python写的一个文本编辑器

    代码如下: #!/usr/bin/env python #-*- coding: utf-8 -*- #================================================ ...

  8. 语义匹配(二)搜狐文本匹配大赛BaseLine比较:P-tuning和Conditional_LN实现多任务语义匹配

    语义匹配(二)搜狐文本匹配大赛BaseLine比较:P-tuning和Conditional_LN实现多任务文本匹配 比赛简介 数据样例 任务解读 即插即用的多任务模块 P-tuning P-tuni ...

  9. 深度文本匹配在智能客服中的应用

    参加2018 AI开发者大会,请点击↑↑↑ 作者 | 云知声 目录 一. 深度文本匹配的简介 1. 文本匹配的价值 2. 深度文本匹配的优势 3. 深度文本匹配的发展路线 二. 智能客服的简介 1.  ...

最新文章

  1. springcloud是什么_阿里P8道出,入职阿里必会199道SpringCloud面试题,你能掌握多少?...
  2. Kaggle狗的种类识别竞赛——基于Pytorch框架的迁移学习方法
  3. 战棋类中实现的移动范围
  4. Boost:bind绑定查找问题的测试程序
  5. 【数据结构与算法】之深入解析KMP算法的核心原理和实战演练
  6. CodeForces 1514A Perfectly Imperfect Array
  7. Bootstrap 弹出提示插件Popover 的方法
  8. 华为P30系列双景录像功能上线:同屏展示全景与特写
  9. php txt bom,使用 PHP 函数或者软件去除文件的 BOM 头字符 - 文章教程
  10. Unity中的存档与读档
  11. win10重装系统修改信息
  12. 《PyQt5高级编程实战》学会使用视图委托
  13. 工作十年的数据分析师被炒,没有方向,你根本躲不过中年危机
  14. ubuntu中firefox无法播放视频的解决方法
  15. 计算机管理员基础知识,计算机网络管理员(基础知识)
  16. thinkphp使用force
  17. CleanMyMac X软件不为人知的实用功能技巧
  18. WSC——商务软件解决方案技能
  19. 实验3 路由器的基本配置和远程登录
  20. java 单点登出_CAS单点登出的原理

热门文章

  1. 多重积分积分区域奇偶对称性化简积分
  2. 华为HCIE-Cloud Computing知识点整理—FusionCloud
  3. MES如何实现生产过程全追踪
  4. 《University Calculus》-chape12-偏导数-基本概念
  5. Java即时编译器原理解析及实践
  6. php使用sqlserver
  7. 2022.04.14【读书笔记】|WGCNA分析原理和数据挖掘技巧
  8. java环境classpath_JAVA中的环境变量配置 PATH CLASSPATH
  9. 大数据相关开源项目汇总
  10. JPG图片插入到CAD图纸中的2种方法