ul. K. Kardasia "Orkana" 3 lok. 37
02-484 Warszawa
Tel.: +48 22 490 96 56
Fax.: +48 22 349 27 14
e-mail:
biuro@verbis.pl
EE (ang. experimental environment) jest to szkielet (ang. framework) uniwersalnego środowiska doświadczalnego, zapewniający niezbędna podstawową funkcjonalność dla eksperymentów obliczeniowych:
- prymitywy we-wy
- obsługa memory storage + efektywna serializacja/deserializacja na dysk z kompresją
- odczyt/zapis plików
- obsługa wyjątków (w przetwarzaniu wsadowym jak i interakcyjnie)
- możliwość zapisywania scenariusza eksperymentu w pliku skryptu
- constructor dependency injection (Pico Container) - system automatyzujący wstrzykiwanie zależności dla wykonywanych akcji
Zatem konieczność programowania została ograniczona do minimum, czyli do zaimplementowania samej akcji, przeprowadzającej dany etap eksperymentu.
Opublikowany z licencją Apache Licence.
Struktura systemu
Systemy GI i EE zostały zaimplementowane w języku JAVA. Zastosowano koncepcję budowy komponentowej z wykorzystaniem kontenera komponentów i wzorca projektowego constructor dependency injection zapewniającego maksymalną elastyczność konfiguracji. Schemat systemu został przedstawiony na poniższym rysunku:
Sposób użycia
System może być używany zarówno w sposób interakcyjny (dzięki wywołaniu akcji InterAction) jak i wsadowy. Sposób interakcyjny pozwala wykonywać zdefiniowane w systemie akcje wpływając na ich działanie za pomocą parametrów zgodnych z zasadami przyjętymi w powłoce bash. Zaimplementowano także funkcje ułatwiające interakcje użytkownika z systemem, takie jak: historia wydanych komend, podpowiadanie nazw plików, akcji, parametrów, obiektów MemoryStorage.
Wywołanie wsadowe także może zakończyć się interakcyjnie, zwłaszcza, gdy jego efekty pozostają w pamięci operacyjnej i operator po zapoznaniu się z nimi chce zdecydować o dalszych działaniach. Także nieobsłużona sytuacja wyjątkowa, przy przetwarzaniu wsadowym, skutkuje przejściem systemu w tryb interakcji z użytkownikiem celem umożliwienia usunięcia problemu i kontynuacji procesu obliczeń.
Przykład działania
Poniżej przedstawiono przykładową konfigurację przetwarzania wsadowego (umożliwiającą znalezienie najczęściej występujących fraz w korpusie tekstów):
## Phrase counter config ## author: Marcin Golebski ## date: 2007-01-04 UberAction.default.executionSequence=\ echo To count phrases use: "uber -c phrase";\ echo To count phrases use (skeleton considered): "uber -c skeletal-phrase";\ InterAction UberAction.skeletal-phrase.executionSequence=UberAction \ -c process-all-criteria -p len_list,min_support,min_length_offset \ --len_list 20,25,30,35,40,45,50,55 --min_support 5 --min_length_offset 5 UberAction.process-all-criteria.executionSequence=IterAction \ -l SF_NOINC,SF,SF_BEST_FIRST_NOINC,SF_BEST_FIRST -c process-all-maps \ -o option --map $map -p map,min_support,min_length_offset,len_list \ --min_support $min_support --min_length_offset $min_length_offset \ --len_list $len_list;\ UberAction.process-all-maps.executionSequence=IterAction \ -l map-flexeme-simple,map-ipi-one,map-one,map-ipi-one-eos,\ map-gi-flexeme-simple-eos,map-gi-flexeme-simple,\ map-gi-flexeme-one-eos,map-gi-flexeme-one,map-flexeme-one \ -c skeletal-phrase-work -o map -p min_support,max_length,\ min_length_offset,len_list,option\ --min_support $min_support --max_length $max_length \ --min_length_offset $min_length_offset --option $option --len_list $len_list UberAction.skeletal-phrase-work.executionSequence=UberAction \ -c create-iterators --max_length 15 --min_length_offset 15 \ -p min_support,min_length_offset,option,map \ --min_support $min_support --option $option --map $map;\ IterAction -l $len_list -c create-iterators -o max_length \ -p min_support,min_length_offset,option,map --min_support $min_support \ --min_length_offset 5 --option $option --map $map;\ SkeletalPhraseCounterAction -s skel-prop-iter-$map-$option-len-15 \ -s skel-prop-iter-$map-$option-len-20 \ -s skel-prop-iter-$map-$option-len-25 \ -s skel-prop-iter-$map-$option-len-30;\ UberAction -c remove-iterators --max_length 15 --min_length_offset 15 \ -p min_support,min_length_offset,option,map --min_support $min_support \ --option $option --map $map;\ IterAction -l $len_list -c remove-iterators -o max_length \ -p min_support,min_length_offset,option,map --min_support $min_support \ --min_length_offset 5 --option $option --map $map UberAction.create-iterators.executionSequence=MemAction -i \ -n skel-prop-iter-$map-$option-len-$max_length \ -f data/wizzar/sequence/skeletal-proposals-$map-\ $option-sup-$min_support-len-$max_length-offset-$min_length_offset UberAction.remove-iterators.executionSequence=MemAction \ -r skel-prop-iter-$map-$option-len-$max_length UberAction.phrase.executionSequence=MemAction -i \ -f data/wizzar/korpus-ipi-selected-iterable.zip \ -n korpus-ipi-all-iterable;\ PhraseCounterAction -s korpus-ipi-all-iterable -m 20