Factor services with base service.

Lots of code was duplicated on the derived classes, including user output messages.
Rename `is_text_check` to `text_check?`.