将SMS片段组合到原始消息中

时间:2017-09-22 19:39:14

标签: algorithm nlp twilio

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

以下是我们收到的订单中的消息

收到第1名,应该是3 - 96个字符

  

需要在尽可能高的水平上完成我的工作。我有   所有ABC调查都收到100分。

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

  

自2014年10月以来,我作为小工具制造商一直在这个部门工作   我是优秀的客户服务团队。我也收到了一个   我已经四分之一

收到第3名,应该是第2名--157个字符

  

符合资格。我也多次获得Top Performer   以及在总统俱乐部13次。我非常精通   所有申请

我想将这些重新订购为原始文本

  

自2014年10月以来,我作为小工具制造商一直在这个部门工作   我是优秀的客户服务团队。我也收到了一个   我有资格参加的季度。我也收到了Top Performer   多次以及总统俱乐部13次。我是   非常精通所有在我的工作所需的应用程序   最高级别。我在ABC调查中收到了100份。

有没有人知道如何做到这一点?

2 个答案:

答案 0 :(得分:4)

一般而言,一种天真的方法是使用语言模型来决定哪种排序是最“自然”的。 我无法提供任何代码,因为您没有提供此框架的任何细节。

您应该使用与文本语料库相似的模型(在词汇,拼写等方面)。 生成所有可能的排序,然后测量模型对每个排序的困惑。

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

答案 1 :(得分:0)

我从lenz的回答中提出了生成所有排列的建议,并尝试使用Conditional Probabilities from Azure但收效甚微。该服务仍处于测试阶段,当然对我们的测试消息没有帮助。收到的短信会有很大差异,所以我们似乎不太可能创建模型并测试可能的排序。

在我们的特定情况下,我们确定运营商(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

<强> 1-3-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

<强> 2-1-3

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

<强> 2-3-1

2 -> 3: 159 characters + " been" = 164. 164 >= 160 - OK
3 -> 1: 157 characters + " needed" = 164. 164 >= 160 - OK

<强> 3-2-1

3 -> 2: 157 characters + " I" = 159. 159 < 160 - Not a valid possibility    
2 -> 1: 159 characters + " needed" = 166. 166 >= 160 - OK`

<强> 3-1-2

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

从上面的计算可以看出,唯一有效的组合是2-3-1。其他组合会有不同的分歧。在我们有一种可能性的情况下,我们将其用作“答案”。

如果我们有超过1种可能性的场景,我们会使用一些基于大小写和标点符号的加权算法来找到最佳拟合。如果我们仍然无法确定答案,那么我们在收到消息的顺序中取得了最高的加权结果(它们在大多数时间以正确的顺序排列)。