Проверка похожести двух слов


Сравнение схожести двух текстов.

Онлайн сервис для сравнения двух текстов на процентное соотношение схожести по содержанию. Сравнение текстов основано на совпадение отдельных слов в текстах, без учета стоп-слов, игнорируются и перестановки слов местами. Такой способ проверки наиболее точен по сравнению с другими методами.

Для сравнения заполните оба поля формы.

Сравнение двух текстов

Анализ сравнения текстов будет интересен оптимизаторам, копирайтерам и рерайтерам. Стоп и одинаковые слова, для удобства и лучшего восприятия, подсвечены с возможность изменить цвет. Возможно проанализировать текст длиной до 20000 знаков. Ведется статистика по общему количеству слов в обоих текстах и словарному запасу (без шумных слов). Если процентное отношение схожести около 50% , то скорей всего поисковые машины проигнорируют статью посчитав ее за дубликат. Надо стремиться как минимум к 20% схожести или 80% различия в сравнительных текстах.

Для сравнения текстов не надо скачивать и устанавливать дополнительные программы. Наш ресурс доступен 24 часа 7 дней в неделю и бесплатен для использования.

  1. В первое поле введите эталонный текст.
  2. В второе поле введите измененный текс.
  3. Нажмите кнопку сравнить тексты.

Через мгновение вы получите результат сравнения схожести текстов.

Помимо веб-мастеров инструмент будет полезен и студентам.

Воспользовались сервисом и сравнили тексты 9 — 12.11.2020 раз

Процентная похожесть двух слов

01.02.2012, 14:42

Процентная загрузка
здравствуйте есть такая проблема вот часть кода using System; using System.Collections.Generic;.

Процентная вероятность
Необходимо реализовать метод, который принимает количество % (шанс выпадения) и выдает true, если.

Похожесть двух карт
. заумное название, которое почти никак не соответствует сути вопроса. На днях задался.

Сравнить похожесть двух строк игнорируя служебные символы
Здравствуйте всем доброго времени суток! Собственно есть вопрос, как сравнить похожесть двух строк.

Похожесть последовательностей
Здравствуйте помогите пожалуйста решить. Задание Рассмотрим две последовательности A и B.

01.02.2012, 14:45 2 01.02.2012, 14:50 [ТС] 3 01.02.2012, 15:51 4

в голову приходит только что-то типа баллов:
за каждую общую букву — 1 балл
за каждую общую букву после другой общей — 3 балла
за каждую общую букву после другой общей, при этом они соседние — 5 баллов.

вот и придется подсчитать каждый для конкретной пара, а также найти максимум схожести.
потом поделить.

хотя кривовато будет. надо определиться с критериями похожести

01.02.2012, 15:51
01.02.2012, 15:56 5
01.02.2012, 15:58 6
01.02.2012, 16:05 [ТС] 7
01.02.2012, 16:12 8

01.02.2012, 16:14 [ТС] 9

На основе вашей идеи возникла своя!
Заключается в чём:
Есть «корова» и «слово», нужно брать с первого слова первую пару букв т.е. «ко» и смотреть,есть ли вхождения этой пары или нет в «слово»,если нет,то брать следующую пару,т.е. «ор» и т.д.
Когда находим вхождение (это будет «ов»), запоминаем позицию, берём следующую пару букв с первого слова «ва» и с УЖЕ известной позиции смотрим, есть ли там также эта пара,если нет,то вхождение равно 2 (два символа),если дальше есть допустим в примере «слово-олово»,то вхождение равно 4.
Считаем проценты вхождений:
корова — 2 — 33%
слово — 2 — 40%
Общий процент схожести будет 36.5%

Сравнение двух текстов онлайн

Инструмент помогает найти различия в двух текстах. В настройках вы можете выбрать показ результатов по сравнению. Различия в текстах подсвечиваются цветами. Зеленый цвет это добавленный символ, красный — удаленный.

Сравнение текстов на схожесть необходимо, когда вам нужно создать много текстов на одну тему, но избежать повторений, при заказе текста у копирайтера или если вы думаете, что владелец другого сайта украл ваш контент.

