2017-03-04 105 views
2

我知道有很多技术和方法可以比较两个Strings,并确定两个Strings是否相等。 我想要做这样的事情:比较两个字符串并显示来自字符串的不匹配字词数量

Var Str1 = "Hello How are you?"; 
var Str2 = "Hello I am ravi."; 

要与str1比较str2和显示的不匹配单词的数量计数。 两个字符串均包含4个单词。它应该显示您错过了str1的三个字。

我有一个网页(网络任务),用户需要听音频并将其转录。所以我想知道用户从转录的原始音频中错过了多少单词。

+0

如果什么用户错过完全一个字,使得字符串不具有相同数量的话吗?例如,如果“正确的”字符串是“你好吗?”用户说“你好吗?”,他们只错过了一个字。即使两个字符串的编号相同,我也会争辩说:“你好吗?”和“你今天好吗?”只有两个不匹配,而不是四个不匹配... – nnnnnn

+0

这将是只有一个字从字符串1,这是你好。无论用户输入多少单词都无关紧要。用户可以写str2 = hello你好吗?我病了,但很快就会好起来的。但它包含你好,你好,所以应该考虑为正确的匹配。 – Rocky

回答

2

这与将两个字符串转换为数组然后计算数组的差异一样简单。

$arr1 = explode(' ', strtolower($str1)); 
$arr2 = explode(' ', strtolower($str2)); 
echo 'You missed ' . count(array_diff($arr1, $arr2)) . ' words from str 1'; 
2

使用爆炸转换的StringsArrays并计算两者之间Arrays的区别:

$Str1 = "Hello How are you?"; 
$Str2 = "Hello I am ravi"; 

$st1 = (explode(" ", $Str1)); 
$st2 = (explode(" ", $Str2)); 


$result = array_diff($st1, $st2); 

echo count($result); 
1

您可以修剪字符'','?'在字符串中。然后将其转换为单词数组,并删除重复的单词。最后比较用户输入数组和标准数组之间的差异。

// parse a string to array 
function words($string) 
{ 
    return array_unique(explode(' ', str_replace(['?', '.', ','], '', $string))); 
} 

dd(array_diff(words($array2), words($array1))); //here user input array2 is the first parameter.