Zadanie #5455

Zmiany w interfejsie tagera

Added by Adam Radziszewski about 8 years ago. Updated almost 8 years ago.

Status:ZamkniętyStart date:23 May 2014
Priority:NormalnyDue date:
Assignee:Adam Radziszewski% Done:

100%

Category:-
Target version:c++

Description

W obecnej wersji tagera C++-owego jest mało funkcjonalny i mało czytelny interfejs. Proponuję następujące zmiany:
  • wszystkie obecne metody prywatne są dobre i warto je zostawić
  • zmieniłbym tylko w nich wszystkich const std::string na const std::string & (wszystkich, tj. w konstruktorze oraz trzech pozostałych metodach publicznych),
  • konwencja, by prywatne metody kończyć kreską jest pythonowa i w C++ się jej raczej nie stosuje; proponuję z tego zrezygnować (np. tag_input_)
  • metoda tag_sentence powinna być dostępna publicznie, jest bardzo ważna, jeśli tager ma być używany przez API
  • warto może też wystawić analogiczną metodę tag_chunk, a jeszcze lepiej nazwać ją tag_paragraph; czyli byśmy mieli takie publiczne metody:
    void tag_sentence(SentencePtr sentence, bool preserve_ambiguity, bool guess_unknown);
    void tag_paragraph(ChunkPtr paragraph, bool preserve_ambiguity, bool guess_unknown);
    
  • w ogóle we wszystkich nazwach metod w sumie warto nazywać te „chunki” akapitami (czyli „paragraph”), bo ta nazwa „chunk” jest myląca (to niestety moja wina, zaszłość z formatu XCES, gdzie akapit był znakowany słowem „chunk”); struktura danych Chunk musi już zostać i nie możemy zmienić jej nazwy, bo jest w Corpus2 i to jest używane przez wiele projektów, ale może warto nazywać chociaż w nazwach funkcji dla użytkownika nazywać to tak, by łatwiej było się połapać i nie mieszało się z chunkerem
  • wracając do tag_paragraph — jej implementacja może iterować po zdaniach i wywoływać w środku tag_sentence z tymi samymi opcjami,
  • obecna prywatna funkcja tag_input_(TokenReaderPtr& reader, TokenWriterPtr& writer) powinna dalej pozostać prywatną (bo na końcu finalizuje writer, poza tym podsumowuje statystyki), ale może lepiej byłoby zmienić jej nazwę, skoro ta ma być prywatna, np. tag_whole_input albo tag_input_inner (nazwy też nieszczególnie ładne, ale może będzie jednak czytelniej i tak; inne pomysły też mile widziane)
  • ja bym się raczej pozbył tych dwu funkcji: tag_chunks i tag_sentences, a ich implementacje (krótkie) wstawił od razu w kod wspomnianego wyżej prywatnego tag_input_inner czy jak to nazwać (obecne tag_input_ działające na readerze i writerze); ten kod będzie o tyle krótki, że pobranie opcji z configa wystarczy wtedy poczynić raz przed wejściem w ifa sprawdzającego, czy zachowujemy podział na akapity, czy też jedziemy tylko po zdaniach

History

#1 Updated by Adam Radziszewski about 8 years ago

Jeszcze jedno. Teraz jest:

void tag_input_(TokenReaderPtr& reader, TokenWriterPtr& writer);

Lepiej unikać przekazywania shared pointerów przez referencję, trudno jest prześledzić, co się właściwie dzieje wtedy, a zrobienie kopii wskaźnika nie jest bardzo kosztowne. W tej funkcji (czy tam analogicznej) nie dawaj więc tego ampersanda.

#2 Updated by Radosław Warzocha about 8 years ago

  • Status changed from Nowy to Odpowiedź
  • Assignee changed from Radosław Warzocha to Adam Radziszewski
  • % Done changed from 0 to 100

Przepisałem wszystko zgodnie z uwagami. Nie byłem w stanie wymyślić innej nazwy, więc pozostało tag_input_inner.

#3 Updated by Adam Radziszewski almost 8 years ago

  • Status changed from Odpowiedź to Zamknięty

Mi się też nie udało wymyślić lepszej nazwy, więc nie będę narzekać ;)

Also available in: Atom PDF