Ja też tak myślałem parę godzin temu

. Ogólnie udało mi się stworzyć słownik strukturą przypominający oryginalny, jednak coś nadal jest nie tak. Robię gdzieś błąd, ale nie wiem dokładnie gdzie. Posiedzę nad tym jutro jak będę miał świeższy umysł

.
---- Dodano 04-12-2007 o godzinie 04:18 ----
Jak by kogoś interesowało, albo miał dokładniejsze informacje - poniżej opis struktury plików na tyle na ile udało mi się ją odgadnąć:
*-unigrams.dat: Plik zawiera wszystkie słowa z danego języka, wraz z informacją o frekwencji ich używania. Rozpoczyna się 4 bajtami - liczbą wyrazów w słowniku. Później następuje lista wyrazów, przy czym każdy rekord składa się z 4 lub 8 bajtowego nagłówka i samego wyrazu, zakończonego znakiem 0x00. Nagłówek:
- 2 bajty: wyznacznik ilości liter - wyznacza się go formułą: 0x821 + (0x421 * ilość liter w wyrazie). Nie pytajcie dlaczego

- 1 bajt: 'popularność': wyznacznik frekwencji, liczony od 0 do 100, przy czym 100 mają najpopularniejsze słowa
- 1 bajt: typ wyrazu. 02 oznacza 'zwykły wyraz', 03 (czasami 01?) oznacza nazwę własną. Jeśli to nazwa własna, nagłówek zawiera 3 dodatkowe bajty. 2 nieznane (zawsze 00 00?), ostatni zaś to maska bitów pokazująca które litery w wyrazie zapisuje się jako wielkie. Np. dla wyrazu 'iPhone' maska ta wynosi 02, dla skrótu 'DNA': 07
*-unigrams.idx: Zawiera indeks słów prawdopodobnie dla przyśpieszenia wyszukiwania słów. Zawiera odpowiednią liczbę 7 bajtowych rekordów dla każdej trójki liter rozpoczynających wyrazy w słowniku. Dla przykładu, jeśli słownik zawiera wyrazy: abazur, aborygeni, aborcja, adaptacja, to w indeksie znajdą się trójki: aba, abo, ada. Struktura rekordu:
- 3 bajty: trójka liter. Nie jest ona jednak zapisana w ASCII, lecz zakodowana. Aby uzyskać odpowiednią kombinację ASCII, można skorzystać z uproszczonej formuły (nie bierze ona pod uwagę cyfr i znaków specjalnych): 0x28 + ( ( kod ascii - 0x61 ) * 2 ).
- 4 bajty: offset pierwszego wyrazu w słowniku który zaczyna się od tej trójki liter
*-stems.dat: Dzięki temu plikowi iPhone jest w stanie szybko podawać sugestie dla źle zapisanych wyrazów. Znajdują się tutaj również trójki liter (z reguły pokrywające się z tabelą z pliku .idx), przy czym dla każdej trójki są podane wszystkie możliwożliwości 'pomylenia się', a więc dla każdej litery są podane sąsiadujące z nią na ekranie. I tak, dla trójki 'abo' będą podane m.in.: abp, abi, aco, sbi, sbo, i tak dalej. Plik dzieli się na dwie sekcje, przy czym każdą sekcję poprzedza jej długość w bajtach. Pierwsza składa się z 7 bajtowych rekordów, gdzie:
- 3 bajty: trójka analogiczna do tej z pliku .idx
- 4 bajty: offset do tabeli z sekcji drugiej (należy odjąć od niego 0x04 - ponieważ sekcja pierwsza właśnie w tym miejscu się rozpoczyna)
Druga sekcja to po prostu lista wszystkich możliwych kombinacji dla danej trójki. Każda z tych trójek jest oddzielona znakiem 0x00, a każda grupa trójek jest oddzielona dodatkowym 0x00.
I to tyle, ile udało mi się dziś dowiedzieć na temat formatu plików słownikowych. Plików one,two-letter-words nie brałem na razie pod uwagę, jednak z tego co widziałem powinny one stanowić najmniejszy problem z tego wszystkiego. Jeśli ktoś miałby jakieś pomysły lub zauważył błąd w moim rozumowaniu - niech da znać

.
---- Dodano 04-12-2007 o godzinie 04:20 ----
Udało mi się dość do stanu, gdy telefon co prawda nie poprawia moich błędów, ale powiększa odpowiednie pola liter w trakcie pisania polskich wyrazów - a więc jest już jakiś sukces

.
---- Dodano 04-12-2007 o godzinie 11:22 ----
Sukces! Mechanizm działa bez zarzutu. Okazało się jednak, że słownik ispell'a jest niewystarczający. Brakuje w nim wielu słów codziennego użytku, natomiast zawiera wiele słów na tyle abstrakcyjnych, że tylko zaśmiecają słownik. Dlatego potrzebuję waszej pomocy, aby stworzyć lepszy słownik. Jeśli macie jakieś namiary na listy najczęściej używanych słów polskich (niekoniecznie z ich frekwencjami, choć są one mile widziane) - wrzucajcie do nich linki tutaj.