【问题标题】:dynamic programming word segmentation动态规划分词
【发布时间】:2012-10-29 19:50:01
【问题描述】:

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

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

我在设计算法方面需要帮助。

我尝试考虑一种算法,在该算法中,只要质量下降,我就会根据它们的质量和分段迭代地添加字母。 但这在上面的例子中失败了,因为它切断了我而不是见面。

我需要更好的算法建议。

谢谢

【问题讨论】:

标签: algorithm theory text-segmentation


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我在my blog写了一个程序来做这个;这里太长了。基本思想是切掉构成单词的前缀,然后递归处理输入的其余部分,在无法拆分整个字符串时回溯。

    【讨论】:

      【解决方案3】:

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

      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 之间的值,可以将它们相乘。还要保存你用过的单词,这样你就可以在最后分割整个字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多