adam1024
15.07.2015, 08:21:52
W jaki sposób mogę zrealizować możliwe generacje słów.
Mamy dajmy na to słowo: "żoliborz"
w jaki sposób wygenerować dla niego kombinacje: "rzoliborz","rzoliboż","żoljborz", "żoljboż" ?
Pyton_000
15.07.2015, 09:08:15
musiałbyś napisać wyrażenie typu
(rz|ż)ol(i|j)bo(rz|ż)
a potem taki string parsować i generować kombinacje. Ktoś tu już na forum coś takiego robił ale do zdań, musisz poszukać.
Skie
16.07.2015, 11:43:47
1. Stwórz kolekcję wszystkich translacji, np [ ż => rz, i => j, rz => ż, j => i ]
2. Potnij swój tekst na tablicę wg kluczy w kolekcji translacji, czyli z "żoliborz" powinno powstać [ żol, ibo, rz ] oraz "odwróconą" tablicę [ rzol, jbo, ż ]
3. Wygeneruj wszystkie binarne ciągi o długości równej ilości elementu w tablicy z pkt. 2, czyli dla żoliborza będą to kombinacje wartości 3: 000, 001, 010, 011, 100, 101, 110, 111
4. Dla każdego ciągu binarnego w miejscu 0 wstaw fragment tekstu z pierwszej tablicy, dla 1 wstaw fragment tekstu drugiej tablicy
np. dla 101 to będzie "rzoliboż"
Zalety:
- zadziała dla każdego rozbudowanego tekstu
- teksty generowane są na życzenie, wieć nie trzeba ich trzymać w pamięci cały czas - tworzysz tekst z ciągu binarnego kiedy go potrzebujesz - potem go zapominasz
- brak uzycia regexpa
- brak użycia drogich funkcji operujących na stringach (oprócz exploda na początku)
Czy jes to najlepsze rozwiazanie? Nie wiem, ale to pierwsze co mi przyszło do głowy dla generacji tekstu i moim zdaniem nadaje się. Przetestuj.
Jeżeli jednak potrzbujesz tej generacji do stworzenia regexpa, czyli nie po to by generować słowa, a raczej sprawdzać czy są poprawne (nie licząc błędów ortograficznych) to wtedy jest nawet prościej bo zamiast pocinać tablicę możesz od razu podmieniać wartości wg kolekcji translacji. Czyli np jak masz j=>i to każde j podmienić należy na (j|i).
Crozin
16.07.2015, 13:22:03
W jakim celu potrzebujesz czegoś takiego? Brzmi jak coś pod silnik wyszukiwarki, a do tego zadania mógłbyś zaprząc np. Solra.