Table des matières
手把手教你做关键词匹配项目(搜索引擎)---- 第二十二天,教你做第二十二天
Maison développement back-end tutoriel php 手把手教你做关键词匹配项目(搜索引擎)---- 第二十二天,教你做第二十二天_PHP教程

手把手教你做关键词匹配项目(搜索引擎)---- 第二十二天,教你做第二十二天_PHP教程

Jul 13, 2016 am 10:11 AM
Faire 关键词 匹配 手把手 搜索引擎 vous enseigner 项目

手把手教你做关键词匹配项目(搜索引擎)---- 第二十二天,教你做第二十二天

最新面试经历:面试的感触(二)、面试的感触

最新的架构:高并发数据采集的架构应用(Redis的应用)

吐槽:今天也是刚把心态调整好,继续写以前没有完成的文章,最近几个月自己也是休整了一段时间,回家做苦力,也当作是锻炼锻炼自己的身体,毕竟任何东西都换不回你的健康,我也是建议做IT行业的帅哥们多活动活动你们其它的部位。

 

第二十二天

起点:手把手教你做关键词匹配项目(搜索引擎)---- 第一天

回顾:手把手教你做关键词匹配项目(搜索引擎)---- 第二十一天

 

小帅帅是乐于做总结的人,根据以前所学的知识他总结了如下:

1. 宝贝属性的扩展和类型的问题初步已经得到很好的控制了,不过要推广和运营维护还是遇到了很大的障碍。

2. 对关键词的拆分使用了scws扩展以及自己原生的业务拆词方案,拆词有效的解决了词组方面的匹配难度。

3. 所有的初始工作好像已经完成了,只需要最后的整理项目应该可以正式运行起来了。

小帅帅的主动意识比较强烈,他没有去问于老大,就自己动手写了份代码,该代码主要是为了把所有的步骤连接起来。

宝贝属性的扩展CharList的构建请参照:手把手教你做关键词匹配项目(搜索引擎)---- 第十二天 ~ 手把手教你做关键词匹配项目(搜索引擎)---- 第十八天

Selector主要步骤如下:

1. 获取宝贝属性。

2. 使用业务知识扩充宝贝属性,形成CharList

3. 从词库中获取关键词

4. 关键词拆分算法

5. 匹配度算法

6. 返回匹配上的关键词列表

代码如下:

<span> 1</span> <?<span>php
</span><span> 2</span> <span>#</span><span>@Filename:selector/Selector.php</span>
<span> 3</span> <span>#</span><span>@Author:oshine</span>
<span> 4</span> 
<span> 5</span> <span>require_once</span> <span>dirname</span>(<span>__FILE__</span>) . '/SelectorItem.php'<span>;
</span><span> 6</span> <span>require_once</span> <span>dirname</span>(<span>__FILE__</span>) . '/charlist/CharList.php'<span>;
</span><span> 7</span> <span>require_once</span> <span>dirname</span>(<span>__FILE__</span>) . '/charlist/CharlistHandle.php'<span>;
</span><span> 8</span> <span>require_once</span> <span>dirname</span>(<span>dirname</span>(<span>__FILE__</span>)) . '/lib/Logger.php'<span>;
</span><span> 9</span> 
<span>10</span> <span>class</span><span> Selector
</span><span>11</span> <span>{
</span><span>12</span> 
<span>13</span>     <span>private</span> <span>static</span> <span>$charListHandle</span> = <span>array</span><span>(
</span><span>14</span>         "黑名单" => "BacklistCharListHandle",
<span>15</span>         "近义词" => "LinklistCharListHandle"
<span>16</span> <span>    );
</span><span>17</span> 
<span>18</span>     <span>public</span> <span>static</span> <span>function</span> select(<span>$num_iid</span><span>)
</span><span>19</span> <span>    {
</span><span>20</span>         <span>$selectorItem</span> = SelectorItem::createFromApi(<span>$num_iid</span><span>);
</span><span>21</span> 
<span>22</span>         Logger::trace(<span>$selectorItem</span>-><span>props_name);
</span><span>23</span> 
<span>24</span>         <span>$charlist</span> = <span>new</span><span> CharList();
</span><span>25</span> 
<span>26</span>         <span>foreach</span> (self::<span>$charListHandle</span> <span>as</span> <span>$matchKey</span> => <span>$className</span><span>) {
</span><span>27</span> 
<span>28</span>             <span>$handle</span> = self::createCharListHandle(<span>$className</span>, <span>$charlist</span>, <span>$selectorItem</span><span>);
</span><span>29</span>             <span>$handle</span>-><span>exec</span><span>();
</span><span>30</span> 
<span>31</span> <span>        }
</span><span>32</span> 
<span>33</span>         <span>$selectWords</span> = <span>array</span><span>();
</span><span>34</span> 
<span>35</span>         <span>$keywords</span> = DB::makeArray("select word from keywords"<span>);
</span><span>36</span>         <span>foreach</span> (<span>$keywords</span> <span>as</span> <span>$val</span><span>) {
</span><span>37</span>             <span>#</span><span> code...</span>
<span>38</span>             <span>$keywordEntity</span> = SplitterApp::<span>split</span>(<span>$val</span>["word"<span>]);
</span><span>39</span>             
<span>40</span>                 <span>#</span><span> code...</span>
<span>41</span>             <span>if</span>(MacthExector::macth(<span>$keywordEntity</span>,<span>$charlist</span><span>)){
</span><span>42</span>                 <span>$selectWords</span>[] = <span>$val</span>["word"<span>];
</span><span>43</span> <span>            }           
</span><span>44</span> 
<span>45</span> <span>        }
</span><span>46</span> 
<span>47</span>         <span>return</span> <span>$selectWords</span><span>;
</span><span>48</span> <span>    }
</span><span>49</span> 
<span>50</span>     <span>public</span> <span>static</span> <span>function</span> createCharListHandle(<span>$className</span>, <span>$charlist</span>, <span>$selectorItem</span><span>)
</span><span>51</span> <span>    {
</span><span>52</span>         <span>if</span> (<span>class_exists</span>(<span>$className</span><span>)) {
</span><span>53</span>             <span>return</span> <span>new</span> <span>$className</span>(<span>$charlist</span>, <span>$selectorItem</span><span>);
</span><span>54</span> <span>        }
</span><span>55</span>         <span>throw</span> <span>new</span> <span>Exception</span>("class not exists", 0<span>);
</span><span>56</span> <span>    }
</span><span>57</span> }
Copier après la connexion

