2013-06-18 4 views
-7

Я знаю, как получить одну частоту слова в тексте с помощью функции explode и некоторых функций массива, но то, что я действительно ищу, - это получить частоту в 2 слова и более. Например, этот текст:
«Это образец текста. Это образец текста, сделанный для образовательных целей».Как получить частоту слов в тексте

Мне нужен код, чтобы сделать это:
является (2) текстом
образца (2)
образец (2)
.... и так далее

Спасибо заранее.

+2

Показать некоторые усилия: Что вы пробовали? –

+0

@MarvinLabs Я бы, если бы мог, поэтому я ищу помощь, поэтому, если вы можете добавить что-то, это будет хорошо. – dxer

+1

См. [Какие типы вопросов я должен избегать?] (Http://stackoverflow.com/help/dont-ask). – budwiser

ответ

0

Следующий код будет получить 2 последовательных слова:

$string = 'This is a sample text. It is a sample text made for educational purposes. This is a sample text. It is a sample text made for educational purposes.'; 

$sanitized = $even = preg_replace(array('#[^\pL\s]#', '#\s+#'), array(' ', ' '), $string); // sanitize: only letters, replace multiple whitespaces with 1 
$odd = preg_replace('#^\s*\S+#', '', $sanitized); // Remove the first word 

preg_match_all('#\S+\s\S+#', $even, $m1); // Get 2 words 
preg_match_all('#\S+\s\S+#', $odd, $m2); // Get 2 words 

$results = array_count_values(array_merge($m1[0], $m2[0])); // Merge results and count 
print_r($results); // printing 

Выход:

Array 
(
    [This is] => 2 
    [a sample] => 4 
    [text It] => 2 
    [is a] => 4 
    [sample text] => 4 
    [made for] => 2 
    [educational purposes] => 2 
    [It is] => 2 
    [text made] => 2 
    [for educational] => 2 
    [purposes This] => 1 
) 

Одно усовершенствование было бы преобразовать строку в нижний регистр?
Я позволил остальным вам выяснить :-)

+1

Отлично! Вы тот, кто вам очень благодарен! – dxer

+0

Кстати, у вас есть способ расширить этот код, чтобы он мог получить 3 или более слова? Кроме того, я не понимаю концепцию создания нечетного и даже, и если вы объясните, что логика для меня будет отличной. – dxer

+0

@dxer О да, вы можете изменить его на 3 слова, но вам нужно переписать регулярное выражение и, возможно, добавить еще одну (возможно, несколько) строк. Понятие «нечетное» и «четное» лучше всего иллюстрируется примером: «У меня есть« a b a b ». У нас есть 'a b' x2 и' b a' x1. Наше регулярное выражение проверяет слово word word, проблема заключается в том, что при регулярном выражении 'a b' он будет двигаться дальше, поэтому' b a' не будет сопоставлен. Когда он продвинется дальше, вторая часть будет соответствовать букве 'a b'. – HamZa

0

Некоторые псевдо-код, чтобы вы начали:

frequencies = empty array 
words = explode sentence on white spaces 
for each word in words : 
    sanitized word = trim word and convert to lower case 
    frequency[ sanitized word ] ++ 
endforeach 

frequency массив теперь содержит число раз слово появилось в предложении.

+0

Это не то, что я имею в виду, это только частота одного слова, то, что я ищу, это частота в 2 слова. – dxer

Смежные вопросы