PDA

View Full Version : Thuật toán tìm độ giống nhau của 2 mẫu tin



lazzy
17-12-2009, 20:06
có bạn nào làm so sánh 2 mẩu tin kg vậy? mình có 2 mẫu tin mình muốn biết nó giống nhau bao nhiêu phần trăm thì phải làm sao?
Bây giờ mình đến bước là lập ra mảng và số lần xuất hiện của từ đó trong mẫu tin rồi bây giờ có thuật toán nào tính được mức độ giống nhau của 2 mảng này.

cái này mình cần để làm web tổng hợp tin tức có nhiều nguồn tin trong ngày và có nhiều tin nói về cùng một chủ đề nên chỉ cần đọc một bài là đủ. và nếu bít được độ giống nhau mình có thể làm cái những bài viết có liên quan. Một số người nói giải bằng xác xuất thông kê hoặc tính khoảng cách 2 vector mà thú thật chỉ nói vậy suông mình kg biết đường đâu mà lần mình kiếm hoài mà kg thấy tài liệu lý thuyết về vấn đề này. bạn nào làm rồi thì hướng dẫn mình với

lazzy
23-12-2009, 21:34
post cho những ai có nhu cầu
nền tảng lý thuyết về khoảng cách của 2 vector các bạn xem tại đây



http://n-bao.co.cc/linhtinh/Bernard_-_Reseaux_mots_associes.pdf

đây là chương trình mình viết



<?
$a=array('service'=>50,'blog'=>80,'internet'=>160,'content'=>30,'users'=>30,'world'=>10,'good'=>100,'web'=>40);
$b=array('service'=>20,'mobile'=>40,'iphone'=>30,'content'=>80,'web'=>20,'users'=>90,'apps'=>20,'world'=>70,'video'=>10,'sites'=>40);
//đầu vào là 2 mảng chứa từ và số lần xuất hiện của nó
// xuất phần trăm độ giống nhau và những từ khóa chung để so sánh
$percent=comparer($a,$b);
print_r($percent);

function comparer($a,$b){
$norm1=0;
$norm2=0;
foreach ($a as $key=>$value){
$temp1[]=$key;
$norm1+=pow($value,2);
}
foreach ($b as $key=>$value){
$temp2[]=$key;
$norm2+=pow($value,2);
}
$nprod = sqrt($norm1) * sqrt($norm2);
$temp=array_intersect($temp1, $temp2);
foreach ($temp as $value) $KW[$value]=$a[$value]*$b[$value];
asort($KW);
$KW = array_reverse($KW);// Keyword with weight

if($nprod != 0) {
$tmpval = (array_sum($KW) / $nprod)*100;
if($tmpval) { // insert a step for the acceptance in the final file
$products[]['value'] = $tmpval;
$products[count($products)-1]['kw'] = $KW;
}
}
return $products;
}
?>