我想删除类似的基于标题的值,例如。如果我有Rihanna - Work Ft。其他一些词和蕾哈娜 - 工作我想只有其中一个。我怎样才能删除仍然为Rihanna搜索的重复项。请参阅下面包含类似标题的json:
意味着我不想在我的阵列中拥有多个版本的歌曲 见以下样本JSON将被单独删除
{
"videos": [
{
"kind": "youtube#playlistItem",
"etag": "\"gMxXHe-zinKdE9lTnzKu8vjcmDI/134M9maQodDR9PapI2tdE24XHdU\"",
"id": "UExwWEExSXFCZ2VaUXpYOFh2Y0U0R0RscEFpTjAzczNGNi5EQUE1NTFDRjcwMDg0NEMz",
"snippet": {
"publishedAt": "2016-07-03T16:45:08.000Z",
"channelId": "UCOb0YwX9e9SFbctQaSXkKGQ",
"title": "Rihanna - Work ft. Drake (Audio)",
},
"shuffle_id": 88
},
{
"kind": "youtube#playlistItem",
"etag": "\"gMxXHe-zinKdE9lTnzKu8vjcmDI/Qeo1vUZh73p7gX3EFvVxRGbTxms\"",
"id": "UExaOW5LbUs1dVVCcnN2Rld6ZDRWcFA0MHZ3NlZhLXZFeS5ENDU4Q0M4RDExNzM1Mjcy",
"snippet": {
"publishedAt": "2016-08-31T04:42:26.000Z",
"channelId": "UC2mUsMtec7AOG9K-4ZlO7gA",
"title": "Rihanna - Work (Explicit) ft. Drake",
"description": "",
"channelTitle": "Dickinson Kenneth",
"playlistId": "PLZ9nKmK5uUBrsvFWzd4VpP40vw6Va-vEy",
"position": 17,
},
"shuffle_id": 219
}]
}
答案 0 :(得分:0)
因此,您可以定义一个哈希函数,为相似的歌曲标题返回相同的哈希值;然后,您可以根据该哈希值使歌曲列表唯一。
这是一个潜在的哈希函数和一些演示:
$hash1 = hashSongTitle('Rihanna - Work ft. Drake (Audio)');
$hash2 = hashSongTitle('Rihanna - Work (Explicit) ft. Drake');
echo $hash1 . "\n";
echo $hash2 . "\n";
$sameHash = ($hash1 === $hash2);
echo $sameHash ? 'are the same' : 'not not the same';
function hashSongTitle($title)
{
//get rid of noise words
$title = str_replace(array('(Explicit)', '(Audio)', '-'), '', $title);
//collapse consecutive spaces
$title = preg_replace('#\s{2,}#ims', ' ', $title);
//get rid of possible white spaces in front or in the back of the string
$title = trim($title, "\r\n ");
return $title;
}
这应该回应:
Rihanna Work ft. Drake
Rihanna Work ft. Drake
are the same
你可以在这里看到它:http://sandbox.onlinephpfunctions.com/code/201b95cdc80f587a0ee377155c5fb6a49475bc89
然后,您可以将歌曲存储在由该哈希值索引的数组中,这样它们就会变得唯一。
foreach($songList as $song)
{
$hash = hashSongTitle($song->title);
$uniqueSongList[$hash] = $song;
}
答案 1 :(得分:0)
您可以使用similar_text函数检测相似度,并确定一个阈值来判断两个标题(或更多)是否足够相似以删除其中一个(最短的?)。
如果您需要更准确的结果,这意味着您不仅对常用字母的数量感兴趣,而且还对其顺序感兴趣,那么您正在寻找最长的常见子字符串问题here is an implementation。在这里你必须建立一个阈值比较maximumSubstringLength / OriginalStringLength。