反转sprintf /格式的方法

我必须通过分析格式化结果来启发式地确定格式模式字符串。 例如,我有这些字符串:   你有3条未读消息。      您有10条未读消息。      对不起,戴夫。我恐怕不能那样做。      对不起,弗兰克。我恐怕不能那样做。      这句话是错误的。 我想导出这些格式字符串:   您有%s条未读邮件      对不起,%s。我恐怕不能那样做。      这句话是错误的。 哪种方法和/或算法可以帮助我? 我的第一个想法是使用机器学习的东西,但我的胆量告诉我这可能是一个相当经典的问题。 一些额外要求: 参数的类型是无关紧要的,即如果参数最初是
%s
%d
或者填充或对齐,我不需要信息。 可以有多个参数(或根本没有参数) 通常,数据由数千个格式化字符串组成,但只有数十种格式模式。     
已邀请:
通过一些相似度量对字符串进行聚类(我尝试了最长公共子序列的长度,LCS)。如果你事先不知道,确定集群的数量是很难的。 在每个群集中,确定其中所有字符串的LCS,记录发生的间隙的位置。用
%s
替换间隙。 (您可能希望构建一个函数,该函数返回基于LCS的格式字符串,并在集群上返回
fold
/
reduce
。) 上面是一个贪心算法,给定{
foobar
fooBaR
}产生
foo%sa%s
。您可能希望以递归方式将由单个字符(或单个非空白字符等)分隔的任何一对出现的
%s
替换为单个
%s
。     

要回复问题请先登录注册