Компонент для сравнивания текстов

Выкладываем свои наработки
Ответить
DemienDM
Сообщения: 6
Зарегистрирован: 2012.10.04, 18:16

Компонент для сравнивания текстов

Сообщение DemienDM »

Компонент позволяет определять схожесть текстов в процентах,
сравнение производится с помощью технологии Shingle

Установка

1. Скачать компонент

Код: Выделить всё

hg clone https://bitbucket.org/DemienDM/yii-shingles-component
2. Добавить компонент в приложение

Скопировать файл EShinglesComponent.php в директорию /protected/components/

3. Подключить компонент в файле конфинурации

protected/config/main.php

Код: Выделить всё

    'components'=>array(
        ...
        'shingle' => array(
            'class' => 'EShinglesComponent',
            //значение по умолчанию 4
            'shinglePrice' => 3,
        ),
        ...
    )
 
После этого компонент доступен как:

Код: Выделить всё

Yii::app()->shingle
Примеры использования

1. Простое сравнение двух текстов

Код: Выделить всё

$text1 = "Text length in four words";
$text2 = "Text length in four words";

$similarity = Yii::app()->shingle->checkText(text1, text2);

echo $similarity; //в данном случае результат будет 100
2. Сравнение одного текста с множеством

Код: Выделить всё

$incomingText = "some text";

$listValues = array(
                0 => "some text1",
                1 => "some text2",
                2 => "some text3",
                3 => "some text4",
            );

$textCompare = Yii::app()->shingle;

//Устанавливаем длину шингла в два слова
$textCompare->shinglePrice = 2;

$incomingTextShingles = $textCompare->getShingle($incomingText);
            
foreach($listValues as $item){
    echo $textCompare->checkText($incomingTextShingles, $item);
}
P.S. На http://www.yiiframework.com/extensions еще не выложил так как не хватает рейтинга,
сейчас пытаюсь утрясти этот вопрос.

P.P.S. В данный момент компонент успешно используется в проекте free-lancing.ru
предотвращая появление дубликатов в заказах.

Copyright CFutures
Аватара пользователя
AlexSimp
Сообщения: 568
Зарегистрирован: 2013.04.09, 11:30
Откуда: Киев

Re: Компонент для сравнивания текстов

Сообщение AlexSimp »

Пожалуй, все-таки для сравнения, а не сравнивания.
Жду, когда на форуме появятся вопросы "как сделать сайт на Yii?" и "как сложить два числа с помощью Yii?"...
Ro7
Сообщения: 71
Зарегистрирован: 2013.08.17, 15:08

Re: Компонент для сравнивания текстов

Сообщение Ro7 »

А если нужно сравнить с 200k записями в базе?
DemienDM
Сообщения: 6
Зарегистрирован: 2012.10.04, 18:16

Re: Компонент для сравнивания текстов

Сообщение DemienDM »

Как вариант писать компонент который будет выдергивать из базы стеки по 5-10 к и проверять на уникальность в каждом стеке, вариант мягко говоря сомнительный. Делать такой обьем за короткое время на "PHP" вряд ли получится, лучше в несколько потоков на каком нибудь "C" :)
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

Re: Компонент для сравнивания текстов

Сообщение zabachok »

Ro7 писал(а):А если нужно сравнить с 200k записями в базе?
Тогда наверное хэши надо сравнивать, а не сами тексты, не?
2b||!2b Just read the instructions
v0lume
Сообщения: 13
Зарегистрирован: 2012.06.04, 14:21

Re: Компонент для сравнивания текстов

Сообщение v0lume »

zabachok писал(а):
Ro7 писал(а):А если нужно сравнить с 200k записями в базе?
Тогда наверное хэши надо сравнивать, а не сами тексты, не?
предполагается схожесть в процентах
можно конечно делать 100 хэшей из всего текста (100 подтекстов), но при наличии например сдвига на один символ, схожесть резко стремится к 0
Ответить