2017-09-22 18 views
2

我们正在处理来自某些不支持SMS连接的运营商(Sprint)的短信。在某些情况下,我们会收到以随机顺序出现的消息,并且我想将它们拼接在原始文本中。每次都明显不同,但这里是一条示例消息。将SMS片段组合成原始邮件

以下是我们收到他们

收到第一个顺序的消息,应该是3 - 96个字符

以尽可能高的水平上进行我的工作需要。我有 在所有ABC调查中收到100。

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

我已经在这个部门作为一个部件制造商自2014年10月,我 上午在优秀的客户服务团队。我也收到了每 季度,我已经

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

资格获批。我也多次获得了顶级表演者 以及13次在总统俱乐部。我在 非常精通所有的应用程序

我想重新整理这些进入原文

自2014年10月我已经在这个部门作为窗口小部件制造商,我 是上优秀的客户服务团队。我还收到了我已经符合条件的每个 季度。我也曾多次在总统俱乐部获得过顶级表演者 13次。我是 非常精通所有应用程序需要执行我的工作在 尽可能最高的水平。所有ABC调查中我都收到了100份。

有没有人有如何做到这一点的想法?

+0

你有没有包含元数据的全部信息,或只有文本? – lenz

+0

我们唯一的元数据是消息传递的时间。传递时间戳的顺序也不正确。 –

+0

@ShaunBowe想知道你从哪里得到这些数据。它是可共享的吗? – Daniel

回答

4

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

您应该使用训练在类似于消息的文本语料库上的模型(就词汇而言,拼写等)。 生成所有可能的排序,然后测量每个模型的困惑程度。 (生成所有的排列是O(n!),这或多或少是最坏的情况,但对于小的SMS(碎片的数量),它应该没问题。 但是,如果这是一个问题,你可以建立一个片段的矩阵,并使用维特比的算法找到最佳路径,对语言模型进行增量查找。你必须以某种方式执行所有碎片出现的路径。)

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种可能性的情况下,我们用它作为“答案”。

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

+1

所以假设1,2和3是应该在那个位置的消息。我在textgears.com上向grammar checker提交了每条消息,其中返回1的最高分。然后我提交了1 + 2和1 + 3,并且得分最高的是1 + 2。我也尝试过2 + 3和3 + 2,并且最高得分2 + 3。不知道他们是不是一个好的提供者,它只是我点击的第一个,但似乎有很多语法/句子检查API服务选择哪一个可能适合你想要的 – miknik

+0

我一定会给他们一枪。谢谢。 –