Bo to jest tak … mo?na tam wrzuci? wszystko jak leci oczywi?cie, ale IMO i tak nie uzbieramy pe?nej listy, no i IMO jej nie potrzebujemy o czym za chwilk?
Moim zdaniem s?ownik na pewno powinien zawiera? wszystkie nazwy sk?adaj?ce si? z wielu s?ów co do których mamy pewno?? lub przynajmniej powa?ne podejrzenia, ?e zostan? one wpisane na ró?ne sposoby, chodzi tu o mo?liwie dalek? normalizacj?. W tej kategorii znajduj? si? te? daty bo “1 Maja” to w ko?cu dwa s?owa s? z technicznego punktu widzenia, praktycznie pojawiaj?ce si? jako: “1-ego Maja”, “1 Maja” “1ego Maja” i huk wie co tam jeszcze…
Musimy te? wpisa? tam s?owa które WRAK ze wzgl?du na niedoskona?o?? algorytmu unifikuj?cego nazwy b?dzie mia? ochot? popsu?, jak cho?by przytoczone tu Jacek, Agatka, Bolek i reszta klasy politycznej III PRL
Nie koniecznie ju?, ale niezmiernie wygodnie jest poda? nazwy zawieraj?ce polskie znaki diakrytyczne, bo to dziedzina gdzie jest masa b??dów wynikaj?cych cz?sto z przyzwyczaje? u?ytkowników (wiem po sobie, jakie? 2 lata zabra?o mi zanim nauczy?em si? pisa? w sieci z “ogonkami” i nadal ró?nie z tym bywa czasami) i innych takich.
Ogranicza nas to ile s?ownik zajmuje w pami?ci podczas dzia?ania, w tej chwili jest to jakie? 700MB co nie powoduje u komputera wi?kszej czkawki ale to dopiero pocz?tek. Gdyby si? zacz??o przytyka? co? si? wymy?li. Ostatecznie s?ownik mo?e by? czytany z dysku przy ka?dym przej?ciu ale to rozwi?zanie klasy masakra roku.
Ale … przecie? to jest tak, ?e wchodzi string: “Kacza”. System nie znajduje s?owa w s?owniku, bo string jest “niegro?ny” przechodzi wi?c do procedury optymalizuj?cej nazw? robi z ni? cuda i sam stwierdza czy jest ok, czy nie. Przyjmijmy, ?e zamiast Kacza kto? wpisa? Kacxa … i mamy byka a o tym nie wiemy bo nazwa nadal wygl?da dobrze i przechodzi. I tu niespodzianka, wystarczy w chwili kiedy uznamy, ?e trzeba si? zaj?c klasycznymi literówkami dokona? mikroskopijnej zmiany i w momencie kiedy WRAK chcia?by uzna? string za prawid?owy wys?a? go do pliku. Uzyskamy w ten sposób poka?ny plik tekstowy zawieraj?cy tylko nazwy które “przechodz?”. Tniemy go?cia na kawa?ki, ?eby si? nie przem?cza?, przepuszczamy przez jakiego? aspella tak, ?eby odfiltrowa? to co istnieje w s?ownikach (bardziej prawdziwych), dla pewno?ci otwieramy OO.o i ka?emy podkre?li? literówki, to co znalaz?, a my potwierdzimy naocznie dopisujemy do s?ownika:
Kacza, kacxa
bzyk i po robocie, po czym t? sekcj? s?ownika mo?na najzwyczajniej w ?wiecie usun?? bo jakie mamy szanse na dwie identyczne literówki?
Dok?adnie w ten sam sposób mo?emy wygenerowa? list? istniej?cych nazw, policzy?, posortowa?, wydrukowa? w formie fototapety…
Ja jeszcze jaki? czas chcia?bym potrzyma? WRAKa w jednej instancji, troch? go oczy?ci? … by? mo?e fragmenty przepisa?, bo s? tam miejsca w które wstyd zagl?da?, a co dopiero pokazywa?, a pó?niej ka?dy b?dzie móg? sobie go pomalowa? na dowolny kolor i dostosowa? do wybranej funkcji. Przy czym wydaje mi si?, ?e nie powinno si? go wiesza? tak zupe?nie na wierzchu, bo to narz?dzie którego obs?ugi nie powinno si? raczej uczy? na w?asnych b??dach we wspólnej bazie danych. Znacznie lepiej je?li kto? b?dzie chcia? zgada? si? via jabber, email whatever pogada? i mie? pewno??, ?e nikt (z zewn?trz) nie zapu?ci go z regexpem w stylu s/.*/Tu kiedy? by?a nazwa ulicy/ A meni te? si? przyda je?li kto? go obejrzy i powie mi co i dlaczego spierdzieli?em.
UPDATE:
tak … ka?da nazwa z polskimi znakami jest zamieniana na dwie dodatkowe, tak? bez polskich znaków w sensie ? → a, i tak? gdzie s? one zast?pione przez “WTF character”.
Dla przyk?adu dwa wiersze ze s?ownika:
Z?otej Kaczki
?ó?tej Ci?emki, ci?emki ?ó?tej
spowoduj? wygenerowanie s?ownika który zamieni na prawid?owe odpowiedniki:
zlotej kaczki
z?otej kaczki
zoltej cizemki
???tej ci?emki
ci?emki ?ó?tej
cizemki zoltej
ci?emki ???tej
tak?e ze wszelkimi wariacjami Wielkich/Ma?ych liter
to w której sekcji znajduje si? nazwa, ulica z nazwiskiem czy rzeka nei ma ?adnego znaczenia, one tam s? tylko po to, ?eby by?o je ?atwiej znale?? kiedy chce si? co? dopisa?, ale znaczenia to nie ma ?adnego.