Проверьте строку ввода пользователя, чтобы избежать "ленивого ввода" - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть графический интерфейс в Matlab (или также Python), который запрашивает у пользователя комментарий к определенному событию.Этот комментарий важен и загружается в базу данных для последующего отслеживания события.Этот комментарий должен быть подробным.

Я бы хотел избежать ленивых пользовательских вводов, таких как:

  • ""
  • "aaaaaaaaaaaaaa"
  • "safsafafa"
  • "test"
  • "x"
  • "........."
  • "qwerty"
  • и т. Д.

и запросите повторный ввод, если "ленивый вход" обнаружен следующим образом:

valid_input = 0;
while valid_input~=1
    valid_input = 0;
    user_input = '';
    user_input=InputTextRequest('Insert significant mandatory comment');
    switch user_input
        case {'exit','quit'}
            out = Popup('PROCEDURE ABORTED','PROCEDURE HAS BEEN ABORTED BY USER');
            return
        otherwise
            if CheckCommentValidity( user_input)~=1
                msg={'Comment field have to be significant:', [user_input ' is not valid, add details.']};
                out = Popup('NOTE NOT ACCEPTED',msg);
                valid_input = 0;
            else
                valid_input = 1;
            end
    end
end

Проблема состоит в том, чтобы определить, user_inputдопустимо или нет.

Я выступил с функцией, которая использует для проверки 4 различных параметра во входной строке:

  • количество уникальных символов n_unique
  • общее количество символов n_tot
  • количество пробелов n_space
  • количество гласных n_vowels

мне было интересно, чтопроверки я могу сделать между этими параметрами, чтобы определить правильность строки?Я итальянец, поэтому я знаю, что мой язык использует, например, больше гласных, чем английский, но в любом случае, существует ли список параметров / порогов, которые описывают «правильный» ввод?

Теперь я использую эту функцию спороговые значения параметров определены по приблизительным оценкам.

function valid = CheckCommentValidity( user_input)
    valid=0;

    %parameters
    n_unique = length(unique(strrep(user_input,' ',''))); %number of unique chars excluded spaces
    n_tot = length(user_input); %number of chars
    n_space = sum(user_input==' '); %number of spaces
    n_space = sum(ismember( user_input, 'aeiou'));

    %sub checks
    conformity_check(1) = n_unique > 8;
    conformity_check(2) = n_tot >= 10;
    conformity_check(3) = n_space >= 1;
    conformity_check(4) = n_vowels >= 4;

    %main check
    if sum(conformity_check==1) == length(conformity_check)
        valid=1;
    else
        valid=0;
    end

end

РЕДАКТИРОВАТЬ

Некоторые уточнения:

  • Этот пользовательский запрос-для-афаза комментария следует за фазой, в которой пользователь может выбирать из нескольких предопределенных типов событий, но только если выбрано значение UNKNOWN,
  • Обычно пользователь должен завершить эту фазу, только если он не может найти событиевведите предопределенный список,
  • Я бы хотел избежать подходов API для проверки орфографии / словаря, поскольку в Matlab / Python есть встроенная поддержка bo,
  • Подход машинного обучения может быть полезен, но только для "автономная "калибровка пороговых значений параметров,
  • Я не думаю, что языковой энтропийный подход Шеннона может решить проблему, так как образец символамало и мне не нужно различать языки,
  • Может быть, соотношение n_vowels/n_tot может быть решением,
  • Конечно, эта проверка не может избежать комментариев со «стандартной» структурой, но бессмысленнотакие как This comment is useless, sorry.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...