Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Text-PHP中提取关键字和Muli-Word关键字_Php_String_Keyword - Fatal编程技术网

从Text-PHP中提取关键字和Muli-Word关键字

从Text-PHP中提取关键字和Muli-Word关键字,php,string,keyword,Php,String,Keyword,我想知道是否有人知道从PHP文本块中提取最前面重复出现的关键字/短语的最佳方法。 我想为我正在开发的应用程序构建自己的标记云。最棘手的部分是去掉诸如“白宫”之类的“muli-word”关键词,而不是将它们识别为两个单独的单词,而是一个短语 一定有一堆脚本是为了这个目的,只是似乎找不到任何 谢谢你的帮助 这里是我使用的一个小块-它解析逗号分隔的字符串,并相应地打印大小: PHP function cs_get_tag_cloud_data($data) { $data = str_repl

我想知道是否有人知道从PHP文本块中提取最前面重复出现的关键字/短语的最佳方法。

我想为我正在开发的应用程序构建自己的标记云。最棘手的部分是去掉诸如“白宫”之类的“muli-word”关键词,而不是将它们识别为两个单独的单词,而是一个短语

一定有一堆脚本是为了这个目的,只是似乎找不到任何


谢谢你的帮助

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

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;
}
函数cs\u get\u tag\u cloud\u data($data)
{
$data=str_替换(“”,,$data);
$tagwords_arr=分解(“,”,$data);
$tags\u arr=null;
对于($x=0;$x$tagwords\u arr[$x],“count”=>$word\u count);
}
}
返回$tags\u arr;
}
#获取标记计数
函数get_tag_count($arr,$word)
{
$wordCount=0;
对于($i=0;$i0)
{
对于($b=0;$b
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>

这只是我用过的东西,但我想和大家分享一下——也许对你有帮助


编辑:对于两个单词的标签,你可以做一些类似“白宫”的事情,然后在回音时去掉破折号。另一个想法。

那么,这是否能够挑选出多个单词关键字呢?你能用“白宫”这个例子来解释一下吗?如果你想提取某些单词,你可以创建一个关键词数组,然后用这种方式进行比较。“两个单词”示例只是将两个单词连字符,这样它们就不会被拆分,然后在显示单词时删除破折号。我的问题是我正在汇总用户生成的内容,因此无法让它们在关键字之间添加连字符。我需要一个脚本,可以拉这些常见的多字关键字从任何给定的文本块。例如,我可以将圣经中的文本输入到这个坏男孩函数中,我会得到一个关键字列表,其中包括“上帝”和“耶稣基督”等词。这可能吗?当然-你的单词已经用逗号分隔了吗?还是一根绳子?如果它们已经用逗号分隔,您可以在上面的脚本之前运行一个脚本,执行类似以下操作:
$stringname=str_replace(“,”,$stringname)-如果你得到的只是一个字符串,除非你有一个应该与其他单词一起引用的单词,否则你有点卡住了。非常感谢你的帮助,但不幸的是,我没有我要找的单词的引用。我所拥有的只是一堆字符串数据,需要从中生成一个标记云(包括那些muli-word关键字)。这一定是可能的,我想我得去别处看看。