Algoritmus na podobnost slov/frází? rubrika: Programování: PHP

6 Marekzprahy
položil/-a 24.10.2013

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í.

odkaz Vyřešeno
9 Honza Břešťan
odpověděl/-a 24.10.2013

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).

Komentáře

  • Michal Kleiner : Solr pouzivame na vetsine webu, kde dava vyhledavani smysl (katalogy, znalostni databaze, hodne polozek obsahu) a zatim si na vysledky nikdo nestezoval, spis naopak. 24.10.2013
  • Marekzprahy : díky, tu funkci jsem neznal, vypadá to přesně jako to, co potřebuji 25.10.2013
  • honzajavorek : ještě přidám tip na https://github.com/seatgeek/fuzzywuzzy, opět pokud by to nemuselo být v PHP 25.10.2013

Pro zobrazení všech 7 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.