Я пытаюсь получить количество общих фраз из текста. Я хочу не просто отдельные слова, а все серии слов между любыми стоп-словами. Так, например, https://en.wikipedia.org/wiki/Wuthering_Heights Я бы хотел, чтобы фраза "wuthering heights" была подсчитана, а не "wuthering" и "heights".
if (in_array($word, $this->stopwords))
{
$cleanPhrase = preg_replace("/[^A-Za-z ]/", '', $currentPhrase);
$cleanPhrase = trim($cleanPhrase);
if($cleanPhrase != "" && strlen($cleanPhrase) > 2)
{
$this->Phrases[$cleanPhrase] = substr_count($normalisedText, $cleanPhrase);
$currentPhrase = "";
}
continue;
}
else
$currentPhrase = $currentPhrase . $word . " ";
Проблема, с которой я сталкиваюсь с этим «возрастом», учитывается, если используется слово «сцена». Решение здесь состоит в том, чтобы добавить пробел по обе стороны от переменной $cleanPhrase
. Проблема, к которой это приводит, заключается в том, что если нет пустого пространства. Это может быть запятая, точка остановки или какой-либо другой символ, обозначающий пунктуацию. Я хочу сосчитать все это. Есть ли способ, которым я могу сделать это без необходимости делать что-то подобное.
$terminate = array(".", " ", ",", "!", "?");
$count = 0;
foreach($terminate as $tpun)
{
$count += substr_count($normalisedText, $tpun . $cleanPhrase . $tpun);
}