动态编程分词

时间:2012-11-09 13:27:54

标签: algorithm theory text-segmentation

假设我有一个像'meetateight'这样的字符串,我需要使用动态编程将其分成'8'等有意义的单词,如'meet''。

为了判断块/段“x = x1x2x3”的“好”程度,我得到一个黑盒子,在输入x上,返回一个实数质量(x),这样:质量的正值很大( x)表示x接近英文单词,大负数表示x远离英文单词。

我需要帮助设计相同的算法。

我试过思考一种算法,在这种算法中,每当质量下降时,我都会根据质量和分段迭代地添加字母。 但是这在上面的例子中失败了,因为它削减了我而不是满足。

我需要建议更好的算法。

由于

3 个答案:

答案 0 :(得分:0)

如何使用英语词典构建Trie并将其导航到扫描您的字符串时使用所有可能的叶子路径(当您有多个选择时进行回溯)。

答案 1 :(得分:0)

您可以使用动态编程,并跟踪输入的每个前缀的分数,一次添加一个字母。每次添加字母时,请查看是否可以在已使用的前缀上添加任何后缀(选择分数最高的前缀)。例如:

m = 0
me = 1
mee = 0
meet = 1
meeta = 1 (meet + a)
meetat = 1 (meet + at)
meetate = 1 (meet + ate)
meetatei = 1 (meetate + i)
meetateig = 0
meetateigh = 0
meetateight = 1 (meetat + eight)

要处理0到1之间的值,可以将它们相乘。还要保存你使用过的单词,这样你就可以在最后分割整个字符串了。

答案 2 :(得分:-1)

我在my blog编写了一个程序来执行此操作;这里包括太久了。基本思想是切断形成单词的前缀,然后递归处理输入的其余部分,当无法分割整个字符串时进行回溯。