llxllx

llxllx 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

llxllx 关注了标签 · 4月15日

thinkphp

ThinkPHP是一个开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。早期的思想架构来源于Struts,后来经过不断改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的Action和Dao思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,单一入口模式等,在模版引擎、缓存机制、认证机制和扩展性方面均有独特的表现。

关注 650

llxllx 赞了回答 · 4月1日

解决Querylist使用多线程插件CurlMulti可以使用代理IP吗?

可以, 要看源代码是怎么初始化curl的. 加上相应的参数就行.

$mu = $ql->multiGet(['请求url']);
$mu->withOptions(['curl' => [这儿把 CURLOPT_代理的参数填上]])

关注 2 回答 1

llxllx 提出了问题 · 3月21日

解决Querylist使用多线程插件CurlMulti可以使用代理IP吗?

$ql->rules([
    'title' => ['h3 a','text'],
    'link' => ['h3 a','href']
])->curlMulti([
    'https://github.com/trending/php',
    'https://github.com/trending/go'
])->success(function (QueryList $ql,CurlMulti $curl,$r){
    echo "Current url:{$r['info']['url']} rn";
    $data = $ql->query()->getData();
    print_r($data->all());
})->start();

关注 2 回答 1

llxllx 关注了标签 · 3月21日

querylist

QueryList是一套简洁、优雅、可扩展的PHP采集工具(爬虫),基于phpQuery

关注 46

llxllx 赞了回答 · 2020-12-24

解决php二维数组如何快速查找对应字段值?

function where($array, $key, $value)
{
 $results = [];
 if (is_array($array)) {
 if (isset($array[$key]) && $array[$key] == $value) {
 $results[] = $array;
 }
 foreach ($array as $subarray) {
 $results = array_merge($results, where($subarray, $key, $value));
 }
 }
 return $results;
}

$array = [
 ['id' => 1, 'multi_line' => 1],
 ['id' => 2, 'multi_line' => 0],
 ['id' => 3, 'multi_line' => 0],
];
$aims = where($array, 'id', 3);

print_r($aims);

结果:

Array ( [0] => Array ( [id] => 3 [multi_line] => 0 ) )

关注 4 回答 3

llxllx 赞了回答 · 2020-12-18

解决求PHP计算输入多少个字数

$str = "abc你c好efg1和1ef"; // UTF-8编码

function charCount($input){
    return preg_match_all('/[0-9a-zA-Z]{1,2}/', $input) + preg_match_all("/([\x{4e00}-\x{9fa5}])/u", $input);
}

echo charCount($str); // 输出10

关注 2 回答 1

llxllx 关注了标签 · 2020-12-12

html

超文本标记语言(英文:HyperText Markup Language,HTML)是为“网页创建和其它可在网页浏览器中看到的信息”设计的一种标记语言。

关注 66394

llxllx 关注了标签 · 2020-12-12

python

Python(发音:英[ˈpaɪθən],美[ˈpaɪθɑ:n]),是一种面向对象、直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句。

Python支持命令式程序设计、面向对象程序设计、函数式编程、面向切面编程、泛型编程多种编程范式。与Scheme、Ruby、Perl、Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理存储器使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。Python虚拟机本身几乎可以在所有的作业系统中运行。使用一些诸如py2exe、PyPy、PyInstaller之类的工具可以将Python源代码转换成可以脱离Python解释器运行的程序。

Python的主要参考实现是CPython,它是一个由社区驱动的自由软件。目前由Python软件基金会管理。基于这种语言的相关技术正在飞快的发展,用户数量快速扩大,相关的资源非常多。

关注 138121

llxllx 赞了文章 · 2020-10-30

我从零开发了一个全网搜索引擎!

前言

由于对搜索引擎技术很感兴趣,便开始尝试开发一个搜索引擎。在参考了网上有限的资料后,加上自己钻研,最终开发出了一个小型的全网搜索引擎,底部有项目地址和搜索测试图片。

此项目的语言为PHP(语言不重要,主要的是思路、架构、和算法)。


搜索引擎的大致流程

一、网页搜集

网页搜集需要用到网络爬虫,由于互联网的连接各种各样,极不稳定,需要有一个健壮的爬虫系统来应对复杂的情况。爬取策略一般分为深度优先和广度优先两种情况,具体选择哪种视情况而定。一次HTTP请求是非常耗时的,多则1秒到几秒,因此需要使用多线程爬取(我使用的是curl_multi);同时有条件的可以配置集群爬取。

二、预处理

预处理是搜索引擎最复杂的部分,基本上大部分排名算法都是在预处理这个环节生效。那么搜索引擎在预处理这个环节,针对数据主要进行以下几步处理:

提取关键词

