跳到主要内容

5 篇博文 含有标签「算法」

算法和计算方法

查看所有标签

实战数据科学: 如何利用 sklearn 轻松上榜 Kaggle 入门 NLP 竞赛

· 阅读需 7 分钟
Marvin Zhang
软件工程师 & 开源爱好者

引子

Kaggle 是一个面向数据科学家、机器学习工程师和数据分析师的在线社区和数据科学竞赛平台,上面有很多带有奖励的数据科学竞赛(Competition)以及数据集(Dataset)。Kaggle 社区在数据科学领域非常出名,很多互联网业界大厂也在上面发布有奖竞赛,竞赛金额从几万到百万美元不等。本文介绍的是最近参与的 Kaggle 一个入门 NLP 竞赛,没有现金奖励,但可以学习到 NLP 相关的机器学习知识。

Kaggle Competition

竞赛简介

这个数据科学竞赛是希望竞赛参与者通过给定 Twitter 上的一条推文(Tweet),来判断推文是否是关于一场真实的灾害(Disaster)。下图是某一条推文的情况,推文中有 "ABLAZE"(燃烧的)关键词,预示着该推文是说有房子燃起来了。

Disater Tweet

实战爬虫:如何利用 Webspot 实现自动提取列表页

· 阅读需 6 分钟
Marvin Zhang
软件工程师 & 开源爱好者

引子

利用爬虫程序抓取列表页是网络数据提取中非常常见的任务之一。对于爬虫工程师来说,如何高效的生成提取规则是非常有必要的,否则就会浪费很多时间在编写爬虫程序 CSS 选择器或 XPath。本文将用一个实际例子来展示如何使用开源工具 Webspot 来实现自动提取列表页。

Webspot

Webspot 是一个旨在自动化网页数据提取的开源项目,目前支持列表页及分页的识别和抓取规则提取,此外还提供了 Web UI 界面让用户可以可视化的查看识别出来的结果,还可以让开发人员利用 API 获取识别结果。

Webspot 安装非常简单,可以参考官方文档中的安装教程,利用 Docker 和 Docker Compose 进行安装。

# clone git repo
git clone https://github.com/crawlab-team/webspot

# start docker containers
docker-compose up -d

浅谈算法:关于智能爬虫的探索

· 阅读需 8 分钟
Marvin Zhang
软件工程师 & 开源爱好者

浅谈算法:关于智能爬虫的探索

引子

如果当初让我去问顾客他们想要什么,他们肯定会告诉我:“一匹更快的马。” -- 亨利·福特

如今是人工智能大红大紫的时代,不管是 ChatGPT 还是随之而来的各种智能应用,让许多人看到即将到来的在几年前几乎不可想象的科幻世界。不过,在爬虫领域,人工智能似乎还没有过多涉及。诚然,爬虫作为一项“古老”的技术,在过去 20 多年缔造了搜索引擎、新闻聚合、数据分析等多而又多的技术行业,不过在如今还暂时没有看到明显的技术突破:爬虫工程师还是主要依赖于 XPath、逆向等技术来自动获取网络数据。不过,随着人工智能和机器学习的发展,爬虫技术理论上也可以做到“自动驾驶”。本篇文章,将从多个维度介绍所谓智能爬虫(智能化、自动化数据提取爬虫技术)的现状以及可能的未来发展方向。

爬虫技术现状

爬虫程序是一种自动化的程序,用于从互联网或其他计算机网络上获取数据。它们通常使用自动化数据抓取技术来自动访问网站,并收集、解析和存储网站上的信息。这些信息可以是结构化或非结构化数据。

传统意义上的爬虫技术主要包括以下模块或系统:

  1. 网络请求:对网站或网页发起 HTTP 请求,获取 HTML 等数据;
  2. 网页解析:对 HTML 进行解析,形成结构化的树形结构,并通过 XPath 或 CSS Selector 获取目标数据;
  3. 数据储存:将解析后的结构化数据进行存储,可以是数据库,也可以是文件形式;
  4. URL 管理:负责管理待抓取的URL列表和已经抓取的URL列表,例如分页或列表页的 URL 解析和请求。