测试驱动代码编程请参照:

也是使用一样的原理,先把测试代码写好,后续补全MatchExector代码。

MatchExector主要功能计算匹配度。

1. 如果只要有一个词在黑名单里面,匹配度肯定为零。

2. 如果是核心词,那么根据以前提到的算法来计算,请参照:手把手教你做关键词匹配项目(搜索引擎)---- 第十九天

<span> 1</span> <?<span>php
</span><span> 2</span> <span>#</span><span>@Filename:mathes/MatchExector.php</span>
<span> 3</span> <span>#</span><span>@Author:oshine</span>
<span> 4</span> 
<span> 5</span> <span>class</span><span> MatchExector {
</span><span> 6</span> 
<span> 7</span>     <span>public</span> <span>static</span> <span>function</span> match(KeywordEntity <span>$keywordEntity</span>,CharList <span>$charlist</span><span>){
</span><span> 8</span> 
<span> 9</span>         <span>$matchingDegree</span> = 0<span>;
</span><span>10</span>         <span>$elementWords</span> = <span>$keywordEntity</span>-><span>getElementWords();
</span><span>11</span>         <span>foreach</span> (<span>$elementWords</span> <span>as</span> <span>$word</span><span>) {
</span><span>12</span>             <span>#</span><span> code...</span>
<span>13</span>             <span>if</span>(<span>in_array</span>(<span>$word</span>, <span>$charlist</span>-><span>getBlacklist()))
</span><span>14</span>                 <span>return</span> <span>false</span><span>;
</span><span>15</span>             <span>if</span>(<span>in_array</span>(<span>$word</span>, <span>$charlist</span>-><span>getCore()))
</span><span>16</span>                 <span>$matchingDegree</span>+=<span>$keywordEntity</span>->calculateWeight(<span>$word</span><span>);
</span><span>17</span> 
<span>18</span> <span>        }
</span><span>19</span> 
<span>20</span>         <span>if</span>(<span>$matchingDegree</span>>0.8<span>)
</span><span>21</span>             <span>return</span> <span>true</span><span>;
</span><span>22</span>         <span>return</span> <span>false</span><span>;
</span><span>23</span> 
<span>24</span> <span>    }
</span><span>25</span>     
<span>26</span> }
Copier après la connexion

 

整个代码相对来说实现了该有的功能,小帅帅非常的高兴,因为项目完成了肯定少不了项目奖金,说不定还有一餐丰富的晚餐,

想想都开始流口水了。

 

