2014-01-16 5 views
0

Я хочу, чтобы найти число подобных слов между двумя текстамиPHP - Поиск количества совпадающих слов между двумя фрагментами текста?

Пример

$str1=the cat is on the roof 
$str2=the mouse is on the roof 

, является, на, что, крыша слова похожи на $ str1 и $ str2

Таким образом, выход будет в количестве 5 OR Процент 86%

Я пытаюсь аналогичную функцию(), но эта функция не работает, как я хочу.

+4

Эй, код убежал, иди и достань, спешите! –

+0

Как вы получили 86%? Всего 12 слов и 10 матчей, и это дает 83% - откуда взялись дополнительные 3%? – newfurniturey

+0

И 'аналогичный_текст 'также предоставляет 83%, уверен, что я смотрю прямо на меня – jszobody

ответ

6

Легко, взорвать их, а затем использовать array_diff:

$totalWords = count($array_1); 

$array_1 = explode(" ", $str1); 
$array_2 = explode(" ", $str2); 
$differenceCount = count(array_diff($array_1, $array_2)); 

$differentPercent = $differenceCount/($totalWords/100); 

@Edit:

Под редакцией выше код для отображения процента. Однако помните, что у вас может быть неправильный результат, если количество слов массива 1 и массива 2 не идентично.

+0

thnx @Steini для ответа ... можно проверить, сколько процентов слов похоже на две строки ... – Me7888

+0

Я пробовал отредактировать код .... display operand error: ошибка Неподдерживаемые типы операндов Me7888

+0

Я забыл; в конце кода, обновил его, однако вы должны немного узнать о кодировании/обработке ошибок, прежде чем задавать такие вопросы. Этот сайт должен дать подсказки для решения, а не полностью работающие системы. – Steini

3
$arr1 = explode(" ",$str1) 
$arr2 = explode(" ",$str2) 

$arr3 = array_diff($arr1, $arr2); 

echo(count($arr1)-count($arr3)); 
2

Путь я бы подойти к этому, чтобы взорвать каждую строку, а затем использовать array_diff, чтобы сравнить их, как это:

$arr1 = explode(' ', $str1); 
$arr2 = explode(' ', $str2); 
$diff = array_diff($arr1, $arr2); 
echo (count($arr1) - count($diff)); 

Это будет эхо из числа подобных слов.

+0

Есть уже два почти идентичных ответа, было ли это действительно неуместным? – Steini

+1

@steini Их там не было, когда я набрал свой ответ, посмотрел на время, действительно близко.Когда я начал, ответов не было. – Styphon

+0

Прекрасно Я удаляю его, но все же вы можете нажать кнопку обновления перед отправкой сообщения. Есть 3 минуты между существующими сообщениями и вашими ... – Steini

0
$arr1 = explode(" ",$str1) 
$arr2 = explode(" ",$str2) 

$arr3 = array_diff($arr1, $arr2); 

я использовал array_intesect, чтобы проверить, как много матчей ,, я использовал это в поиске один массив в другой

и для профилактики с Auxilary глаголов и предлогов (далее, к, а, и т.д.) являются использование -

$arr1 = str_replace(array("to", "the","a","an","in","by","but","are","is","had","have","has"),'',$arr1);