나는 PHP를 사용하고 있습니다. 5 개의 텍스트 문자열이 있다고 가정 해보십시오. 나머지 2 가지와 가장 다른 2 가지를 어떻게 찾습니까?
내가 5 개 문자열이 말 :"The quick brown fox"
"The sly brown fox"
"The sly brown chicken"
"Totally different text here"
"Not like the others"
을하고 난 나머지 대부분의 "다른"있는 2를 찾고 싶어요. 나는 그것을 1000 개의 텍스트 문자열로 확장하고, 말하자면, 가장 많이 "다른"300 개가되도록하고 싶습니다.
어디서부터 시작해야할까요?
편집
논의를 위해입니다 "다른"을 정의하는 방법!
EDIT * 2 * 당사 PHP similar_text
함수에 따라 상이한 같은 "다른"정의
. 그러나 다른 정의가있을 수 있습니다. 진짜 문제는 모든 텍스트 문자열을 비교하는 방법입니다. 진은 합계를 계산 제안했다, 이것은 그렇게 필립의 코드의 해킹 버전 :
는$strings = array(
"The quick brown fox",
"The sly brown fox",
"The sly brown chicken",
"Totally different text here",
"Not like the others"
);
$n = 3;
$sim = array();
for ($i = 0; $i < count($strings); $i++) {
$total = 0;
for ($j = 0; $j < count($strings); $j++) {
if($strings[$i] != $strings[$j]) {
$sim_val = similar_text($strings[$i], $strings[$j]);
$total += $sim_val;
$sim[$strings[$i]][] = array(
"sim" => $sim_val,
"w1" => $strings[$i],
"w2" => $strings[$j]
);
}
}
$sim[$strings[$i]]['total'] = $total;
}
uasort($sim, function($w1, $w2) {
return $w1["total"] > $w2["total"];
});
$sim = array_keys($sim);
$sim = array_slice($sim,0,$n);
정답처럼 보인다
Array
(
[0] => Not like the others
[1] => Totally different text here
[2] => The quick brown fox
)
를 돌려줍니다. 따로 질문입니다. Booo을을 downvoted 사람들의 모든 (덕분에 당신은
EDIT 3 *
OK ;-), 그래서 난 내 1000 문자열이 테스트를했습니다. 그들은 각각 약 500 개의 고유 한 단어와 약 14000의 strlen
을 가지고 있습니다. 그래서 ...이 실행을 빨리하기 위해 우리는 즉시 similar_text
을 지적 할 수 있습니다. 빠른 compare_words 함수를 작성했습니다 :
function same_words($text1,$text2) {
$words_1 = array_unique(explode(" ",$text1));
$words_2 = array_flip(array_unique(explode(" ",$text2)));
foreach($words_1 AS $word) {
if($words_2[$word]) {
$count++;
}
}
return $count;
}
하지만 너무 느립니다.
지구상의 "다름"이란 무엇을 의미합니까? –
"다른"을 정의하십시오. 문자 수는? 구두 소리? 의미? – Jodes
나는 그가 다른 단어를 의미한다고 생각한다 – MIIB