Algorithm 将SMS片段合并到原始消息中

Algorithm 将SMS片段合并到原始消息中,algorithm,nlp,twilio,Algorithm,Nlp,Twilio,我们正在处理来自某些不支持SMS连接的运营商(Sprint)的短信。在某些情况下,我们会收到随机排列的消息,我想将它们重新缝合到原始文本中。文本每次都明显不同,但这里有一个示例消息 这是我们收到的消息的顺序 是第一个收到的,应该是第三个-96个字符 需要以尽可能高的水平完成我的工作。我有 在所有ABC调查中获得100分 第二个收到,应该是第1个-159个字符 自2014年10月以来,我一直在该部门担任小部件制造商,我 我是优秀的客户服务团队的一员。我还收到了一封每封信 我的四分之一 第三次收到,

我们正在处理来自某些不支持SMS连接的运营商(Sprint)的短信。在某些情况下,我们会收到随机排列的消息,我想将它们重新缝合到原始文本中。文本每次都明显不同,但这里有一个示例消息

这是我们收到的消息的顺序

是第一个收到的,应该是第三个-96个字符

需要以尽可能高的水平完成我的工作。我有 在所有ABC调查中获得100分

第二个收到,应该是第1个-159个字符

自2014年10月以来,我一直在该部门担任小部件制造商,我 我是优秀的客户服务团队的一员。我还收到了一封每封信 我的四分之一

第三次收到,应为第二次-157个字符

我有资格。我还多次获得最佳表现奖 我也去过总统俱乐部13次。我很精通英语 所有应用程序

我想把这些重新整理成原文

自2014年10月以来,我一直在该部门担任小部件制造商,我 我是优秀的客户服务团队的一员。我还收到了一封每封信 四分之一,我有资格。我还收到了最出色的表演 多次参加总统俱乐部13次。我是 非常熟练地掌握执行公司工作所需的所有应用程序 可能的最高级别。我在所有ABC调查中都获得了100分


有人知道如何做到这一点吗

一般来说,一种幼稚的方法是使用语言模型来决定哪种顺序是最“自然”的。 我不能提供任何代码,因为您没有给出该框架的任何细节

您应该使用在文本语料库上训练的模型,该模型与消息类似(在词汇、拼写等方面)。 生成所有可能的顺序,然后测量每个顺序的模型复杂性

(生成所有排列是
O(n!)
,这或多或少是最坏的情况,但对于较小的
n
s(SMS片段数),应该可以。
但如果这是一个问题,您可以构建片段的
n
×
n
矩阵,并使用维特比算法找到最佳路径,对语言模型进行增量查找。您必须以某种方式强制执行所有片段出现的路径。)

我采纳了伦茨答案中的建议,生成所有排列,并尝试使用,但收效甚微。这项服务仍处于测试阶段,当然对我们的测试消息没有帮助。收到的短信会有很大的不同,因此我们似乎不太可能创建一个模型并测试可能的顺序

在我们的特定案例中,我们确定运营商(Sprint)基于空格来中断消息,并且在每条消息中最多只发送160个字符。根据这些数据,我们生成了每种可能的消息顺序,以查看运营商是否会以这种方式破坏消息。根据以上3条消息,这些消息有6种可能的顺序。(下文)

1-2-3

1 -> 2: 96 + " I" = 98. 98 < 160 - Not a valid possibility
2 -> 3: 159 characters + " been" = 164. 164 >= 160 - OK
2 -> 1: 159 characters + " needed" = 166. 166 >= 160 - OK
1 -> 3: 96 characters + " been" = 101.  101 < 160 - Not a valid possibility
3-2-1

2 -> 3: 159 characters + " been" = 164. 164 >= 160 - OK
3 -> 1: 157 characters + " needed" = 164. 164 >= 160 - OK
3 -> 2: 157 characters + " I" = 159. 159 < 160 - Not a valid possibility    
2 -> 1: 159 characters + " needed" = 166. 166 >= 160 - OK`
3->2:157个字符+I=159。159<160-不是有效的可能性
2->1:159个字符+“需要”=166。166>=160-正常`
3-1-2

1 -> 3: 96 characters + " been" = 101.  101 < 160 - Not a valid possibility
3 -> 2: 157 characters + " I" = 159. 159 < 160 - Not a valid possibility
3 -> 1: 157 characters + " needed" = 164. 164 >= 160 - OK 
1 -> 2: 96 + " I" = 98. 98 < 160 - Not a valid possibility
3->1:157个字符+“需要”=164。164>=160-正常
1->2:96+“I”=98。98<160-不是有效的可能性
从上面的计算可以看出,唯一有效的组合是2-3-1。其他组合将以不同的方式分解。在我们有1种可能性的情况下,我们将其作为“答案”


如果我们有超过1种可能性的场景,我们会使用一些基于大写和标点符号的加权算法来寻找最佳匹配。如果我们仍然无法确定答案,那么我们将按照收到消息的顺序(大多数情况下,消息的顺序都是正确的)选择权重最高的结果。

您是拥有包含元数据的整个消息,还是只有文本?我们唯一拥有的元数据是消息传递的时间。交货时间戳的顺序也不正确。@我们不知道您从哪里得到这些数据。它是可共享的吗?数据来自我们的客户候选人,所以很遗憾我不能共享。所以假设1、2和3是应该处于该位置的消息。我将每条信息提交给textgears.com上的语法检查器,该检查器返回的分数最高,为1分。然后我提交了1+2和1+3,得分最高的是1+2。我也试过2+3和3+2,得分最高的是2+3。不知道他们是否是一个好的提供商,这只是我点击的第一个,但似乎有很多语法/句子检查api服务可供选择,它们可能适合您想要的。我肯定会给他们一个机会。谢谢