Algoritmus na podobnost slov/frází? rubrika: Programování: PHP
Přemýšlím, jak na dotazníkovém webu usnadnit vyhodnocování otevřených otázek. Když lidé odpovídají vlastními slovy, dost často myslí stejnou věc, ale napíšou to trochu jinak - s trochu jiným slovosledem, občas použijou nějakou zkratku, případně některé slovo z fráze vynechají, přidají závorky atd.
Dám příklad - mám tyto odpovědi:
1) M. Donutil (ND)
2) M. Vašut (ND Brno)
3) Miroslav Donutil
4) Mirek Donutil (Národní Divadlo)
5) Miroslav Donutil, národní divadlo
6) Marek Vašut
Napadá někoho z Vás nějaký algoritmus, který by byl schopen s určitou pravděpodobností říci, že odpovědi 1, 3, 4, a 5 si jsou nějak podobné a že třeba odpovídají chtěné odpovědi "Miroslav Donutil (Národní divadlo)" a naopak odpovědi 2 a 6 odpovídají nejvíce chtěné odpovědi "Marek Vašut (Národní divadlo Brno)"?
Můžete si to představit tak, že chtěné odpovědi budou v jednom poli (bude jich třeba 100) a skutečné odpovědi ve druhém poli (těch bude třeba 2000) - úkolem by bylo to napárovat s určitou pravděpodobností nějak k sobě (algoritmus nemusí být 100% přesný, počítám s tím, že to bude muset člověk ručně všechno projít a zkontrolovat).
P.S.: Chtěl bych to nějak vyřešit v čistém PHP bez nějakých speciálních extenzí.
Zkusil bych k tem "spravnym" odpovedim vypocitat Levenshteinovu vzdalenost od tech uzivatelskych odpovedi, s nejak rozumne nastavenou vahou insertion vs. substitution/deletion, aby se dobre braly v uvahu odpovedi, kde je nejaky "balast" navic.
Pokud by to nemuselo byt ciste v PHP, tak bych zkusil pouzit nejaky fulltext search engine jako Lucene (Solr), ulozit odpovedi uzivatelu a vyhledavat ty spravne (s nejakou nastavenou relevanci).
Pro zobrazení všech 7 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře