从SQL中的文本字段中提取单词

时间:2009-10-30 17:15:38

标签: php sql mysql text codeigniter

我目前正在为较小的网站构建一个小型CMS。现在,我想从text_content字段中提取所有单词,并将它们存储在我的word表中,以供日后分析。

page( id int, 
      title varchar(45),
      # ... a bunch of meta fields ...  
      html_content text,
      text_content text);

word( page_id int,        # Foreign key
      word varchar(100)); # I presume there are no words longer than 100 chars

目前我正在使用以下代码,该代码对于较大的文本块运行速度非常慢(可理解)。

// Sidenote: $_POST is sanitized above scope of this code.
$_POST['text_content'] = str_replace("\t", "", 
         htmlspecialchars_decode(strip_tags($_POST['html_content'])));

// text is in swedish, so we add support for swedish vowels
$words = str_word_count($_POST['text_content'], 1, "åäöÅÄÖ");

// Delete all previous records of words
$this->db->delete("word", array('page_id' => $_POST['id']));

// Add current ones
foreach($words as $word)
{
    if (trim($word) == "")
        continue;

    $this->db->query("INSERT INTO word(page_id, word) VALUES(?, ?)", 
                      array($_POST['id'], strtolower(trim($word))));
}

现在,我对这个解决方案不满意。我想在数据库中创建一个触发器,它与php版本几乎完全相同。 是否有可能在MySQL中创建一个执行所述操作的触发器,如果​​是这样 - 如何?或者,还有更好的方法?我对此采取疯狂态度吗?

3 个答案:

答案 0 :(得分:4)

通过构建单个插入查询并执行它来代替每个单词的单独查询,可以显着加快此PHP代码的速度。否则,我不认为你的代码看起来那么糟糕。

答案 1 :(得分:1)

执行大型计算的触发器会降低应用程序的速度。

我认为您最好安排定期运行任务并为您执行提取。

答案 2 :(得分:0)

您是否尝试过PHP的“htmlentities”功能来剥离这些标签?