如何通过关键词识别相似的字符串

3
关键词: 所有超过3个字符的单词
我想比较两个字符串之间的关键词,具体条件如下:
  1. 移动单词不重要 (例如1适用于此情况)
  2. 少于3个字符的单词不计算在内 (例如2适用于此情况)
  3. 将较短的句子放在str1中(按字符数计算)。(例如3适用于此情况)
  4. 我只想找出与str2相比,在str1中不同的单词。 (例如4适用于此情况)
事实上,我有一个机器人每天攻击两个新闻网站并将新闻复制到我的数据库中。然后我需要一种算法来比较新闻标题并识别重复的新闻。(正如您所知,相同的新闻来自不同的新闻网站,但通常,相同新闻的标题包含相同的关键词)。 例1: 移动单词不重要
str1= 'hello petter'
str2= 'petter hello'

result: 0 

示例2: 不计算少于3个字符的单词

str1= 'hello !!'
str2= 'petter hello'

result: 0 // '!!' are less than 3characters and str1 is 'hello'. then result:0

或者

str1= 'hello petter‌ how are u?'
str2= 'petter hello how are you'

result: 0 // str1 is 'hello petter how are'

示例3:变量必须被修改。

str1= 'hello petter‌ how are you ?'
str2= 'petter hello how are you?'
// Then
str1= 'hello petter‌ how are you?'
str2= 'petter hello how are you ?'

result:1 // 1 is for 'you' (in str1)

例子4: 在str2中,不同的单词并不重要。

str1= 'hello petter‌ how are you?'
str2= 'petter hello how are you ?'

result: 1 // str2 is 'petter hello how are you', then 1 is for: 'you?' (in str1)

注意: str2 中的 'you' 对我来说不重要,因为它与 str1 中的任何单词都不匹配。

占位符示例:(更多信息)

str1= 'petter‌ hello how are you pal?'
str2= 'petter hello how are... !!'

// In first str1 change with str2
str1= 'petter hello how are... !!'
str2= 'petter‌ hello how are you pal?'

// Then remove '!!' (in str1)
str1= 'petter hello how are...'
str2= 'petter‌ hello how are you pal?'

result: 1 // 1 for 'are...' (in str1) - ['are','you','pal?' does not matter (in str2)]

最后,我需要一个函数通过结果和关键词数量(所有超过3个字符的单词)来识别重复新闻。
$keywords_numb=7;
$result=2;

function identify_duplicate($keywords_numb,$result){
    if($keywords_numb / 3 >= $result){
        $Specified = 'this is a new news';
    }

    else $Specified = 'this is a duplicate news';
        return $Specified;

}

    echo $Specified;

输出:

this is a new news

有人知道如何编写这个程序吗?谢谢。
2个回答

2
您不需要使用正则表达式来实现此功能。您可以使用以下函数,并传入任何顺序的字符串:
function identify_duplicate($var1, $var2){
   if(strlen($var1)>=strlen($var2)){
       $str1 = $var1;
       $str2 = $var2;
   }
   else{
       $str1 = $var2;
       $str2 = $var1;
   }
   $str1 = explode(" ", $str1);
   $str2 = explode(" ", $str2);

  $return = sizeof($str1);

  foreach($str1 as $val){
     if(in_array($val, $str2) || strlen($val) <= 3){
         $return = $return - 1;
     }
  }

   return $return;
}

为了不依赖于变量的顺序,将较长的字符串作为str1。 - splash58
太好了!我以为答案会更长。谢谢你。 - Shafizadeh
一个问题在这里,你没有指定关键词(具有三个或更多字符的单词)!! - Shafizadeh
哇!你怎么这么快就找到了解决方案?我想为这个情节(指定关键词)编写一个函数。无论如何,谢谢!你能告诉我你从事什么工作吗? - Shafizadeh
很高兴能帮忙..我是一名程序员 :) - karthik manchala

0

在@karthik manchala的帮助下,我做到了...

   $str1='this news is about a player named Ronaldo';
   $str2='The player who called Ronaldo';

 function identify_duplicate($str1, $str2){
   if(strlen($str1)>strlen($str2)){
       list($str1, $str2) = array($str2, $str1); // swap two variables
   }

   $str1 = explode(" ", $str1);
   $str2 = explode(" ", $str2);

    $words_numb = sizeof($str1);
    $result=$words_numb;

    foreach($str1 as $val){
     if(in_array($val, $str2) || strlen($val) <= 3){
         $result--;
     }
  }

   if($words_numb / 3 >=$result){
        $Specified = 'this is a duplicate news';
       }
    else $Specified = 'this is a new news';
        return $Specified;
}


$out=identify_duplicate($str1, $str2);
echo $out;

输出:

这是一条重复的新闻


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接