Php 如何将句子中的单词组合成组合词?
例如,我有一个句子 约翰·多伊去年搬到了纽约 现在我把句子分成几个单词,我得到: 数组('John','Doe','moved','to','New','York','last','year') 那很容易。但是我想把单个单词组合起来,得到所有的组合词。如果合成的术语有意义,那就没有意义了,不过我想得到所有的术语。该操作的结果应如下所示: 约翰,多伊,约翰·多伊,移动,多伊移动,约翰·多伊移动,到,移动到,多伊移动到 单词的组成应限制为k个部分。在上面的示例中,限制为3。所以一个术语最多可以包含3个单词 问题是:如何用PHP编写合成代码?如果我有一个函数,它以一个句子作为输入,并给出一个包含所有术语的数组作为输出,那就太好了Php 如何将句子中的单词组合成组合词?,php,nlp,semantics,composition,Php,Nlp,Semantics,Composition,例如,我有一个句子 约翰·多伊去年搬到了纽约 现在我把句子分成几个单词,我得到: 数组('John','Doe','moved','to','New','York','last','year') 那很容易。但是我想把单个单词组合起来,得到所有的组合词。如果合成的术语有意义,那就没有意义了,不过我想得到所有的术语。该操作的结果应如下所示: 约翰,多伊,约翰·多伊,移动,多伊移动,约翰·多伊移动,到,移动到,多伊移动到 单词的组成应限制为k个部分。在上面的示例中,限制为3。所以一个术语最多可以包含3
我希望你能帮助我。提前谢谢 每个构图都将由一个起点和一个循环长度定义 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?