Сервис для сравнения двух текстов покажет измененные части текста и выделит их цветом для наглядности. Можно выбрать подсветку символов, слов или целых строк.

Как определить степень схожести двух текстов?

Допустим, взяли исходный текст, три абзаца. В его копии убрали полностью последнее предложение, поменяли адрес ссылки где-то в тексте, заменили пару предлогов, и заменили пару слов на синонимы.

Каков алгоритм, чтобы определить «эти тексты сходны на 65%. Скорее всего, общий первоисточник»? Есть ли что-то вроде вэйвлет анализа для текстов?

5-7% от длины части. Для абсолютно разных частей это значение, предположительно будет намного болье. – Costantino Rupert 2 окт ’12 в 8:58

3 ответа 3

В биоинформатике подобные вопросы — определение схожести двух разных последовательностей нуклеиновых кислот или протеинов (читай — текстов) — составляют основную проблему. Решается она с помощью разных алгоритмов выравнивания. В вашем случае можно применить метод глобального выравнивания — самого простого из них. Подробнее о нем читай по указанной ссылке. Если будет непонятно, порекомендую литературу.

Сравнить и проверить текст на схожесть онлайн

Как можно сравнить и проверить текст на схожесть и, как вообще, поисковые боты определяют идентичность или процент схожести разных текстов? В их работе существует хитрый «алгоритм шинглов». Он позволяет проверкой двух текстов убедиться, что между ними есть схожесть и каков процент совпадений текста.
Сравнение и проверка контента на схожесть нужны тем, кто занимается переделыванием кем-то написанного ранее.

Как же происходит проверка текстов «методом шинглов»? Текст разбивается на группы слов, а далее происходит анализ полученных блоков — групп. При этом, совершенно не важно, просто ли вы поменяли местами слова и предложения или нет. Деление текста может происходить и по одному слову, и по группе слов — «шингла» из нескольких или более слов. В нашем случае сервис позволяет сравнить и проверить текст по четырём вариантам «шинглов» — от 1 слова в проверочном блоке до четырёх. Главный показательный блок «шингла» состоит из одного слова. Чем процент схожести после проверки текста меньше, тем сильнее переделан текст.
Данный онлайн сервис удобен тем, что можно сравнить и проверить текст на схожесть оригинальный и текст переделанный, не прибегая к устанавливаемым на компьютер программам. Сравнивая и проверяя текст, вы получите процент схожести переделанного текста с оригинальным.

Данный скрипт сравнивает и делает проверку текстов онлайн, в каждом из которых не более 50000 символов.

Перед сравнением текстов, они автоматически чистятся для правильной работы:
— удаляются html коды, например, такие как ,
и так далее
— все символы преобразуются в нижний регистр
— удаляются запятые, точки, апострофы, двойные пробелы, слешы и другие.

Как проверить наличие слова, фразы или текста в строке на PHP/JavaScript

Вы получаете некий текст в ваш скрипт, и ваша задача – проверить, присутствует ли нужная вам фраза в этом тексте или нет, и в последующем, при положительном раскладе вещей, выполнить какое-то действие.

Поставленные задачи легко решаются с помощью PHP и JavaScript, а как именно – я сейчас расскажу.

Как проверить наличие слова, фразы или текста в строке на PHP

В PHP существуют два способа, с помощью которых можно узнать наличие искомой фразы в строке.

Первый способ – это регулярные выражения. Здесь мы используем функцию «preg_match» для обхода по всему тексту.

И, соответственно, то же самое для отрицания:

Помимо этого, есть и второй способ – это функция «strpos», которая возвращает позицию первого вхождения указанной фразы.

И то же самое для отрицания:

Если вы ищете небольшие участки текста, то в таком случае для использования предпочтителен второй вариант — так как он менее ресурсоемкий.

Как проверить наличие слова, фразы или текста в строке на JavaScript

На JavaScript осуществить проверку наличия текста в строке можно несколькими способами.

Один из которых – все те же регулярные выражения.

И то же самое для отрицания:


