Как это:
Использование списка стоп-слов, получение всех слов или фраз, не входящих в стоп-слова, подсчет вхождений каждого из них, сортировка по убыванию.
Стоп-слова должны быть списком всех распространенных английских терминов. Он также должен включать пунктуацию, и вам нужно будет предварительно поместить все знаки препинания в preg_replace, чтобы они сначала были отдельными словами, например "Что-то вроде этого." -> «Нечто подобное». ИЛИ, вы можете просто удалить все знаки препинания.
$content=preg_replace('/[^a-z\s]/', '', $content); // remove punctuation
$stopwords='the|and|is|your|me|for|where|etc...';
$stopwords=explode('|',$stopwords);
$stopwords=array_flip($stopwords);
$result=array(); $temp=array();
foreach ($content as $s)
if (isset($stopwords[$s]) OR strlen($s)<3)
{
if (sizeof($temp)>0)
{
$result[]=implode(' ',$temp);
$temp=array();
}
} else $temp[]=$s;
if (sizeof($temp)>0) $result[]=implode(' ',$temp);
$phrases=array_count_values($result);
arsort($phrases);
Теперь у вас есть ассоциативный массив в порядке частоты терминов, встречающихся в ваших входных данных.
То, как вы хотите сделать совпадения, зависит от вас, и это во многом зависит от длины строк во входных данных.
Я бы посмотрел, совпадают ли какие-либо из трех верхних ключей массива с какими-либо из первых трех от любых других данных. Это ваши группы.
Дайте мне знать, если у вас есть какие-либо проблемы с этим.