Algorytm porównywania tekstów

0

Witam, mam do napisanie projekt, który będzie porównywał teksty pod względem procentu zgodności. Tylko nie wiem nawet jak to ugryźć. Zadanie ogólnie wygląda tak, że użytkownik na starcie podaje po ile fraz będzie porównywanych. Z napisaniem nie będzie problemu, chodzi mi bardziej o nakierowanie mnie na właściwą drogę. Czytałem o algorytmie KMP, jestem w stanie go napisać ale co dalej. Nie wiem nawet jak przechodzić po ciągu, czy porównywać 1 do 1 (chodzi mi o miejsca znaków) czy się zgadza. Czy brać np. po K wyrazy z pierwszego ciągu i przejść drugi ciąg w poszukiwaniu zgodności; Jak znajdę to zwiększam X o 1 i biorę następny zestaw wyrazów K do porównania. Tylko jak w tym przypadku policzyć jaki procent wyrazów się zgadzał? Jeżeli za K przyjmę 1 lub 5 to wiadomo że dla 5 ten % może być mniejszy. Ktoś się spotkał kiedyś z takim problemem? Proszę o pomoc. Z góry dziękuję,

0

Ale zgodnosci jakiej? Semantycznej? Syntaktycznej? Czy to:
ala ma kota
kota ala ma
są zgodne teksty czy też nie? A te?
ala ma kota
ala posiada ssaka kotowatego

Bo sposób porównywania zależy od tego co chcesz osiągnąć. Jak chcesz porównać czy teksty są "identyczne" to mógłbyś liczyć odległość levenshteina, ale jeśli chciałbyś np. porównywać bliskość semantyczną to już bez lematyzacji/stemmingu się raczej nie obędzie a może i trzeba będzie jakiś topic modeling zastosować.

0

Bardziej tak:

ala ma kota
ala ma kota

Teksty są w 100% zgodne, a

ala ma kota
ala ma kotka

Teksty za zgodne w 2/3.

0

ala beatka
ala ma kota

Na ile są te teksty zgodne? 1/2 czy 1/3?
Chyba że zawsze będzie tyle samo wyrazów;

W tym drugim przypadku wystarczy przecież rozbijać wpisane zdanie na poszczególne wyrazy i sprawdzać ile jest zgodnych, a ile nie :-P

0

I w tym cały mój problem. Z rozbiciem i sprawdzaniem nie mam problemu. Bardziej mam z obliczeniem zgodności w %. Teksty mogą być różnych długości.
Oraz jeszcze jedna rzecz

ala ma kota
ma kota ala ala

Czy jeżeli sprawdzał bym z ciągu pierwszego czy wystepuje w drugim po jednym wyrazie to czy mogło by mi wyjść więcej niż 100%? A co w przypadku obszernych tekstów. Gdzie załóżmy, że oba teksty zostały utworzone z tym samych wyrazów i w takiej samej ilości ich użyć, lecz z pozmienianą kolejności. To przy sprawdzaniu każdego wyrazu pojedynczo każdy by miał swojego odpowiednika i było by 100%. Choć ewidentnie widać by było, że oba teksty są całkowicie różne.

0

Z drugiej strony jak będzie
ala ma kota i ala ma małego kota to takie podejście z podciągami też się nie za bardzo sprawdzi bo wszystko nagle będzie "przesunięte".

1
czarek1122 napisał(a):

Czy jeżeli sprawdzał bym z ciągu pierwszego czy wystepuje w drugim po jednym wyrazie to czy mogło by mi wyjść więcej niż 100%? A co w przypadku obszernych tekstów. Gdzie załóżmy, że oba teksty zostały utworzone z tym samych wyrazów i w takiej samej ilości ich użyć, lecz z pozmienianą kolejności. To przy sprawdzaniu każdego wyrazu pojedynczo każdy by miał swojego odpowiednika i było by 100%. Choć ewidentnie widać by było, że oba teksty są całkowicie różne.

Poczytaj o n-gramach - n-gramy rozwiązują problem o którym piszesz.

0

Zrobię to chyba tak. Wezmę z 1(pierwszego teksu) K wyrazów i będę sprawdzał czy znajduje się w 2(drugim tekście). Jeżeli tak to zwiększam x i pobieram następny zestaw do porównania; jeżeli nie to nie pobieram następnego całego K tylko przesuwam się o jeden wyraz dalej, i sprawdzam dla niego. Tylko w tym przypadku jak obliczyć procent w jakim stopniu oba teksty zawierają te same wyrazy?

1 użytkowników online, w tym zalogowanych: 0, gości: 1