字符串的PHP字长密度/计数计算

字符串的PHP字长密度/计数计算,php,keyword,Php,Keyword,给定一个文本,我如何计算单词长度的密度/计数,从而得到这样的输出 1个字母单词:52/1% 2个字母单词:34/0.5% 3个字母单词:67/2% 找到这个,但不是python 您可以从将文本拆分为文字开始,使用(作为非常/太简单的解决方案)或(允许使用功能更强的内容): 然后,对单词进行迭代,得到每一个单词的长度,使用;将这些长度放入一个数组: $results = array(); foreach ($words as $word) { $length = strlen(

给定一个文本,我如何计算单词长度的密度/计数,从而得到这样的输出

  • 1个字母单词:52/1%
  • 2个字母单词:34/0.5%
  • 3个字母单词:67/2%
找到这个,但不是python


您可以从将文本拆分为文字开始,使用(作为非常/太简单的解决方案)或(允许使用功能更强的内容):


然后,对单词进行迭代,得到每一个单词的长度,使用;将这些长度放入一个数组:

$results = array();
foreach ($words as $word) {
    $length = strlen($word);
    if (isset($results[$length])) {
        $results[$length]++;
    }
    else {
        $results[$length] = 1;
    }

}
如果您正在使用UTF-8,请参阅


在循环结束时,
$results
将如下所示:

array
  4 => int 5
  2 => int 2
  7 => int 1
  5 => int 1

计算百分比所需的总字数可以通过以下方式找到:

  • 通过增加
    foreach
    循环内的计数器
  • 或者在循环完成后调用
    $results

对于百分比的计算,这是一个数学问题——我不会有太大帮助,关于这个问题,你可以先将文本拆分成单词,使用(作为一个非常/太简单的解决方案)或(允许使用更强大的内容):


然后,对单词进行迭代,得到每一个单词的长度,使用;将这些长度放入一个数组:

$results = array();
foreach ($words as $word) {
    $length = strlen($word);
    if (isset($results[$length])) {
        $results[$length]++;
    }
    else {
        $results[$length] = 1;
    }

}
如果您正在使用UTF-8,请参阅


在循环结束时,
$results
将如下所示:

array
  4 => int 5
  2 => int 2
  7 => int 1
  5 => int 1

计算百分比所需的总字数可以通过以下方式找到:

  • 通过增加
    foreach
    循环内的计数器
  • 或者在循环完成后调用
    $results

对于百分比的计算,这是一个数学问题——我不会有太大帮助,关于这个问题^^ ^

你可以将文本按空格分解,然后计算每个结果单词的字母数。如果有标点符号或任何其他单词分隔符,您必须考虑这一点

$lettercount = array();
$text = "lorem ipsum dolor sit amet";
foreach (explode(' ', $text) as $word)
{
  @$lettercount[strlen($word)]++; // @ for avoiding E_NOTICE on first addition
}

foreach ($lettercount as $numletters => $numwords)
{
  echo "$numletters letters: $numwords<br />\n";
}
$lettercount=array();
$text=“lorem ipsum dolor sit amet”;
foreach(分解(“”,$text)为$word)
{
@$lettercount[strlen($word)]++;//@用于避免在首次添加时发出E_通知
}
foreach($numletters=>$numwords的字母计数)
{
回显“$numletters字母:$numwords
\n”; }

ps:我还没有证明这一点,但应该可以

你可以将文本按空格分解,然后计算每个结果单词的字母数。如果有标点符号或任何其他单词分隔符,您必须考虑这一点

$lettercount = array();
$text = "lorem ipsum dolor sit amet";
foreach (explode(' ', $text) as $word)
{
  @$lettercount[strlen($word)]++; // @ for avoiding E_NOTICE on first addition
}

foreach ($lettercount as $numletters => $numwords)
{
  echo "$numletters letters: $numwords<br />\n";
}
$lettercount=array();
$text=“lorem ipsum dolor sit amet”;
foreach(分解(“”,$text)为$word)
{
@$lettercount[strlen($word)]++;//@用于避免在首次添加时发出E_通知
}
foreach($numletters=>$numwords的字母计数)
{
回显“$numletters字母:$numwords
\n”; }

ps:我还没有证明这一点,但应该有效

使用preg\u replace删除标点符号会更明智

$txt = "Sean Hoare, who was first named News of the World journalist to make hacking allegations, found dead at Watford home. His death is not being treated as suspiciou";

$txt = str_replace( "  ", " ", $txt );
$txt = str_replace( ".", "", $txt );
$txt = str_replace( ",", "", $txt );

$a = explode( " ", $txt );

$cnt = array();
foreach ( $a as $b )
{
  if ( isset( $cnt[strlen($b)] ) )
    $cnt[strlen($b)] += 1;
  else
    $cnt[strlen($b)] = 1;
}

foreach ( $cnt as $k => $v )
{
  echo $k . " letter words: " . $v . " " . round( ( $v * 100 ) / count( $a ) ) . "%\n";
}

使用preg_replace可以更聪明地删除标点符号

$txt = "Sean Hoare, who was first named News of the World journalist to make hacking allegations, found dead at Watford home. His death is not being treated as suspiciou";

$txt = str_replace( "  ", " ", $txt );
$txt = str_replace( ".", "", $txt );
$txt = str_replace( ",", "", $txt );

$a = explode( " ", $txt );

$cnt = array();
foreach ( $a as $b )
{
  if ( isset( $cnt[strlen($b)] ) )
    $cnt[strlen($b)] += 1;
  else
    $cnt[strlen($b)] = 1;
}

foreach ( $cnt as $k => $v )
{
  echo $k . " letter words: " . $v . " " . round( ( $v * 100 ) / count( $a ) ) . "%\n";
}
我用php限制某些字符串中字数字符的简单方法。
函数校验字长度($string,$nr\u limit){
$text\u words=分解(“,$string);
$text\u count=计数($text\u单词);
对于($i=0;$i<$text_count;$i++){//从text获取数组字
//回显$text_单词[$i];”
//从文本中获取数组单词
$cc=(strlen($text_words[$i]);//从数组中获取每个单词的长度字符
如果($cc>$nr\u limit)//检查限制
{
$d=“0”;
}
}
return$d;//返回值或null
}
$string\u to\u check=“heare是要检查的文本”;//要检查的文本
$nr_string_limit='5';//limit len字的值
$rez_fin=checkWord_len($string_to_check,$nr_string_limit);
如果($rez_fin='0')
{
呼应“假”;
//执行错误代码
}
elseif($rez_fin==null)
{
呼应“真”;
//执行正确的代码
}
?>
我用php限制某些字符串中的字数和字符数的简单方法。
函数校验字长度($string,$nr\u limit){
$text\u words=分解(“,$string);
$text\u count=计数($text\u单词);
对于($i=0;$i<$text_count;$i++){//从text获取数组字
//回显$text_单词[$i];”
//从文本中获取数组单词
$cc=(strlen($text_words[$i]);//从数组中获取每个单词的长度字符
如果($cc>$nr\u limit)//检查限制
{
$d=“0”;
}
}
return$d;//返回值或null
}
$string\u to\u check=“heare是要检查的文本”//要检查的文本
$nr_string_limit='5'//限制len字的值
$rez_fin=checkWord_len($string_to_check,$nr_string_limit);
如果($rez_fin='0')
{
呼应“假”;
//执行错误代码
}
elseif($rez_fin==null)
{
呼应“真”;
//执行正确的代码
}
?>

太快了:(-为了增加这一点,在分解文本之前,最好不要用任何符号替换所有标点符号,因为如果你有这样的内容:“Java没问题,但PHP是最好的。”-最好=5个字符,而实际上是4:)@hex4 true;或者他可以在foreach循环开始时过滤单词(和字符),然后再计算单词的长度。太快了:(-为了添加到这一点,在分解文本之前,最好用str_替换所有标点符号,而不使用任何符号,因为如果您有这样的内容:“Java可以,但PHP是最好的。”-best=5个字符,实际为4:)@hex4 true;或者他可以在foreach循环的开头过滤单词(和字符),然后再计算单词的长度。