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

Php 如何将句子中的单词组合成组合词?,php,nlp,semantics,composition,Php,Nlp,Semantics,Composition,例如,我有一个句子 约翰·多伊去年搬到了纽约 现在我把句子分成几个单词,我得到: 数组('John','Doe','moved','to','New','York','last','year') 那很容易。但是我想把单个单词组合起来,得到所有的组合词。如果合成的术语有意义,那就没有意义了,不过我想得到所有的术语。该操作的结果应如下所示: 约翰,多伊,约翰·多伊,移动,多伊移动,约翰·多伊移动,到,移动到,多伊移动到 单词的组成应限制为k个部分。在上面的示例中,限制为3。所以一个术语最多可以包含3

例如,我有一个句子

约翰·多伊去年搬到了纽约

现在我把句子分成几个单词,我得到:

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

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

约翰,多伊,约翰·多伊,移动,多伊移动,约翰·多伊移动,到,移动到,多伊移动到

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

问题是:如何用PHP编写合成代码?如果我有一个函数,它以一个句子作为输入,并给出一个包含所有术语的数组作为输出,那就太好了


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

每个构图都将由一个起点和一个循环长度定义

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));
   }
}
$words=explode(“,$句子);
对于($start=0;$start对于($len=1;$len如果您已经有了将单词拆分为数组的代码,此函数将允许您选择希望短语最长的长度,并返回包含短语的数组

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));
函数getPhrases($array,$maxTerms=3){ 对于($i=0;$i<$maxTerms;$i++){//直到我们生成了所有长度的术语 对于($j=0;$j<(sizeof($array)-$i);$j++){//直到我们在数组中尽可能多地迭代 $termArray[]=array(array_slice($array,$j,($i+1));//将数组的这一部分添加到数组中 } } 返回$termArray; } //用法示例 $newarray=explode(“,”这是一个很长的示例句子”);
print_r(getPhrases($newarray));
非常感谢!这是一个函数,它给出了一个以术语作为输出的数组。这些术语甚至按部分的数量排序(先是1个单词,然后是2个单词,…)。完美!t=count($array);for($i=0;$i<$maxTerms;$i++){for($j=0,$i1=$i+1,$ti=$t-$i;$j<$ti;$j++){$termArray[]=array[]=array(array_slice($array,$j,$i1));}对不起,也许这是一个愚蠢的问题,但是你的代码做什么,OIS?