蜘蛛抓取到的页面与我们在浏览器中查看的源码是一样的,通常代码杂乱无章,而且其中还有很多与页面主要内容是无关的。由此,搜索引擎需要做以下几件事情:
①代码去噪。去除掉网页中所有的代码,仅剩下文本文字。
②去除非正文关键词。例如页面上的导航栏以及其它不同页面共享的公共区域的关键词。
③去除停用词。停用词是指没有具体意义的词汇,例如“的”“在”等。

当搜索引擎得到这篇网页的关键词后,会用自身的分词系统,将此文分成一个分词列表,然后储存在数据库中,并与此文的URL进行一一对应。

网页去重

互联网存在大量的重复网页内容,如果不处理就入库,会严重影响搜索体验。此步骤涉及到了海量数据的去重技术。由于网页间不能简单地用字符串比较的方式来比较是否重复,一般网页去重逻辑是,提取网页的指纹(涉及到了自然语言处理,词向量等),再进行对比去重。
比较字符串的相似度,一般的技术有“余弦相似度”、“海明距离”等。

网页除噪

在网页除噪的过程中,将网页中的标签等无用的内容去掉,并且充分利用网页代码(例如H标签、strong标签)、关键词密度、内链锚文本等方式分析出此网页中最重要的词组。

数据保存更新

当数据量一上来,所有的小问题都会成为大问题。大量数据处理过后,进行入库保存,数据库的选择和设计尤为主要。因为要兼顾海量数据的快速插入和查询。保存的数据还要考虑数据的更新问题,设计更新策略,这么多内容的爬取和更新,对服务器的性能和数量会有更高的要求。

网页重要度分析

确定一个网页的权重数值,同时结合上述的“重要信息分析”,从而确立此网页的关键词集合p中每一个关键词所具备的排名系数。

倒排索引

搜索引擎之所以能快速地查询到相对应的内容,是因为使用了索引。索引是一种数据结构。一般而言,搜索引擎使用的是倒排索引结构,即先将网页内容进行分词,将同一分词的不同文档id综合起来,以此类推。相关细节可以去详细了解。搜索引擎需要有极高的召回率,同时保证搜索的效果,所以分词器的选择和分词的策略需要细致考虑和选择。

索引又分为全量索引和增量索引,全量索引是一次性更新所有,相对比较耗时间,增量索引是每次只更新“新增加的内容”的索引,然后和旧索引合并查询。

三、查询服务

查询服务顾名思义,就是处理用户在搜索界面的查询请求。搜索引擎构建检索器,然后分四步来处理请求。

query改写

相当一部分的搜索语句都可能是表述不清、残缺的,此时如果按照原本的内容进行分词搜索,效果肯定不理想,这时就要进行query改写,使得搜索词能更准确表达搜索者的想法,从而达到一个较高的召回率。

根据查询方式与关键词进行切词。

首先先把用户搜索的关键词切分为一个关键词序列,我们暂时用q来表示,则用户搜索的关键词q被切分为q={q1,q2,q3,……,qn}。

然后再根据用户查询方式,例如是所有词连在一起,还是中间有空格等,以及根据q中不同关键词的词性,来确定所需查询词中每一个词在查询结果的展示上所占有的重要性。

内容过滤剔除

众多网页内容里面,肯定会有一些违法违规的内容存在,所以需要将相关内容剔除掉,以防被展示到前台;有时搜索者也会搜索一些敏感内容,还要将搜索query进行处理。

搜索结果排序

我们有了搜索词集合q,计算q中每个关键词相对于所属文档的重要性,进行综合性的排序算法,搜索结果就出来了。排序算法是搜索引擎的核心,影响着搜索结果的准确性,实际应用中排序的计算方法是多维度,极其复杂的。

展示搜索结果与文档摘要

当有了搜索结果后,搜索引擎就会将搜索结果展示在用户阅览的界面上以供用户使用。一般会对搜索词标红,展示效果更好。


其他

优化内容,包括使用redis等缓存工具对搜索结果进行缓存;保证速度,使用cdn等等。


搜索结果测试

搜索测试
搜索测试
搜索测试
搜索测试
搜索测试
搜索测试


小结

以上只是简单叙述了一下搜索引擎的大致流程,具体的细节是非常多的。我的项目地址为 海豚搜索 www.haitemm.com,欢迎体验。
受客观环境限制,现在存储的数据量并不大,也就千万级。
查看原文

赞 1 收藏 0 评论 0

llxllx 赞了问题 · 2020-10-10

电商系统,随着业务越来越多,订单表字段会很多,请问表该怎么设计比较好?

### 问题描述

业务越来越多,订单表字段会很多

### 问题出现的环境背景及自己尝试过哪些方法

目前是使用单表加详情表,使用订单类型区分不同的业务

### 相关代码

### 你期待的结果是什么?实际看到的错误信息又是什么?

数据库怎么设计比较好!

关注 5 回答 3

认证与成就

  • 获得 0 次点赞
  • 获得 3 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 3 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-08-29
个人主页被 310 人浏览