2009-08-20 7 views
12

Generowanie prawdziwie losowego ciągu o określonej długości jest dość prostym (i już dobrze zakrytym) zadaniem.Jak mogę generować pseudolosowe "czytelne" ciągi w Javie?

Jednak; Chciałbym wygenerować "pseudo" losowy ciąg z dodatkowym ograniczeniem, które byłoby stosunkowo łatwe do odczytania (do czytnika natywnego języka angielskiego).

Myślę, że innym sposobem na powiedzenie tego jest stwierdzenie, że wygenerowany ciąg powinien składają się z "rozpoznawalnych sylab". Na przykład "akdjfwv" jest ciągiem losowym, ale w ogóle nie jest rozpoznawalne. "flamyom"; jest jednak bardzo "rozpoznawalny" (nawet jeśli jest to nonsens).

Oczywiście można sporządzić długą listę "rozpoznawalnych sylab", a następnie losowo je wybrać.

Ale czy istnieje lepszy sposób na zrobienie czegoś takiego, jak programowo wygenerować "rozpoznawalną sylabę" lub wygenerowanie "sylaby", a następnie przetestowanie go, aby sprawdzić, czy jest "rozpoznawalny"?

Mogę wymyślić kilka sposobów rozwiązania tej implementacji, ale jeśli ktoś już ją zaimplementował (najlepiej w Javie lub C#), wolałbym ponownie użyć ich pracy.

Wszelkie pomysły?

Odpowiedz

6

myślę, że powinni robić to, co chcesz:

Java Password Generator

Ma kodu źródłowego i wydaniem licencji, dzięki czemu można dostosować kod źródłowy do tego, co szukasz.

+0

Generuje to świetne ciągi. Występuje on przy dość wysokich kosztach wydajności (w przeciwieństwie do generowania kolejnych sekwencji). – Jared

17

Możesz spróbować wdrożyć Markov chain i nadać mu odpowiednie przejście do przetworzenia. Istnieje Java implementation, który może działać dla ciebie.

to próbka z interpolację między Genesis w języku angielskim i Genesis w języku (N = 1):

W bersaran thelely i avin inder THT teathe m lovig weay WAW ThOD mofin on T thte H fupiteg SOT llissed od ma. lllar t land fingujod maid af de wand tetodamoiz fosu Andesp. ersunen thenas lowhejod whipanirede tifinas Gofuavithila d gió Y Diche fua Dios co l, liens ly Y crerdíquen ticuesereregos hielase agúnd veumarbas iarasens laragún co eruerá laciéluelamagúneren Dien a He.

+0

Chciałbym +5 wspomnieć o Łańcuchy Markowa, ale mogę tylko +1 ...;) –

+0

@Alex, dzięki. możesz zagłosować na inną odpowiedź, która ci się podoba (jeśli są jakieś), jeśli czujesz się tak hojny –

+2

To byłoby głoszenie intencji systemu punktowego –

5

Musisz generować losowe sylaby. Najprostszym sposobem jest użycie sylab, które są spółgłoskowo-samogłoskowe lub spółgłoskowo-samogłoskowe. Z listy spółgłosek i samogłosek wybierz losowo, aby utworzyć sylaby, a następnie połącz sylaby, aby utworzyć ciąg.

Pamiętaj, że twoja lista spółgłosek nie powinna być literami, które są spółgłoskami, ale fonemami, więc "th", "st", "sl", itp., Mogą być wpisami na liście spółgłosek.

1

Naprawdę powinieneś sprawdzić SCIgen. Generuje on całe pół-nonsensowne artykuły naukowe: http://pdos.csail.mit.edu/scigen/

Źródło jest dostępne: jest wydawane na licencji GPL i jest obecnie dostępne za pośrednictwem anonimowego CVS.

1

Nie jestem do końca pewien, czego potrzebujesz, ale jeśli ludzie z branży graficznej używają generatorów Lorem Ipsum do stworzenia tekstu, który wygląda na tyle, na tekst, który twój mózg przetwarza jako taki, bez faktycznego czytania słowa. Więcej informacji: here

Nie wiem, czy istnieje usługa internetowa, którą można subskrybować, ale istnieje kilka witryn, które po prostu wygenerują dla Ciebie ciągi Lorem Ipsum, więc możesz ich użyć.

1

Istnieje dobra sekcja na ten temat w Programming Pearls. Jest online, ale zdecydowanie polecam zakup książki; Jedna z najlepszych książek programistycznych w mojej opinii.

0

Wszystko wraca do tego, dlaczego tego chcesz. Jeśli chcesz po prostu "wymawiającego bełkotu", myślę, że najłatwiej byłoby wygenerować naprzemienne spółgłoski i samogłoski. To byłaby niewielka część wszystkich możliwych do wymówienia bełkotów, ale jaki jest cel? Aby dać nieco szerszy zakres, można stworzyć tabelę spółgłosek fonemów i samogłoskowych fonemów, z listą spółgłosek zawierającą nie tylko pojedyncze litery, takie jak "b" i "d", ale także "th", "br", i tak dalej, i lista samogłosek może zawierać "oo" i "ea" itd. Kolejnym krokiem byłoby generowanie sylab zamiast liter, z sylabą zawierającą samogłoskę, spółgłoskę spółgłoskową lub spółgłoskę spółgłoskową. Oznacza to, że przechodzimy przez tworzenie sylab, następnie w sylabach wybierz jeden z trzech wzorów. Prawdopodobnie chcesz zakazać dwóch sylab samogłoskowych z rzędu. (Próbuję wymyślić przykład tego w języku angielskim.) Prawdopodobnie dzieje się tak, ale jedyne przykłady, jakie mogę wymyślić, są zapożyczone z innych języków, np. "Stoa".)

Powiązane problemy