Автор Тема: Търсене и съвпадения  (Прочетена 907 пъти)

Naka

  • Участник
  • *****
  • Публикации: 2519
    • Профил
Re: Търсене и съвпадения
« Отговор #15 -: Фев 09, 2019, 11:49 »
Искам нещо нещо да добавя. Всички тези алгоритми levenshtein, или soundex и т.н а също и търсачките (mysql fulltext search) работят добре само за английски. (За  Solr не съм сигурен, но не мисля, че знае особеностите на българският)

В примера който дадох (за inverted index), много добри резултaти се получават ако всички думи се заменят с корените им- и в индекса и това което подава клиента. Така търсенето става независимо дали клиента е въвел [computer] или [computers]. А и самият индекс става много по малък (най-малко наполовина) а също и още по-бърз.

И тук за английският е много лесно. Например computer, computers, computing, computed -> имат един корен computer (а може и compute). Някъде в нета имаше някъде един алгоритъм за намиране на корените в английският и той беше само двайсетина реда.

Обаче за BG е направо ужастъ. Имаме компютър, компютри, компютрите, компютърът, компютъра. проблема е че в бг, не можеш винаги да махнеш направо суфиксите (*и, *ът, *а), защото думата често се изменя. 

компютър->компютър, компютр(и)->компютр,
Някъде имаше статия (тук в linux-bg за спелинга на бг) че имало 100+ словоформи.

http://www.referati.org/formalizaciqta-na-bylgarskiq-ezik-i-razrabotkata-na-lingvistichen-procesor-morfologiq/41514/ref/p2
http://www.referati.org/formalizaciqta-na-bylgarskiq-ezik-i-razrabotkata-na-lingvistichen-procesor-morfologiq/41514/ref




« Последна редакция: Фев 09, 2019, 13:14 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

remotexx

  • Участник
  • *****
  • Публикации: 698
    • Профил
Re: Търсене и съвпадения
« Отговор #16 -: Фев 09, 2019, 18:12 »
Ами ако иска - нека си напише каквото си иска индексиране, а дали и колко ще се справи е отделен въпрос. Аз затова предложих - и отново предлагам, степенувани от най-лесното към най-трудното различни методи:
1) Десктоп търсачка (не съм много сведущ по темата - помагайте) - според тия най-новата суер дупер (т.е. поредна промяна/подмяна) е тази (която се ползва в линукс) - Recoll
2) Някаква БД с вградено пълно текстово индексиране - MySQL като най-лесна и (забележи) предлага да си качиш собствена добавка за напр. български
3) Solr - което и най-доброто за търсене в целия текст
4) сам да си напише - каквото му душа сака...
5) всяко друго нещо което ще му изгради индекс, че без индекс ще е много бавно... както го беше почнал той - без индекс, и всеки път почва да върти цикъла отначало и почва сравняването отначало.

по въпроса за soundex - българския (за разлика от английския) е фонетичен език така че няма нужда да се търси по фонетично съвпадение (ако думата съвпада както си е написана, то тя съвпада и фонетично) (не е като френския напр. половината букви не се четат или английския пише едно а се чете друго - C'est la vie)

и накрая Левенщайн и/ли която и да е др. метрика дето мери разстоянието между думите/фразите ще си работи перфектно. напр. Solr (предполагам и MySQL и др.) пак ще изкара и по-малко вероятните съвпадения но с по-малко вероятност - и понеже БГ е фонетичен как мислите кое ще по-по-най- близо до оригинала...
напр. (предполагаме че продавачките са много тъпи и са ги записали така)
32 бр. компоти vs. 32 гб компютър
предплагаем изход от Солр-а:
'32 гб компютър'  - 100%
'32 гб компютри'  - 95% - не виждам как на фонетичен език/азбука нещо различно от търсеното ще мачва по-добре
'32 гб компютъри' - 95%
'32 бр. компоти'    - 50%
...
'32 бр ножчета за бръснене' - 5% (това последното ако го настроите да показва всички - иначе спира около 70-80% или 100 бр. съвпадения... или нещо такова ми се върти)
« Последна редакция: Фев 09, 2019, 18:19 от remotexx »
Активен

Naka

  • Участник
  • *****
  • Публикации: 2519
    • Профил
Re: Търсене и съвпадения
« Отговор #17 -: Фев 09, 2019, 20:13 »
Е тук се дават идеи.  [_]3

Освен soundex() има и metaphone() което било много по добро. В задачата се пита защо в базата съм си оставил поле наречено metaphone ??? Е това не мога да се сетя.

За да мачва правилно трябва първо кирилският стринг да се прекара през транслитерация и след това metaphone(). Всеки може лесно да си направи експерименти през конзолното php.

Индекса например може да се направи не чрез униканите думи, а чрез metaphone представянето. Така още повече ще се свие, ще стане още по-бърз а и търсенето би трябвало да се подобри.
« Последна редакция: Фев 10, 2019, 11:04 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.