>  기사  >  백엔드 개발  >  PHP와 coreseek를 기반으로 뉴스 추천 엔진 구축

PHP와 coreseek를 기반으로 뉴스 추천 엔진 구축

PHPz
PHPz원래의
2023-08-05 09:13:481081검색

PHP 및 coreseek 기반 뉴스 추천 엔진 구축

소개:
인터넷의 급속한 발전과 함께 사람들이 일상적으로 정보를 얻는 방식도 변화하고 있습니다. 사용자가 자신의 관심사에 맞는 뉴스 콘텐츠를 필터링하도록 빠르고 정확하게 지원하는 방법이 중요한 과제가 되었습니다. 이 기사에서는 PHP와 coreseek를 사용하여 키워드 매칭을 기반으로 하는 뉴스 추천 엔진을 구축하는 방법을 소개합니다.

  1. 엔진 아키텍처

뉴스 추천 엔진의 아키텍처는 아래 그림에 나와 있습니다.

사용자--> 추천 엔진--> coreseek --> 사용자가 뉴스 키워드 및 추천을 제출합니다. 추천 엔진을 통해 엔진은 키워드를 coreseek에 전달하고, coreseek은 인덱스 라이브러리를 통해 일치하는 뉴스를 쿼리하여 추천 엔진에 반환합니다. 추천 엔진은 반환된 뉴스 목록을 정렬 및 필터링하고 결과를 사용자에게 반환합니다.

coreseek 설치 및 구성
  1. 먼저 coreseek을 설치하고 구성해야 합니다. coreseek는 빠른 텍스트 검색에 사용할 수 있는 오픈 소스 검색 엔진 Sphinx를 기반으로 하는 중국어 전체 텍스트 색인 도구입니다. Linux 환경에서는 다음 명령을 통해 coreseek를 설치할 수 있습니다.
wget http://www.coreseek.cn/uploads/csft/4.1/coreseek-4.1-beta.tar.gz
tar -zxvf coreseek-4.1-beta.tar.gz
cd coreseek-4.1-beta
./configure --prefix=/usr/local/coreseek
make && make install
cd /usr/local/coreseek
cp -r /usr/local/coreseek/mmseg-3.2.14/etc/* ./etc/
vi etc/csft.conf

csft.conf 구성 파일에서 호스트 이름, 포트 등 뉴스 데이터베이스의 연결 정보를 설정해야 합니다. 번호 등

    데이터베이스 및 데이터 가져오기csft.conf配置文件中,我们需要设置新闻数据库的连接信息,如主机名、端口号等。

    1. 数据库和数据导入

    接下来,我们需要创建一个新闻数据库,并导入新闻数据。假设我们使用MySQL作为数据库管理系统,可以通过以下命令创建数据库和表:

    CREATE DATABASE news;
    USE news;
    CREATE TABLE news (
        id INT PRIMARY KEY AUTO_INCREMENT,
        title VARCHAR(255),
        content TEXT
    );

    然后,将新闻数据导入数据库:

    INSERT INTO news (title, content) VALUES ('新闻标题1', '新闻内容1');
    INSERT INTO news (title, content) VALUES ('新闻标题2', '新闻内容2');
    ...

    将所有新闻数据导入数据库之后,我们需要设置coreseek的索引配置文件etc/sphinx.conf

    source news
    {
        type            = mysql
        sql_host        = localhost
        sql_user        = your_mysql_user
        sql_pass        = your_mysql_password
        sql_db          = news
        sql_port        = 3306
    
        sql_query       = SELECT id, title, content FROM news
    }
    
    index news_index
    {
        source          = news
        path            = /usr/local/coreseek/var/data/news_index
        docinfo         = extern
        mlock           = 0
    }
    1. PHP代码示例

    以下是一个简单的PHP代码示例,用于提交用户关键词并获取新闻推荐结果:

    <?php
    $keyword = $_GET['keyword'];
    
    $sphinx = new SphinxClient();
    $sphinx->SetServer('localhost', 9312);
    $sphinx->SetMatchMode(SPH_MATCH_ALL);
    $sphinx->SetLimits(0, 10);
    
    $result = $sphinx->Query($keyword, 'news_index');
    
    if ($result === false) {
        echo "查询失败";
    } else {
        $ids = array_keys($result['matches']);
        $news = [];
      
        $pdo = new PDO('mysql:host=localhost;dbname=news', 'your_mysql_user', 'your_mysql_password');
        $stmt = $pdo->prepare("SELECT title, content FROM news WHERE id IN (" . implode(',', $ids) . ")");
        $stmt->execute();
    
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $news[] = $row;
        }
      
        echo json_encode($news);
    }
    ?>

    在这个示例中,我们使用了sphinxapi扩展库提供的SphinxClient类来与coreseek进行查询。首先,我们通过SetServer方法设置coreseek的主机名和端口号,然后使用SetMatchMode方法设置匹配模式(这里是全部匹配),最后通过Query方法提交用户关键词进行查询。

    如果查询成功,我们可以通过$result['matches']

      다음으로 뉴스 데이터베이스를 만들고 뉴스 데이터를 가져와야 합니다. MySQL을 데이터베이스 관리 시스템으로 사용한다고 가정하면 다음 명령을 통해 데이터베이스와 테이블을 생성할 수 있습니다.
    1. rrreee
    2. 그런 다음 뉴스 데이터를 데이터베이스로 가져옵니다.
    rrreee

    모든 뉴스 데이터를 데이터베이스로 가져온 후, coreseek etc/sphinx.conf의 인덱스 구성 파일을 설정해야 합니다:

    rrreee
      🎜PHP 코드 예제🎜🎜🎜다음은 사용자 제출을 위한 간단한 PHP 코드 예제입니다. 키워드 및 뉴스 추천 결과 가져오기:🎜 rrreee🎜이 예에서는 sphinxapi 확장 라이브러리에서 제공하는 SphinxClient 클래스를 사용하여 coreseek로 쿼리합니다. 먼저 SetServer 메서드를 통해 coreseek의 호스트 이름과 포트 번호를 설정한 다음 SetMatchMode 메서드를 사용하여 일치 모드를 설정하고(여기서는 모두 일치합니다) 마지막으로 Query를 사용하세요. code> 메소드는 쿼리를 위해 사용자 키워드를 제출합니다. 🎜🎜쿼리가 성공하면 $result['matches']를 통해 일치하는 뉴스 ID 목록을 얻은 다음 PDO 클래스를 사용하여 MySQL과 상호 작용하여 해당 뉴스 제목과 콘텐츠를 쿼리할 수 있습니다. 아이디를 기준으로 합니다. 🎜🎜🎜결론🎜🎜🎜위의 단계를 통해 우리는 PHP와 coreseek 기반의 뉴스 추천 엔진을 성공적으로 구축했습니다. 사용자 로그인, 개인화 추천 등의 기능을 추가하는 등 본인의 필요에 따라 2차 개발을 수행할 수 있습니다. 이 글이 여러분의 뉴스 추천 엔진 구축에 도움이 되기를 바랍니다! 🎜

위 내용은 PHP와 coreseek를 기반으로 뉴스 추천 엔진 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.