小帅帅把代码交给于老大,满怀期待的等候于老大的最后肯定。

于老大看了之后会有哪些反应呢?请关注第三章:关键词匹配项目深入研究(一)

 

第二章已完结,源代码地址:手把手教你做关键词匹配项目(二章完结篇)

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/931389.htmlTechArticle手把手教你做关键词匹配项目(搜索引擎)---- 第二十二天,教你做第二十二天 最新面试经历:面试的感触(二)、面试的感触 最新的架构...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment régler l'ouverture sur Xiaomi Mi 14 Ultra ? Comment régler l'ouverture sur Xiaomi Mi 14 Ultra ? Mar 19, 2024 am 09:01 AM

Le réglage de la taille de l'ouverture a un impact crucial sur l'effet photo. Le Xiaomi Mi 14 Ultra offre une flexibilité sans précédent dans le réglage de l'ouverture de l'appareil photo. Afin de permettre à chacun d'ajuster l'ouverture en douceur et de réaliser le réglage libre de la taille de l'ouverture, l'éditeur vous propose ici un tutoriel détaillé sur la façon de régler l'ouverture sur Xiaomi Mi 14Ultra. Comment régler l’ouverture sur Xiaomi Mi 14Ultra ? Démarrez l'appareil photo, passez en « Mode professionnel » et sélectionnez l'appareil photo principal - l'objectif W. Cliquez sur l'ouverture, ouvrez la molette d'ouverture, A est automatique, sélectionnez f/1.9 ou f/4.0 selon vos besoins.

L'IA peut-elle vaincre le dernier théorème de Fermat ? Un mathématicien a abandonné 5 ans de sa carrière pour transformer 100 pages de preuve en code L'IA peut-elle vaincre le dernier théorème de Fermat ? Un mathématicien a abandonné 5 ans de sa carrière pour transformer 100 pages de preuve en code Apr 09, 2024 pm 03:20 PM

Le dernier théorème de Fermat, sur le point d'être conquis par l'IA ? Et la partie la plus significative de tout cela est que le dernier théorème de Fermat, que l’IA est sur le point de résoudre, vise précisément à prouver que l’IA est inutile. Autrefois, les mathématiques appartenaient au domaine de l’intelligence humaine pure ; aujourd’hui, ce territoire est déchiffré et piétiné par des algorithmes avancés. Image Le dernier théorème de Fermat est une énigme « notoire » qui intrigue les mathématiciens depuis des siècles. Cela a été prouvé en 1993, et les mathématiciens ont désormais un grand projet : recréer la preuve à l’aide d’ordinateurs. Ils espèrent que toute erreur logique dans cette version de la preuve pourra être vérifiée par un ordinateur. Adresse du projet : https://github.com/riccardobrasca/flt

Comment définir le chinois dans Cheat Engine ? Comment définir le chinois dans le modificateur ce ? Comment définir le chinois dans Cheat Engine ? Comment définir le chinois dans le modificateur ce ? Mar 18, 2024 pm 01:20 PM

Ce Modifier (CheatEngine) est un outil de modification de jeu dédié à la modification et à l'édition de la mémoire du jeu. Alors, comment définir le chinois dans CheatEngine ? Ensuite, l'éditeur vous expliquera comment définir le chinois dans Ce Modifier. Dans le nouveau logiciel que nous téléchargeons, il peut être déroutant de constater que l'interface n'est pas en chinois. Même si ce logiciel n'a pas été développé en Chine, il existe des moyens de le convertir en version chinoise. Ce problème peut être résolu en appliquant simplement le patch chinois. Après avoir téléchargé et installé le logiciel CheatEngine (ce modificateur), ouvrez l'emplacement d'installation et recherchez le dossier nommé langues, comme indiqué dans la figure ci-dessous.

Comment mettre à jour Honor MagicOS 8.0 sur Honor 90 GT ? Comment mettre à jour Honor MagicOS 8.0 sur Honor 90 GT ? Mar 18, 2024 pm 06:46 PM

Honor 90GT est un smartphone économique offrant d'excellentes performances et une excellente expérience utilisateur. Cependant, nous pouvons parfois rencontrer certains problèmes, comme par exemple comment mettre à jour Honor MagicOS8.0 sur Honor 90GT ? Cette étape peut être différente selon les téléphones mobiles et les différents modèles. Voyons donc comment mettre à niveau correctement le système. Comment mettre à jour Honor MagicOS 8.0 sur Honor 90GT ? Selon les informations du 28 février, Honor a lancé aujourd'hui la mise à jour bêta publique MagicOS8.0 pour ses trois téléphones mobiles 90GT/100/100Pro. Le numéro de version du package est 8.0.0.106 (C00E106R3P1) 1. . Assurez votre honneur La batterie du 90GT est complètement chargée ;

