Zadanie #5455
Zmiany w interfejsie tagera
Status: | Zamknięty | Start date: | 23 May 2014 | |
---|---|---|---|---|
Priority: | Normalny | Due 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
naconst 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 środkutag_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
albotag_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ć (obecnetag_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 over 9 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 over 9 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 over 9 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ć ;)