Еще один рабочий вариант решения проблемы – это метод «indexOf», который помогает подсчитать количество совпадений при поиске.

И то же самое для отрицания:

В обоих способах существенной разницы в скорости нет – используйте тот, что более удобен для вас.

similar_text

(PHP 4, PHP 5, PHP 7)

similar_text — Вычисляет степень похожести двух строк

Описание

Вычисляет степень похожести двух строк по алгоритму, описанному в Programming Classics: Implementing the World’s Best Algorithms by Oliver (ISBN 0-131-00413-1). Эта реализация алгоритма не использует стека, использованного в оригинале, вместо этого применяются рекурсивные вызовы, что в некоторых случаях может ускорить процесс. Следует отметить, что сложность алгоритма составляет O(N**3), где N — длина более длинной из двух строк.

Список параметров

Изменение порядка first и second может привести к другому результату; см, пример ниже.

При передаче по ссылке третьего аргумента, similar_text() присваивает ему степень похожести двух строк в процентах, деля результат similar_text() на среднее число длин заданных строк 100 раз.

Возвращаемые значения

Возвращается количество совпадающих символов в двух строках.

Количество совпадающих символов вычисляется путем нахождения самой длинной первой общей подстроки, а затем делает это для префиксов и суффиксов рекурсивно. Добавляются длины всех найденных общих подстрок.

Примеры

Пример #1 Пример использования similar_text() с заменой аргументов

В этом примере показано, что изменение порядка аргументов first и second может дать разные результаты.

Результатом выполнения данного примера будет что-то подобное:

Смотрите также

  • levenshtein() — Вычисляет расстояние Левенштейна между двумя строками
  • soundex() — Возвращает ключ soundex для строки

User Contributed Notes 11 notes

Be aware when using this function, that the order of passing the strings is very important if you want to calculate the percentage of similarity, in fact, altering the variables will give a very different result, example :

= ‘PHP IS GREAT’ ;
$var_2 = ‘WITH MYSQL’ ;

similar_text ( $var_1 , $var_2 , $percent );

echo $percent ;
// 27.272727272727

similar_text ( $var_2 , $var_1 , $percent );

echo $percent ;
// 18.181818181818
?>

Please note that this function calculates a similarity of 0 (zero) for two empty strings.

Recursive algorithm usually is very elegant one. I found a way to get better precision without the recursion. Imagine two different (or same) length ribbons with letters on each. You simply shifting one ribbon to left till it matches the letter the first.

function similarity ( $str1 , $str2 ) <
$len1 = strlen ( $str1 );
$len2 = strlen ( $str2 );


$max = max ( $len1 , $len2 );
$similarity = $i = $j = 0 ;

return round ( $similarity / $max , 2 );
>

$str1 = ‘12345678901234567890’ ;
$str2 = ‘12345678991234567890’ ;

echo ‘Similarity: ‘ . ( similarity ( $str1 , $str2 ) * 100 ) . ‘%’ ;
?>

Note that this function is case sensitive:

= ‘Hello’ ;
$var2 = ‘Hello’ ;
$var3 = ‘hello’ ;

echo similar_text ( $var1 , $var2 ); // 5
echo similar_text ( $var1 , $var3 ); // 4

Actually similar_text() is not bad.
it works good. But before processing i think is a good way to make a little mod like this

$var_1 = strtoupper(«doggy»);
$var_2 = strtoupper(«Dog»);

similar_text($var_1, $var_2, $percent);

echo $percent; // output is 75 but without strtoupper output is 50

The speed issues for similar_text seem to be only an issue for long sections of text (>20000 chars).

I found a huge performance improvement in my application by just testing if the string to be tested was less than 20000 chars before calling similar_text.

20000+ took 3-5 secs to process, anything else (10000 and below) took a fraction of a second.
Fortunately for me, there was only a handful of instances with >20000 chars which I couldn’t get a comparison % for.

If you have reserved names in a database that you don’t want others to use, i find this to work pretty good.
I added strtoupper to the variables to validate typing only. Taking case into consideration will decrease similarity.

