如何从拆分词列表中重新组合句子?

时间:2014-11-20 02:55:25

标签: java string search

我有一个随机的句子,然后我将句子(使用%字符)拆分成块,其中每个块是两个字符(包括空格和标点符号)宽。然后我洗牌。现在,问题是如何重新组合句子? 这是一个例子:
“今晚我很享受晚餐。” 分割句子:%I%en%jo%ye%d%my%d%in%ne%r%to%ni%gh%t。%
洗牌:%r%en%ye%d%d%in%to%my%ni%gh%ne%t。%jo%I%

现在,如何从这些块中重新组合句子? %r%en%ye%d%d%in%to%my%ni%gh%ne%t。%jo%I%

我的第一个想法是首先识别单词然后重建句子。可以根据我们拥有的空格数来猜测单词的数量。在上面的例子中,有4个空格,那么就有5个单词。还可以使用英语中所有单词的字典。 请告诉我你如何重新组装单词的想法 谢谢!

2 个答案:

答案 0 :(得分:0)

使用for循环遍历单词列表,然后将每个连续索引附加到字符串变量。

for(String s : list)
{
completeSentance += s;
}

答案 1 :(得分:0)

我首先尝试获取仍然留在块中的所有信息,然后使用某种(智能)暴力。

对于以下内容,我假设每个块的宽度为2个字符,并且在句子末尾使用.!?,在句子中使用逗号和分号。逗号或分号后,有一个空格。我进一步假设这里考虑的所有句子都可以切成2个字符宽的块。

May x可以是任意字符,_表示空格。

让我们来看看我们所知道的:

  • x_,如果空格在末尾,则块形成一个单词结尾,或一个只包含一个字符的单词。带有大写字母的X_也是句子第一个单词的候选词,除了I_或其他一个字母单词,用大写字母书写并且可以出现在句子的中间

  • _x,如果空格位于开头,则该字符为单词前缀。它不是句子的第一个块,而不是最后一个块。

  • x!x?x.以及与分隔句子的其他标点符号的组合是句子的最后一个


  • 形成以s声音结尾的单词的属格,所以这是另一个结尾的单词,如果 x发出s声音。

  • 如果x没有s声音,则会形成常规属性,并且可以预期会有s_块。

  • ´s代表了一般性案例中的一句话。

注意

我已经将这些撇号规则应用于生成,但它们是they're之类的情况,依此类推。如果要包含这些案例,则必须为这些案例创建规则。也许从一开始就避免使用这些简短形式会更容易。


  • 单词数是_ + 1的数字,但前提是逗号和分号后面有空格!

也许可以添加更多规则,例如G。 a__a有可能自己形成一个单词,但它也可能只是一个单词结束或开始。

拥有所有规则后,应用防弹的规则。使用标点规则查找句子的最后一个块。找到单词begins和单词endings。尽可能排除。在您不能再排除任何内容之后,请启动强制执行,但不要搜索所有单词,只搜索可以使用仍然打开的字符构建单词的单词。