Planet Mojo : Construire un métaverse de jeu Web3 à partir du jeu d'échecs automatique Mojo Melee Planet Mojo : Construire un métaverse de jeu Web3 à partir du jeu d'échecs automatique Mojo Melee Mar 14, 2024 pm 05:55 PM

Les projets de jeux Metaverse populaires fondés au cours du dernier cycle cryptographique accélèrent leur expansion. Le 4 mars, PlanetMojo, la plateforme de métaverse de jeux Web3, a annoncé un certain nombre de développements importants dans son écologie de jeu, notamment l'annonce du prochain jeu de parkour GoGoMojo, le lancement de la nouvelle saison "Way of War" dans le jeu phare d'échecs automatiques. jeu MojoMelee, et la célébration de la nouvelle La première série ETH "WarBannerNFT" lancée cette saison en coopération avec MagicEden. En outre, PlanetMojo a également révélé qu'ils prévoyaient de lancer les versions mobiles Android et iOS de MojoMelee plus tard cette année. Ce projet sera lancé fin 2021. Après près de deux ans de dur labeur dans le marché baissier, il sera bientôt achevé.

Vous apprendre à utiliser les nouvelles fonctionnalités avancées d'iOS 17.4 « Protection des appareils volés » Vous apprendre à utiliser les nouvelles fonctionnalités avancées d'iOS 17.4 « Protection des appareils volés » Mar 10, 2024 pm 04:34 PM

Apple a déployé mardi la mise à jour iOS 17.4, apportant une multitude de nouvelles fonctionnalités et de correctifs aux iPhones. La mise à jour inclut de nouveaux emojis et les utilisateurs de l’UE pourront également les télécharger depuis d’autres magasins d’applications. En outre, la mise à jour renforce également le contrôle de la sécurité de l'iPhone et introduit davantage d'options de configuration de « Protection des appareils volés » pour offrir aux utilisateurs plus de choix et de protection. "iOS 17.3 introduit pour la première fois la fonction "Protection des appareils volés", ajoutant une sécurité supplémentaire aux informations sensibles des utilisateurs. Lorsque l'utilisateur est loin de chez lui et d'autres lieux familiers, cette fonction nécessite que l'utilisateur saisisse des informations biométriques pour la première fois. heure, et après une heure, vous devez saisir à nouveau les informations pour accéder et modifier certaines données, telles que la modification du mot de passe de votre identifiant Apple ou la désactivation de la protection de l'appareil volé.

DaVinci Resolve Studio prend désormais en charge l'encodage matériel AV1 pour les cartes graphiques AMD DaVinci Resolve Studio prend désormais en charge l'encodage matériel AV1 pour les cartes graphiques AMD Mar 06, 2024 pm 10:04 PM

Nouvelles récentes, manqueMagic a lancé la mise à jour bêta publique 18.5PublicBeta2 du logiciel de montage vidéo DaVinci ResolveStudio, apportant la prise en charge de l'encodage AV1 aux cartes graphiques AMD Radeon. Après la mise à jour vers la dernière version, les utilisateurs de cartes graphiques AMD pourront profiter de l'accélération matérielle pour l'encodage AV1 dans DaVinci Resolve Studio. Bien que le responsable ne précise pas les architectures ou les modèles pris en charge, il est prévu que tous les utilisateurs de cartes graphiques AMD puissent essayer cette fonctionnalité. En 2018, AOMedia a publié une nouvelle norme de codage vidéo AV1 (AOMediaVideoCodec1.0). AV1 est produit par un certain nombre de

Simplifiez le traitement du téléchargement de fichiers avec les fonctions Golang Simplifiez le traitement du téléchargement de fichiers avec les fonctions Golang May 02, 2024 pm 06:45 PM

Réponse : Oui, Golang fournit des fonctions qui simplifient le traitement du téléchargement de fichiers. Détails : le type MultipartFile permet d'accéder aux métadonnées et au contenu des fichiers. La fonction FormFile obtient un fichier spécifique à partir de la demande de formulaire. Les fonctions ParseForm et ParseMultipartForm sont utilisées pour analyser les données de formulaire et les données de formulaire en plusieurs parties. L'utilisation de ces fonctions simplifie le processus de traitement des fichiers et permet aux développeurs de se concentrer sur la logique métier.

See all articles