计算单词在PHP文本中出现的频率

计算单词在PHP文本中出现的频率,php,Php,在php中,我需要加载一个文件,获取所有单词,并回显单词以及每个单词在文本中出现的次数, (我还需要它们按降序显示最常用的单词)★✩ 此函数使用正则表达式查找单词(您可能需要更改它,具体取决于您对单词的定义) 它迭代每个单词,构造一个关联数组(以单词为键),其中值表示每个单词的出现。(例如,$output['hello']=3=>hello在文本中出现了3次) 也许您需要更改该函数以处理大小写不敏感问题(即,根据该函数,“hello”和“hello”不是同一个词) $words=str_word

在php中,我需要加载一个文件,获取所有单词,并回显单词以及每个单词在文本中出现的次数,
(我还需要它们按降序显示最常用的单词)★✩

此函数使用正则表达式查找单词(您可能需要更改它,具体取决于您对单词的定义)

它迭代每个单词,构造一个关联数组(以单词为键),其中值表示每个单词的出现。(例如,$output['hello']=3=>hello在文本中出现了3次)

也许您需要更改该函数以处理大小写不敏感问题(即,根据该函数,“hello”和“hello”不是同一个词)

$words=str_word_count($text,1); $word\u frequencies=数组\u计数\u值($words); arsort(单词频率); 打印频率(单词频率);
这里有一个例子:

$text = "A very nice únÌcÕdë text. Something nice to think about if you're into Unicode.";

// $words = str_word_count($text, 1); // use this function if you only want ASCII
$words = utf8_str_word_count($text, 1); // use this function if you care about i18n

$frequency = array_count_values($words);

arsort($frequency);

echo '<pre>';
print_r($frequency);
echo '</pre>';
function utf8_str_word_count($string, $format = 0, $charlist = null)
{
    $result = array();

    if (preg_match_all('~[\p{L}\p{Mn}\p{Pd}\'\x{2019}' . preg_quote($charlist, '~') . ']+~u', $string, $result) > 0)
    {
        if (array_key_exists(0, $result) === true)
        {
            $result = $result[0];
        }
    }

    if ($format == 0)
    {
        $result = count($result);
    }

    return $result;
}
utf8\u str\u word\u count()
函数,如果需要:

$text = "A very nice únÌcÕdë text. Something nice to think about if you're into Unicode.";

// $words = str_word_count($text, 1); // use this function if you only want ASCII
$words = utf8_str_word_count($text, 1); // use this function if you care about i18n

$frequency = array_count_values($words);

arsort($frequency);

echo '<pre>';
print_r($frequency);
echo '</pre>';
function utf8_str_word_count($string, $format = 0, $charlist = null)
{
    $result = array();

    if (preg_match_all('~[\p{L}\p{Mn}\p{Pd}\'\x{2019}' . preg_quote($charlist, '~') . ']+~u', $string, $result) > 0)
    {
        if (array_key_exists(0, $result) === true)
        {
            $result = $result[0];
        }
    }

    if ($format == 0)
    {
        $result = count($result);
    }

    return $result;
}

这是家庭作业吗?到目前为止,你有什么?我还没有开始,只是想找出与这个问题相匹配的最佳答案?问题是我想得到一个按降序排列的单词列表,而不是计算一个特定的单词OP从来没有定义过这个单词要用的语言,假设它是一种在书面文本中使用空格的语言,那么你的语言在包含元音、墓碑符号等的单词上就失败了。正则表达式规范“\w”的使用应仅与“单词字符”匹配,其中包括带有重音标记的拉丁字母以及西里尔文、韩语、泰语、印地语等更具异国情调的字母。非常感谢这回答了我的问题,但是你又给了我一个,现在我要学习正则表达式,你能告诉我如何用同一个词打招呼吗。文本中的一些单词用小写字母“ĉĵĝĥŭŝ”,在世界语中用大写字母“ĉĵĝŭŝ”,这是Jason D的建议,以便识别所有单词。为了匹配这两种情况,您只需要考虑在FACH循环中正在比较什么(在我们使用$Word作为数组的密钥时,而您希望所有的密钥都在同一种情况下——检查PHP.NET/StruToWar):UTF8支持:)而不是对此提出新的问题,我将看看您是否会对此进行研究,我按照你在代码中说的做了,这正是我想要的!然而,我如何在一个有两行的表中显示它:左边是单词,右边是频率。我希望你明白我的意思@DejaVu:创建一个foreach循环,遍历所有元素,并在每次迭代中创建一个
,然后在第一列上输出数组键,在第二列上输出键值。这么简单。。。
Array
(
    [nice] => 2
    [if] => 1
    [about] => 1
    [you're] => 1
    [into] => 1
    [Unicode] => 1
    [think] => 1
    [to] => 1
    [very] => 1
    [únÌcÕdë] => 1
    [text] => 1
    [Something] => 1
    [A] => 1
)
function utf8_str_word_count($string, $format = 0, $charlist = null)
{
    $result = array();

    if (preg_match_all('~[\p{L}\p{Mn}\p{Pd}\'\x{2019}' . preg_quote($charlist, '~') . ']+~u', $string, $result) > 0)
    {
        if (array_key_exists(0, $result) === true)
        {
            $result = $result[0];
        }
    }

    if ($format == 0)
    {
        $result = count($result);
    }

    return $result;
}