Wyszukiwarka z polską fleksją

Wyszukiwarka z polską fleksją
DT
  • Rejestracja: dni
  • Ostatnio: dni
0

Macie pomysł jak zrobić wyszukiwarkę na stronie, uwzględniającą polską fleksję (odmiana wyrazów przez osoby, przypadki, liczby).

Na przykład ktoś wpisuję słowo "rzeka" a tekst jest przeszukiwany z użyciem wyrazów: rzeka, rzeki, rzeką, rzekami itd.

Da się zrobić takie przeszukanie po stronie MySQL lub PHP ???

  • Rejestracja: dni
  • Ostatnio: dni
0

Może słownik z odmienionymi wyrazami Ci pomoże:
http://www.sjp.pl/slownik/odmiany/

Tylko to takie 'brute force' :) Myślę że najlepiej by było wykrywać temat słowa i jego formę fleksyjną i dopasowywać końcówki, bo takich form jest skończona liczba. Ale i tak najlepiej w celu opracowania jakiegoś znośnego algorytmu byłoby się skonsultować z polonistą ;)

Dla ludzi z zacięciem: http://www.ibuk.pl/fiszka.php?id=21 :P (żart)

johny_bravo
  • Rejestracja: dni
  • Ostatnio: dni
0

To sie raczej robi w druga strone i uzywa sie w tym celu lematyzacji lub stemmingu. W bazie zapisujesz w formie bez odmiany, czyli "rzeka", a przy wyszukiwaniu doprowadzasz wszystkie wyrazy do tej formy. Stemming dla odmiany to wyszukanie wspolnego rdzenia dla wyrazow.

bordeux
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Chorzów
  • Postów: 1130
0

Na początku chcę powiedzieć, że nie jestem nekrofilem, że odświeżam temat z 2009r. Chcę po prostu dać pewne rozwiązane dla ludzi, co w google tutaj się znaleźli.
Więc...

Co do tematu, to najlepiej użyć funkcji metaphone.

Kopiuj
<?php
var_dump(metaphone('rzeka', 5)); //string 'RSK' (length=3)
var_dump(metaphone('rzeki', 5)); // string 'RSK' (length=3)
var_dump(metaphone('rzeką', 5)); // string 'RSK' (length=3)
var_dump(metaphone('rzekami', 5)); //string 'RSKM' (length=4)
?>

Czyli przekształcać wyrazy przez metaphone, a później przez nowy ciąg znaków wyszukiwać.

RE
  • Rejestracja: dni
  • Ostatnio: dni
0

Absolutnie nie najlepiej, bo ta funkcja nie ma absolutnie nic związanego z lematyzacją (odmianą i tak dalej). Ta funkcja po prostu zamienia pewne grupy liter na inne, zgodnie z uproszczonymi regułami wymowy języka angielskiego. Co ma wymowa obcego języka do końcówek w języku polskim? Nie wiem. Już lepiej użyć levenshteina, chociaż też do tego problemu się nie nadaje.

Przynajmniej nie będzie takich sytuacji:

Kopiuj
var_dump(metaphone('rzeka') === metaphone('rsk')); // bool(true)
bordeux
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Chorzów
  • Postów: 1130
dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
0

Tylko wasze metody mają taką wadę, że są funkcjami php i nie bardzo jest je jak zastosować przy wyszukiwaniu w bazie danych... Musiałbym wybrać wszystko, a potem "szukać" w php, co każdy może sobie wyobrazić jak jest "wydajne".

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

A czemu by nie przypisać wszystkim odmianom jednego identyfikatora? Np jeśli mamy "rzeka, rzeki, rzeką, rzekami" to przypisać im wszystkim jeden identyfikator zarówno przy indeksowaniu treści jak i przy parsowaniu zapytania.

bordeux
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Chorzów
  • Postów: 1130
0

Jeszcze można szukany wyraz przekształcić w rdzeń wyrazu. Powiedzmy mamy słowo rzeki. Szukamy rdzeń, wspólną część, to będzie "rzek" , następnie w bazie wyszukujemy, poprzez:

Kopiuj
val LIKE "rzek_" OR val LIKE "rzek__" OR val LIKE "rzek___"

Co prawda wyszukiwarka nie będzie idealna... ale myślę że na podstawową, to dobre wyjście.

Jak szukać rdzeń wyrazu? Można słownikowo, lecz ja bym wybrał 75% znaków wyrazu, gdy przekracza on 7 liter.

ZJ
  • Rejestracja: dni
  • Ostatnio: dni
0

Może potraktować to po chamie stemmerem, np: http://www.cs.put.poznan.pl/dweiss/xml/projects/lametyzator/index.xml?lang=en .

netcreate.pl
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Pozwoliłem sobie odkopać temat bo jest dość ciekawy. Jest do tego dedykowane oprogramowanie, które umożliwia dość prostą integrację. Wymaga jednak zastosowania serwera dedykowanego lub VPSa, jako że jest to dodatkowa aplikacja uruchamiana na serwerze. Dostępny jest również plugin integrujący wyszukiwarkę z Wordpressem.
http://sphinxsearch.com/
Wyszukiwarka Sphinx jest bardzo wydajna.

Dla firm zainteresowanych realizacją wyszukiwarki fleksyjnej oferujemy takie rozwiązanie: http://www.netcreate.pl/wyszukiwarka-fleksyjna/

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.