Kontakt

ul. Służby Polsce 3 lok. 37
02-484 Warszawa

Tel.: +48 22 490 96 56
Fax.: +48 22 349 27 14

e-mail:
biuro@verbis.pl

Experimental Environment

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:

 Schemat systemu EE

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