= mysql_query ( «select * from $table » ) or die( «Query failed» );

while ( $row = mysql_fetch_array ( $query )) <
similar_text ( strtoupper ( $_POST [ ‘name’ ]), strtoupper ( $row [ ‘reserved’ ]), $similarity_pst );
if ( number_format ( $similarity_pst , 0 ) > 90 ) <
$too_similar = $row [ ‘reserved’ ];
print «The name you entered is too similar the reserved name «» . $row [ ‘reserved’ ]. «»» ;
break;
>
>
?>

Well, as mentioned above the speed is O(N^3), i’ve done a longest common subsequence way that is O(m.n) where m and n are the length of str1 and str2, the result is a percentage and it seems to be exactly the same as similar_text percentage but with better performance. here’s the 3 functions i’m using..

function LCS_Length ( $s1 , $s2 )
<
$m = strlen ( $s1 );
$n = strlen ( $s2 );

//this table will be used to compute the LCS-Length, only 128 chars per string are considered
$LCS_Length_Table = array(array( 128 ),array( 128 ));

//reset the 2 cols in the table
for( $i = 1 ; $i $m ; $i ++) $LCS_Length_Table [ $i ][ 0 ]= 0 ;
for( $j = 0 ; $j $n ; $j ++) $LCS_Length_Table [ 0 ][ $j ]= 0 ;

for ( $i = 1 ; $i $m ; $i ++) <
for ( $j = 1 ; $j $n ; $j ++) <
if ( $s1 [ $i — 1 ]== $s2 [ $j — 1 ])
$LCS_Length_Table [ $i ][ $j ] = $LCS_Length_Table [ $i — 1 ][ $j — 1 ] + 1 ;
else if ( $LCS_Length_Table [ $i — 1 ][ $j ] >= $LCS_Length_Table [ $i ][ $j — 1 ])
$LCS_Length_Table [ $i ][ $j ] = $LCS_Length_Table [ $i — 1 ][ $j ];
else
$LCS_Length_Table [ $i ][ $j ] = $LCS_Length_Table [ $i ][ $j — 1 ];
>
>
return $LCS_Length_Table [ $m ][ $n ];
>

function str_lcsfix ( $s )
<
$s = str_replace ( » » , «» , $s );
$s = ereg_replace ( «[��������]» , «e» , $s );
$s = ereg_replace ( «[������������]» , «a» , $s );
$s = ereg_replace ( «[��������]» , «i» , $s );
$s = ereg_replace ( «[���������]» , «o» , $s );
$s = ereg_replace ( «[��������]» , «u» , $s );
$s = ereg_replace ( «[�]» , «c» , $s );
return $s ;
>

function get_lcs ( $s1 , $s2 )
<
//ok, now replace all spaces with nothing
$s1 = strtolower ( str_lcsfix ( $s1 ));
$s2 = strtolower ( str_lcsfix ( $s2 ));

$lcs = LCS_Length ( $s1 , $s2 ); //longest common sub sequence

$ms = ( strlen ( $s1 ) + strlen ( $s2 )) / 2 ;

return (( $lcs * 100 )/ $ms );
>
?>

you can skip calling str_lcsfix if you don’t worry about accentuated characters and things like that or you can add up to it or modify it for faster performance, i think ereg is not the fastest way?
hope this helps.
Georges

similar_text

(PHP 4, PHP 5, PHP 7)

similar_text — Вычисляет степень похожести двух строк

Описание


Вычисляет степень похожести двух строк по алгоритму, описанному в Programming Classics: Implementing the World’s Best Algorithms by Oliver (ISBN 0-131-00413-1). Эта реализация алгоритма не использует стека, использованного в оригинале, вместо этого применяются рекурсивные вызовы, что в некоторых случаях может ускорить процесс. Следует отметить, что сложность алгоритма составляет O(N**3), где N — длина более длинной из двух строк.

Список параметров

Изменение порядка first и second может привести к другому результату; см, пример ниже.

При передаче по ссылке третьего аргумента, similar_text() присваивает ему степень похожести двух строк в процентах, деля результат similar_text() на среднее число длин заданных строк 100 раз.

