Tworzę program do generowania synonimizownych tekstów - tzw 'mieszarkę'.
Wynikowe teksty mają mieć określoną unikalność. Mój problem polega na oszacowania maksymalnej liczby możliwych tekstów do wygenerowania, aby program znał 'granicę' i nie pracował bezsensownie po jej przekroczeniu.
Przypuśćmy, że mamy projekt o takiej postaci:
Kod: Zaznacz cały
{Ala|Ola|Ela} {ma|posiada} {kota|rybki|{pieska|szczeniaka}}
Niestety, sporo tekstów z tego zbioru powtarza się w jakimś stopniu.
Unikalność jest to procent niepowtórzonych wyrazów w dwóch porównywanych tekstach.
"Ala ma rybki" jest unikalna względem "Ela ma rybki" w 33%.
"Ela posiada kota" jest unikalna względem "Ela ma rybki" w 66%.
Algorytm działa tak: Mamy jakiś próg unikalności, przykładowo N = 50%. M (wsp. 'jakości') jest \(\displaystyle{ N \le M \le 100%}\), zwykle jednak N i M są sobie równe.
Program losuje pierwszy tekst - jest on unikalny w 100%, bo jest jedyny
Każdy kolejny losowany tekst jest porównywany z tymi, będacymi już w puli.
Jeżeli M tekstów w puli 'powie', że kandydat jest unikalny względem nich w N, nowy tekst wchodzi do puli.
Wymyśliłem sobie takie szacowanie na potęgach dwójki: (tak jakby w grupie byłyby po 2 synonimy)
Przyjmuję najmniejszą liczbę tekstów za \(\displaystyle{ 2^{1} = 2}\). Takie dwa byłyby całkowicie różne od siebie.
Teraz mam liczbę wszystkich możliwych tekstów = \(\displaystyle{ 24}\).
Znajduję logarytm od podstawie 2 z 24 = \(\displaystyle{ 4.5849}\)
Zmniejszam wynik o N (tutaj 50%) i dostaję \(\displaystyle{ 2.29248125}\).
\(\displaystyle{ 2^{2.29248125}}\) to około 4,89, co zaokrąglam w dól i mam 4 możliwe teksty unikalne w 50%.
Empirycznie jednak wiem, że gdy N = 50%, M = 100%, to program generuje max 6 takich tekstów.
Gdy N = 75%, M = 75%, to program generuje max 2 teksty i tak też wynika z oszacowania.
Gdy N = M = 50%, tekstów powstaje dużo, ponad tysiąc, ale myślę, że będzie ich nieskończenie wiele. Oszacowanie twierdzi, że da się 4 Czuję, że szacowanie jakoś działa tylko dla M = 100%.
Rozrzut wynika z faktu, że ilość synonimów może być różna, nie zawsze po 2 w grupie - ja mam tutaj 3, 2 i 4.
Oczywiście losują się daleko większe teksty, gdzie program (i szacowanie) dla niższych N się sprawują lepiej (bo na większej próbie niedoskonałości się rozmywają - tutaj jest 'niewdzięczny' przykład)
I teraz moje pytanie: czy da się w prosty sposób oszacować dokładniej liczbę tekstów, również dla M mniejszych od 100%? Czy w ogóle dobrze myślę?