从文本中拉出关键字和多词关键词 - PHP

时间:2011-02-19 13:20:05

标签: php string keyword

我想知道如果有人知道从PHP中的文本块中提取顶级重复出现的关键字/短语的最佳方式。

我想为我正在处理的应用程序构建自己的标签云。主要的棘手部分是拔出“白宫”这样的关键词,而不是将它们视为两个单独的词而是一句话。

为此目的必须有一堆脚本,似乎无法找到任何!

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这是我使用的一小块 - 它解析逗号分隔的字符串,并相应地打印大小:

<强> PHP

function cs_get_tag_cloud_data($data)
{
    $data = str_replace(' ', '', $data);
    $tagwords_arr = explode(",", $data);
    $tags_arr = null;

    for( $x=0; $x<sizeof($tagwords_arr); $x++)
    {
        $word_count = get_tag_count($tagwords_arr, $tagwords_arr[$x]);

        if(in_tag_array($tags_arr, $tagwords_arr[$x]) == false)
        {
            $tags_arr[] = array("tag" => $tagwords_arr[$x], "count" => $word_count);
        }
    }

    return $tags_arr;       
}

# Get tag count
function get_tag_count($arr, $word)
{
    $wordCount = 0;
    for ( $i = 0; $i < sizeof($arr); $i++ ) 
    {
        if ( strtoupper($arr[$i]) == strtoupper($word) ) $wordCount++;
    }
    return $wordCount;
}

# check if word already exists
function in_tag_array($arr, $search)
{
    $tag_exists = false;
    if(sizeof($arr)>0)
    {
        for($b = 0; $b < sizeof($arr); $b++) 
        {
            if (strtoupper($arr[$b]['tag']) == strtoupper($search)) 
            {
                $tag_exists = true;
                break;
            }
        }
    }
    else
    {
        $tag_exists = false;
    }
    return $tag_exists;
}

<强> HTML

<p id="tag-words">
    <?  $tag_data = cs_get_tag_cloud_data($cloud_data);
        asort($tag_data);

        for($x=0; $x<sizeof($tag_data); $x++)
        {   
            $word = "";
            $value = "";
            $count = 0;
            $font_size = 0; 
            $new_font_size = 0;

            foreach($tag_data[$x] as $key => $value)
            {
                if($key == "tag") $word = $value;
                if($key == "count") $count = $value;
                if($count > 10) $count = 10;

                if($count > 0)
                {
                    $new_font_size = 0;
                    $font_size = 8;
                    $new_font_size = $font_size + ($count*3);

                    $word = preg_replace("/&#?[a-z0-9]+;/i","", $word);

                    echo '<a class="tag-link" style="font-size: ' . $new_font_size . 'px;" href="#">' . $word . '</a> ';
                }
            }
        } ?>
</p>

这只是我用过的东西,但我想我会分享 - 也许它可以帮到你。

编辑:对于双字标签,您可以执行类似“白宫”的操作,然后在回音时删除短划线。只是另一种想法。