【问题标题】:Generating word stacks from arrays从数组生成单词堆栈
【发布时间】:2009-11-24 14:00:34
【问题描述】:

我正在尝试用 PHP 做一个简单的词云练习,但几乎没有什么变化。我已经完成了所有其他事情,但我不知道如何做一个组合单词的循环。

这里的例子会让我更容易理解我想要做什么:

我有这样的数组:

$arr = array('linebreak','indent','code','question','prefer','we','programming')

现在我正在尝试做一个开始通过该数组并给我这样的数组的函数:

数组( [0] => '换行符' [1] => '换行缩进' [2] => '换行缩进代码' )

数组( [0] => '缩进' [1] => '缩进代码' [2] => '缩进代码问题' )

所以基本上它会逐个单词地遍历原始单词数组,并制作这些包含 1 到 5 个下一个单词的小数组。

【问题讨论】:

  • 这听起来与Markov chains 非常相似。这可能有助于您的研究。
  • 您是在寻找一个完整的实现,还是您编写的代码有一些特定的问题。如果是这样,请发布代码并描述问题。
  • "您是在寻找一个完整的实现,还是您编写的代码有一些特定的问题。如果是这样,请发布代码并描述问题。"我想我正在寻找完整的解决方案。我自己损坏的解决方案看起来很像这里发布的这些,但由于某种原因,我无法弄清楚如何让它只抓取 5 个下一个单词,然后移动到下一个单词,抓取 5 个下一个单词,依此类推:)跨度>

标签: php arrays tag-cloud


【解决方案1】:
    $arr = array('linebreak','indent','code','question','prefer','we','programming');
    $val = '';
    foreach($arr as $key=>$value)
    {
        $val .= ' '.$value;
        $newArr[] = $val;
    }

print_r($newArr);

【讨论】:

  • 获取第一个数组(Array( [0] => 'linebreak' [1] => 'linebreak indent' [2] => 'linebreak indent code' ))但忽略其余数组(Array( [0] => 'indent' [1] => 'indent code' [2] => 'indent code question' ) 等)。
【解决方案2】:
$a = array('linebreak','indent','code','question','prefer','we','programming');

for($i = 0; $i < count($a); $i++) {
    $p = array();
    for($k = $i; $k < count($a); $k++) {
        $p[] = $a[$k];
        $r[] = implode(' ', $p);
    }
}

print_r($r);

【讨论】:

  • 这似乎有正确的想法,但它并不限制每个 $r 最多有多少字。现在 $a 中只有几千个单词,它使用超过 3GB 的内存:)
【解决方案3】:

递归可能是要走的路。我还没有彻底检查下面的语法。

function descend($arr, $offset=0) {
  global $holder;

  $tmp=array_slice($arr,$offset,5); //limits the result set for each starter word to 5 or fewer children

  foreach($tmp as $word) {
    $val .= ' '.$word;
    $holder[$offset][]=$val;
  }
  $offset++;

  if($offset<count($arr)) descend($arr,$offset);
}

$arr = array('linebreak','indent','code','question','prefer','we','programming');
$holder = descend($arr);

【讨论】:

  • 这似乎与stereofrog的解决方案有同样的问题。它根本不限制每个数组的字数。
  • 好点。幸运的是,array_slice() 可以提供限制
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
相关资源
最近更新 更多