检查用户输入字符串,以避免“懒惰键入”

时间:2018-09-25 08:02:19

标签: python string matlab validation user-input

我在Matlab(或Python)中有一个GUI界面,要求用户对特定事件进行评论。该注释很重要,并已加载到数据库中,以备将来对该事件进行跟踪。该评论必须详细。

我想避免诸如以下内容的懒用户输入:

  • ”“
  • “ aaaaaaaaaaaaaaaa”
  • “ safsafafa”
  • “测试”
  • “ 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内置的支持,
  • 机器学习方法可能有用,但仅适用于参数阈值的“离线”校准,
  • 我认为语言香农熵方法不能解决问题,因为char样本很少,我不需要区分语言,
  • 也许n_vowels/n_tot比率可以解决这个问题,
  • 当然,此检查不能避免使用“标准”结构但无意义的注释,例如This comment is useless, sorry

0 个答案:

没有答案