manuwhat/similar-text

similar-text - 比较两个字符串以计算相似度得分

dev-master 2019-04-29 17:09 UTC

This package is auto-updated.

Last update: 2024-09-29 05:01:11 UTC


README

Build Status Scrutinizer Code Quality Build Status Code Intelligence Status

库,用于比较两个字符串以计算相似度得分,并获取有关字符串之间关联程度的统计数据。

要求: PHP 5.3+

这个库到底做了什么?

这个库可以比较两个字符串以计算相似度得分。

它接受两个字符串的文本,并使用纯PHP代码分析它们,以评估它们的相等程度。

该类返回一个数字,表示两个字符串的相似度百分比。

基于提供的统计数据,它实际上可以帮助检测相似度,即使发生以下情况:单词重新排序、空格和标点符号、删除单词、添加单词、URL剥离、形成缩写、扩展缩写、词干提取、子字符串、超字符串、缩写、字母表

如何使用它

通过以下命令要求库

composer require manuwhat/similar-text

require 'vendor/autoload.php';添加到脚本顶部。

接下来,在脚本中使用它,就像这样

use ezama/similar-text;

100.0===similarText('qwerty', 'ytrewq')

这是一个如何使用统计数据来检查特殊情况的示例。这里我们将使用它们来检查字母表(请注意,这已在库中实现。有关所有可用实现的详细信息,请参阅文件similar_text.php)

function areAnagrams($a, $b)
{
	return  Ezama\similar_text::similarText($a, $b, 2, true, $check)?$check['similar'] === 100.0&&$check['contain']===true:false;
}

areAnagrams('qwerty', 'ytrewq');// return true;

注意:一些函数和方法比人们想象的要复杂。例如,simpleCommonTextSimilarities类的aIsSuperStringOfB方法和它的辅助函数aIsSuperStringOfB与基于preg_match、stripos和PHP相似函数构建的常规检查函数并不相等

一个简单的例子是

function aisSuperStringOfB_stripos($a, $b)
{
	return  false!==stripos($a,$b);
}

function aisSuperStringOfB_PCRE($a, $b)
{
	return  preg_match('#'.preg_quote($b).'#i',$a);
}

require './vendor/manuwhat/similar-text/similar_text.php';

aIsSuperStringOfB('mum do you want to cook something', 'do you cook something mum');//return true;
aIsSuperStringOfB_stripos('mum do you want to cook something', 'do you cook something mum');//false;
aIsSuperStringOfB_PCRE('mum do you want to cook something', 'do you cook something mum');//return false;

该库还包含常见的距离算法,如无限长度的levenshtein、levenshtein-damerau、jaro、jaro-winkler、hamming、dice实现

如何运行单元测试

phpunit  ./tests