Возвращаемые значения

Возвращается количество совпадающих символов в двух строках.

Количество совпадающих символов вычисляется путем нахождения самой длинной первой общей подстроки, а затем делает это для префиксов и суффиксов рекурсивно. Добавляются длины всех найденных общих подстрок.

Примеры

Пример #1 Пример использования similar_text() с заменой аргументов

В этом примере показано, что изменение порядка аргументов first и second может дать разные результаты.

Результатом выполнения данного примера будет что-то подобное:

Смотрите также

  • levenshtein() — Вычисляет расстояние Левенштейна между двумя строками
  • soundex() — Возвращает ключ soundex для строки

User Contributed Notes 11 notes

Be aware when using this function, that the order of passing the strings is very important if you want to calculate the percentage of similarity, in fact, altering the variables will give a very different result, example :

= ‘PHP IS GREAT’ ;
$var_2 = ‘WITH MYSQL’ ;

similar_text ( $var_1 , $var_2 , $percent );

echo $percent ;
// 27.272727272727

similar_text ( $var_2 , $var_1 , $percent );

echo $percent ;
// 18.181818181818
?>

Please note that this function calculates a similarity of 0 (zero) for two empty strings.

Recursive algorithm usually is very elegant one. I found a way to get better precision without the recursion. Imagine two different (or same) length ribbons with letters on each. You simply shifting one ribbon to left till it matches the letter the first.

function similarity ( $str1 , $str2 ) <
$len1 = strlen ( $str1 );
$len2 = strlen ( $str2 );

$max = max ( $len1 , $len2 );
$similarity = $i = $j = 0 ;

return round ( $similarity / $max , 2 );
>

$str1 = ‘12345678901234567890’ ;
$str2 = ‘12345678991234567890’ ;

echo ‘Similarity: ‘ . ( similarity ( $str1 , $str2 ) * 100 ) . ‘%’ ;
?>

Note that this function is case sensitive:

= ‘Hello’ ;
$var2 = ‘Hello’ ;
$var3 = ‘hello’ ;

echo similar_text ( $var1 , $var2 ); // 5
echo similar_text ( $var1 , $var3 ); // 4


Actually similar_text() is not bad.
it works good. But before processing i think is a good way to make a little mod like this

$var_1 = strtoupper(«doggy»);
$var_2 = strtoupper(«Dog»);

similar_text($var_1, $var_2, $percent);

echo $percent; // output is 75 but without strtoupper output is 50

The speed issues for similar_text seem to be only an issue for long sections of text (>20000 chars).

I found a huge performance improvement in my application by just testing if the string to be tested was less than 20000 chars before calling similar_text.

20000+ took 3-5 secs to process, anything else (10000 and below) took a fraction of a second.
Fortunately for me, there was only a handful of instances with >20000 chars which I couldn’t get a comparison % for.

If you have reserved names in a database that you don’t want others to use, i find this to work pretty good.
I added strtoupper to the variables to validate typing only. Taking case into consideration will decrease similarity.

= mysql_query ( «select * from $table » ) or die( «Query failed» );

while ( $row = mysql_fetch_array ( $query )) <
similar_text ( strtoupper ( $_POST [ ‘name’ ]), strtoupper ( $row [ ‘reserved’ ]), $similarity_pst );
if ( number_format ( $similarity_pst , 0 ) > 90 ) <
$too_similar = $row [ ‘reserved’ ];
print «The name you entered is too similar the reserved name «» . $row [ ‘reserved’ ]. «»» ;
break;
>
>
?>

Well, as mentioned above the speed is O(N^3), i’ve done a longest common subsequence way that is O(m.n) where m and n are the length of str1 and str2, the result is a percentage and it seems to be exactly the same as similar_text percentage but with better performance. here’s the 3 functions i’m using..

function LCS_Length ( $s1 , $s2 )
<
$m = strlen ( $s1 );
$n = strlen ( $s2 );

//this table will be used to compute the LCS-Length, only 128 chars per string are considered
$LCS_Length_Table = array(array( 128 ),array( 128 ));

