similarity - 检查 x 文本之间的相似度
问题描述
我目前正在做一个项目,我需要检查几个文本之间的重复百分比。目标是尽可能接近谷歌的重复处理。
在做了很多研究之后,我认为 Simhash 是最适合这个的。有许多库和许多参数。
使用我受到启发的https://github.com/nicolaichuk/SimHashPhp库,使用此代码计算索引:
/**
* Similarity index
*
* @param int $countDifferences
* @return float
*/
protected function computeSimilarityIndex($countDifferences)
{
return $this->gaussianDensity($countDifferences) / $this->gaussianDensity(0);
}
/**
* Guassian distribution density
*
* @param int $x
* @return float
*/
protected function gaussianDensity($x)
{
$y = - (1 / 2) * pow($x / $this->deviation, 2);
$y = exp($y);
$y = (1 / sqrt(2 * pi())) * $y;
return $y;
}
在检索到我的两个文本的指纹后,我想知道两个文本之间的相似度百分比。
除了当我从 64 位 SIMHASH 到 128 或 256 时,不同位的数量增加并且我的索引变得越来越小(使用 xxxxxE-19、xxxxE-40)。
在图书馆设计者的文章中(https://web.archive.org/web/20150227194138/http://www.titouangalopin.com/blog/2014-05-29-simhash),他解释了一个更简单的公式: 1 - (diffCount / nbBit)
除了如果我应用这个公式而不是 gaussianDensity,结果与互联网上的其他工具不一致,并且给出了非常错误的值。
所以我有点卡住了......有人有想法让我摆脱 Simhash 的这个问题,或者有另一个想法来检查几个文本之间的相似性吗?
感谢,并有一个愉快的一天 !
解决方案
推荐阅读
- python - GroupBy 后无法重命名列
- regression - 残差对拟合值图的解释是什么?
- reactjs - 将页面的值从 Pagination.jsx 传递给 App.jsx
- android - 可选的共享库
- javascript - 打印javascript函数树
- python-3.x - 如何在不使用除 Numpy 之外的任何库的情况下循环数据集以将字符串转换为浮点数、替换和拆分为列表?
- php - PHP - 获取谷歌显示的价格
- java - 如何检查 IBAN 验证?
- java - Java Connect oracle 数据库 TNS
- jwt - 在 Keycloak 中生成 JWT Token 并获取公钥以在第三方平台上验证 JWT Token