У меня есть графический интерфейс в 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
.