Краткое описание пакета
=======================

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

Продукт состоит из трех частей:

    FuzzyTraverser
        Для его включения, контейнеру, который будет траверситься таким
        образом нужно назначит интерфейс IFuzzyTraverser, например, такой
        директивой::
        
            <class class="zope.app.folder.folder.Folder">
                <implements 
                    interface="ng.fuzzytraverser.interfaces.IFuzzyTraverser"
                />
            </class>

        Имена всего содержимого выбранного таким образом контейнера можно
        будет набирать с ошибками. Степень чувствительности нечеткого
        траверсера к ошибкам можно настраивать, причем делается это двумя
        путями: установкой специальной настроечной утилиты и ее регистрация
        и через аннотации контейнеров, подвергающихся траверсу;
        
    FuzzyTraverserProperties
        Это утилита, установка которой позволяет задать параметры нечеткого
        траверса.  Утилита устанавливаетя в локальный сайт-менеджер,
        регистрируется с интерфейсом::
        
            ng.fuzzytraverser.fuzzytraverserproperties.interfaces.IFuzzyTraverserProperties 
            
        Параметры настройки следующие:
        
            On
                Нечеткий траверсер включен (иначе он работает как обычный
                траверсер);
                
            Rate
                Порог срабатывания - это та, максимально допустимая, степень
                искажение, при которой имя будет опознано. Указание величины
                ниже 0.5 не рекомендуется, особенно для системных областей
                сайта;
                
            Use
                Параметр не используется в этой версии;                                             

    FuzzyTraverserAnnotation
        Если необходима возможность настройки траверсера для отдельных
        областей сайта, то вам потребуется настройка через аннотации
        проходимых объектов. Что бы включить такую настройку, объекту должен
        быть назначен интерфейс IFuzzyTraverserAnnotable, например таким
        образом::
        
            <class class="zope.app.folder.folder.Folder">
                <implements 
                    interface="ng.fuzzytraverser.fuzzytraverserannotation.\
                        interfaces.IFuzzyTraverserAnnotable"
                    /> 
            </class>

        После этого у каждого такого объекта появится вкладка FuzzyTraverser, на которой
        можно настроить следующие параметры:

            On
                Нечеткий траверсер включен (иначе он работает как обычный траверсер);
                
            Rate
                Порог срабатывания - это та, максимально допустимая, степень искажение,
                при которой имя будет опознано. Указание величины ниже 0.5 не рекомендуется,
                особенно для системных областей сайта;
                
            Use
                Параметры этой аннотации будут использованы.
                
        Последняя настройка носит очень существенный характер, так как аннотация создается
        у каждого объекта и пришлосьбы проходить по всему дереву объектов и устанавливать им
        правильные значения настроек в аннотациях.

Принцип работы
--------------

Существует модуль "difflib":http://docs.python.org/lib/module-difflib.html,
предоставляющий класс SequenceMatcher, предоставляющий метод ratio().
SequenceMatcher сравнивает две строки, находит отличия между ними, строит
скрипт преобразования одной строки в другую. Метод ratio() возрващает
значение, имеющее смысл сходства двух строк (чем короче скрипт - тем более
похожи строки).
    
Траверсер пытается сравнить идентификатор объекта со всеми идентификаторами,
которые есть в папке. Наиболее сходный идентификатор и есть искомый объект.
Если сходство с этим идентификатором меньше некоторой пороговой величины -
считается, что объект не найден.

Краткие рекомендации к использованию 
------------------------------------

Продукт достаточно ресурсоемок и его включения на контейнерах объемомо более
ста элементов не рекомендуется. Кроме того, не рекомендуется использование
продукта в папках, с которыми связаны сайт-менеджеры, так как при низких
значениях параметра rate, сайт-менеджер может начать пытаться делать
неверные системные вызовы.