爬虫系统 (3)

以上都是基础的爬虫技术模块,对于大型爬虫系统来说,还需要具备任务调度、错误管理、日志管理等生产环境必要模块。笔者的爬虫管理平台 Crawlab 就是用于企业级生产环境爬虫管理平台。另外,针对一些反爬措施,例如验证码或 IP 封锁,通常还需要额外模块,例如验证码识别、IP 代理等。

然而,目前爬虫程序的开发主要集中在网页解析上,这也是非常消耗人力的地方。虽然 HTML 需要解析网页数据,但是不同网站的网页布局、排版、风格、内容各不相同,导致每个网站、网页都需要单独编写解析逻辑,从而大大增加了人工编写成本。虽然一些通用爬虫例如搜索引擎爬虫可以不用编写过多解析逻辑,但这样的爬虫通常都无法聚焦于某些特定的主题数据提取。因此,为了降低人工编写成本,最好是不需要编写或少量编写解析逻辑就可以自动提取网页数据,这也就是智能爬虫的主要目标。

浅谈理论:为什么图论是当今各行各业必备的知识?

· 阅读需 6 分钟
Marvin Zhang
软件工程师 & 开源爱好者

引子

“若无必要,勿增实体”--奥卡姆剃刀原理

图论(Graph Theory)是被大众严重低估的数学基础理论。它不是研究图像、图片、图表之类的理论,而是一个抽象而简单的数学理论。图论中的(Graph)是一个抽象概念,非常类似于关系网络(Relationship Network),有对应的节点(Node)或顶点(Vertext),节点之间又有关联关系或(Edge)。图论的概念非常简单,就是图、节点、边。本篇文章将简单的介绍一下图论的基础概念,以及图论在真实世界中的应用。(注意!本文不是科学论文,所以不会有枯燥的数学公式,请放心食用)

graph

图论简述

在图论中,有三个重要的概念:

  1. 节点(Node):可以理解为某个实体,例如关系网络中的张三、李四、王五;
  2. (Edge):可以理解为实体间的关系,例如,张三和李四是夫妻,王五是他们儿子;
  3. (Graph):可以理解为所有节点、边的集合,例如张三、李四、王五组成的幸福一家。

从上面的三个基本概念,我们可以推断出节点之间的关系,例如李四的大哥李一,就是王五的舅舅,王五也是他的侄子。

浅谈算法:分治算法竟然蕴藏着大自然的奥秘

· 阅读需 4 分钟
Marvin Zhang
软件工程师 & 开源爱好者

引子

“话说天下大势,分久必合,合久必分。” --《三国演义》罗贯中

很少有人能质疑算法(Algorithm)在现代 IT 行业中的重要地位。正是有了巧妙设计的算法,计算机才能以最小的资源和最大的效率来运行各种各样的软件程序。因此,算法非常重要,以至于不少 IT 企业在招聘工程师时对算法要求非常高。回忆一下你参加过的技术面试被要求手写快速排序的算法题吧。不少人会认为算法是高屋建瓴的东西,然而笔者却认为算法以及数据结构产生的效率增益是自然形成的,这个可以从大自然中找到答案。

从雪花开始

snowflake

我们都知道,一片雪花很漂亮,除了它明亮的外表以外,令人惊叹的还有其造型:整体像雕琢过的六边形,每个角放大来看又是新的类似雪花的子六边形。这种自相似(Self Similarity)不断递归(Recursion)的结构有个专业术语,分形(Fractal)。分形在大自然中随处可见,例如树的根系和枝叶、肺部毛细血管、天然形成的海岸线,数不胜数。甚至连一块摔碎的玻璃,也能找到分形的影子。