我必须通过分析格式化结果来启发式地确定格式模式字符串。
例如我有这些字符串:
您有 3 条未读讯息。
您有 10 条未读讯息。
对不起,戴夫。我恐怕不能那样做。
对不起, Frank 。我恐怕不能那样做。
这句话是错误的。
我想得到这些格式字符串:
您有%s 未读消息
对不起,%s 。我恐怕不能那样做。
这句话是错误的。
哪些方法和/或算法可以帮助我?
我的第一个想法是使用机器学习的东西,但我的胆量告诉我这可能是一个相当经典的问题。
一些额外要求:
%s
或%d
,或者填充或对齐,我就不需要这些信息。答案 0 :(得分:1)
通过一些相似度量对字符串进行聚类(我尝试了最长公共子序列的长度,LCS)。如果你事先不知道,Determining the number of clusters是很难的部分。
在每个群集中,确定其中所有字符串的LCS,记录发生的间隙的位置。用%s
替换间隙。 (您可能希望构建一个函数,该函数返回基于LCS的格式字符串以及集群上的fold
/ reduce
。)
上面是一个贪婪的算法,给定{foobar
,fooBaR
}会产生foo%sa%s
。您可能希望以递归方式替换单个%s
由单个字符(或单个非空白字符等)分隔的%s
出现的任何一对。