如何将句子的单词组合成组合词?

时间:2009-04-13 00:15:13

标签: php nlp semantics composition

我有一个句子,例如

  

John Doe去年搬到了纽约。

现在我将句子分成单个单词,然后我得到:

  

数组('John','Doe','move','to','New','York','last','year')

这很容易。但后来我想把单个单词组合起来得到所有组成的术语。如果组合的术语有意义,我不想得到所有这些术语。该操作的结果应如下所示:

  John,Doe,John Doe,感动,Doe感动,John Doe搬家,搬到,Doe搬到了......

单词应按照k部分的限制组成。在上面的示例中,限制为3.因此,一个术语最多可包含3个单词。

问题:如何在PHP中编写组合代码?如果我有一个函数将一个句子作为输入并给出一个包含所有术语作为输出的数组,那将是很好的。

我希望你能帮助我。提前谢谢!

2 个答案:

答案 0 :(得分:4)

每个构图都将由起点和长度定义 - 只需循环。

PHP不会一直帮助你,但它确实有一些方便的功能。

$words = explode(" ", $sentence);
for ($start = 0; $start < count($words); $start++) //starting point
{
   //try all possible lengths
   //limit = max length
   //and of course it can't overflow the string
   for ($len = 1; $len <= $limit && $len <= count($words)-$start; $len++)
   {
      //array_slice gets a chunk of the array, and implode joins it w/ spaces
      $compositions[] = implode(" ", array_slice($words, $start, $len));
   }
}

答案 1 :(得分:2)

如果你已经有了将单词拆分成数组的代码,这个函数可以让你选择你希望短语最长的代码,并返回一个包含你的短语的数组。

function getPhrases($array, $maxTerms = 3) {
    for($i=0; $i < $maxTerms; $i++) { //Until we've generated terms of all lengths
         for($j = 0; $j < (sizeof($array) - $i); $j++) { //Until we've iterated as far through the array as we should go
             $termArray[] = array(array_slice($array, $j, ($i+1))); //Add this part of the array to the array
         }
    }
    return $termArray;
}

//Usage example

$newarray = explode(" ", "This is a pretty long example sentence");
print_r(getPhrases($newarray));