Пусть это будет:
ABВACAAB Яблоко
АВВАСААС Апельсин
ABBBAA Трава
ABВAAAB Сосна
Для этого мы всего лишь сравниваем попарно слова-множества и запоминаем результат в совпадающей части:
в 1 паре ABBACAAB и ABBACAAC это будет ABBACAA – ФРУКТ
далее мы сравниваем полученное и следующее —
ABBACAA и АВВВАА – получаем АВВ – РАСТЕНИЕ, и сравниваем теперь его с последним:
АВВ и ABВAAAB – также находим общее АВВ – Растение;
Так мы получили ответ, что все 4 объекта относятся к «растениям».
Возьмем еще один пример:
AAAAAABABA Эмоции
AAAAAABBAA Симпатия
AAAAAABAAABA Миф
Так же сравниваем левые части кода этих слов-множеств, находим общее, и это будет AAAAAAB — Субъективное. И это совсем неочевидный ответ, который имеет место быть.
Для того, чтобы найти лишнее в ряде элементов, потребуются уже некоторые хитрости:
ABABACCABA Коза
ABABACCAAA Корова
ABABACDAA Лошадь
AAADAACBBA Стол
ABABABAAA Акула
И хотя для человека кажется очевидным лишнее (Стол), компьютерный алгоритм пришлось некоторое время совершенствовать для того, чтобы научить определять лишний элемент наиболее точно.
Сделать это можно следующим образом:
Мы сравниваем поочередно каждое из слов-множеств со всеми присутствующими; причем сравниваем по-хитрому, получая в качестве ответа процентное соотношение «попадания» в искомое.
Например, имея некие коды A B C D E, мы можем получить средневзвешенную оценку общности так:
А и В = 95%, А и С=93%, А и D=5%, А и E=50%, итого (95+93+5+50) /4=60.75%
Проделав тот же самый фокус в цикле, мы получим такие значения для каждого элемента, и тогда нам останется только выбрать тот, который имеет самую низкую оценку.
Если взглянуть на процедуру процентного сравнения детальнее, сначала мы сравниваем каждый символ позиционно с первого до последнего. Затем оцениваем нахождение всех частей одного слова в другом. То есть, если у нас есть строка «ABCDEF» мы берем и сравниваем подстроку AB, потом BC, потом CD, потом DE и EF. Затем группу трех символов ABC, BCD, CDE и DEF. Затем сравниваем группы четырех символов ABCD, BCDE и CDEF, и наконец пять – ABCDE и BCDEF. Так же мы снижаем оценку схожести, если «слова» отличаются по длине. (Но все же описанный здесь метод больше подходит для работы со словами естественного языка, где значение имеют корни, приставки суффиксы, словоформы и прочее. Для сравнения элементов MSM вполне подходит метод «первого расхождения», когда начиная сравнивать объекты с «головы», мы доходим до позиции расхождения и затем сравниваем пройденную длину с общей длиной самого длинного объекта. Процент отношения пройденного пути к общей длине и будет здесь показателем схожести. В более поздней версии программы именно этот способ сравнения показал наиболее точные решения. Прим. автора ко второму изданию.)
В указанном выше примере правильным решением для программы будет «Стол», поскольку его средневзвешенная оценка общности покажет наименьшее значение из всех. А следующим кандидатом «на вылет» однозначно станет «Акула».
Пользуясь этим приемом, можно определять лишний элемент в списке достаточно точно. Ошибки здесь допустимы только теоретически, если слова-множества имеют глубокие расхождения в порядке положения «в длину», но на практике такие случаи мне еще не встречались.
Сыграем в эту игру еще раз:
AAAAAAABAAB Сила
AAAAAAABAAA Вес
AABDABAA Водород
AAAAAAADC Теория
Здесь программа отсечет самый инородный объект – Водород. А затем на «вылет» пойдет и Теория.
2.2 Расширение значений свойствами и их наследование
Одной картой классификатора – нам не ограничиться. Ведь объекты реального мира имеют массу характеристик и свойств, которые дополняют их смысловые кластеры.