//reset the 2 cols in the table
for( $i = 1 ; $i $m ; $i ++) $LCS_Length_Table [ $i ][ 0 ]= 0 ;
for( $j = 0 ; $j $n ; $j ++) $LCS_Length_Table [ 0 ][ $j ]= 0 ;

for ( $i = 1 ; $i $m ; $i ++) <
for ( $j = 1 ; $j $n ; $j ++) <
if ( $s1 [ $i — 1 ]== $s2 [ $j — 1 ])
$LCS_Length_Table [ $i ][ $j ] = $LCS_Length_Table [ $i — 1 ][ $j — 1 ] + 1 ;
else if ( $LCS_Length_Table [ $i — 1 ][ $j ] >= $LCS_Length_Table [ $i ][ $j — 1 ])
$LCS_Length_Table [ $i ][ $j ] = $LCS_Length_Table [ $i — 1 ][ $j ];
else
$LCS_Length_Table [ $i ][ $j ] = $LCS_Length_Table [ $i ][ $j — 1 ];
>
>
return $LCS_Length_Table [ $m ][ $n ];
>

function str_lcsfix ( $s )
<
$s = str_replace ( » » , «» , $s );
$s = ereg_replace ( «[��������]» , «e» , $s );
$s = ereg_replace ( «[������������]» , «a» , $s );
$s = ereg_replace ( «[��������]» , «i» , $s );
$s = ereg_replace ( «[���������]» , «o» , $s );
$s = ereg_replace ( «[��������]» , «u» , $s );
$s = ereg_replace ( «[�]» , «c» , $s );
return $s ;
>

function get_lcs ( $s1 , $s2 )
<
//ok, now replace all spaces with nothing
$s1 = strtolower ( str_lcsfix ( $s1 ));
$s2 = strtolower ( str_lcsfix ( $s2 ));

$lcs = LCS_Length ( $s1 , $s2 ); //longest common sub sequence

$ms = ( strlen ( $s1 ) + strlen ( $s2 )) / 2 ;

return (( $lcs * 100 )/ $ms );
>
?>

you can skip calling str_lcsfix if you don’t worry about accentuated characters and things like that or you can add up to it or modify it for faster performance, i think ereg is not the fastest way?
hope this helps.
Georges

similar_text — Вычисляет степень похожести двух строк

(PHP 4, PHP 5, PHP 7)

similar_text — Вычисляет степень похожести двух строк

Описание

Вычисляет степень похожести двух строк по алгоритму, описанному в Programming Classics: Implementing the World’s Best Algorithms by Oliver (ISBN 0-131-00413-1). Эта реализация алгоритма не использует стека, использованного в оригинале, вместо этого применяются рекурсивные вызовы, что в некоторых случаях может ускорить процесс. Сложность алгоритма составляет O(N**3), где N — длина более длинной из двух строк.

Список параметров

При передаче по ссылке третьего аргумента, similar_text() присваивает ему степень похожести двух строк в процентах.

Возвращаемые значения

Возвращается количество совпадающих символов в двух строках.

Смотрите также

  • levenshtein() — Вычисляет расстояние Левенштейна между двумя строками
  • soundex() — Возвращает ключ soundex для строки

Процентная похожесть двух слов

Вопрос собственно ЗАЧЕМ? Я понимаю, нужно, очень часто при взаимодействии с пользователем через текст, обрабатывать возможность опечаток-ошибок. Но тут?

Вопрос собственно ЗАЧЕМ? Я понимаю, нужно, очень часто при взаимодействии с пользователем через текст, обрабатывать возможность опечаток-ошибок. Но тут?

в голову приходит только что-то типа баллов: за каждую общую букву — 1 балл за каждую общую букву после другой общей — 3 балла за каждую общую букву после другой общей, при этом они соседние — 5 баллов. вот и придется подсчитать каждый для конкретной пара, а также найти максимум схожести. потом поделить. хотя кривовато будет. надо определиться с критериями похожести

Илон Маск рекомендует:  Что такое код metaphone
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL