近期“知网”的热度一直不减,本来可以拿一些热点图片、网友评论作为开场。算了,这不是我一个技术博主该做的。

此处仅拿2022年5月24日早晨 6:00 微博搜索“知网”得到的前20条动态信息的词云说话。

基于 ik_smart 中文分词器的词云图

在网友不建议专家建议的大环境下,作为老百姓对“知网”的建议如下:

  • 1、尊重版权,每篇文档被下载(人工备案下载,非爬虫)获得的收益一半(比例待商榷)费用给第一作者,这会极大的激发大家的创作动力。

  • 2、将文章收益、被引用次数等作为未来文章评价指标。好文章(被引用多、被下载多)会有高收益,不好的文章会石沉大海。这会极大鼓励高校研究人员写好文章。

此处省略1万字......

当然,这些都不是我们平头老百姓该操心的事,作为技术人员,我更关注“知网”的本质——搜索。进一步说根据用户复杂的搜索条件,召回满意的结果。

问题来了,Elasticsearch 三大核心应用场景之一全文检索。用 Elasticsearch 能不能造一个“知网”呢?

这引发了我的极大的兴趣。

1、需求分析

首先,为避免“井底之蛙”,需求降级,降低到自己可控的程度。

  • 天眼查了一下:“知网成立于2004年,共1649人”。得出初步结论,这是有18年技术积累的公司。

  • 版权原因,我们也拿不到知网那么多的数据,只能先象征性的拿手里的文档模拟一下,研究技术的可行性。

其次,“知网”支持的搜索非常复杂,我们只研究“一框”搜索。

把标题检索搞明白了,其他只是时间问题。

再次,“知网”是全网论文的集合体,我们聚焦本地磁盘文件的集合体。

文件类型包含但不限于:.txt, .pdf, .ppt, .doc,.docx 等文档。

综上,为避免落成“螳臂当车”的笑柄,我们把需求转化为简版的“知网”——本地知识库检索系统。

核心功能点如下:

  • 支持多种格式历史文档(pdf、ppt、doc、xls、txt)的解析及索引化。

  • 支持文档基础数据(标题、大小、发布时间、修改时间、作者、全文)的建模。

  • 支持新写入文档数据的解析及索引化,定时周期可配置。

  • 支持建模后的数据存入Elasticsearch,支持通过浏览器访问。

  • 支持kibana可视化分析。

2、技术选型

原则:不重复造轮子,自己可控,使用已有的、成熟的、开源的技术栈体系。

2017 年我带领小伙伴做过类似的知识库检索系统,只不过当时的技术体系较旧,Elasticsearch 也是2.X 版本。

相关技术实现如下两图所示:

关于文档格式转换及解析器,又会涉及如下 N 多技术栈。

早期的技术实现大半时间都花费在了文档格式转换和解析处理上。有没有更好的实现方式,一直是我关心的问题。从最早的自己找各类解析工具用到了 openoffice 组件,到内容检测和分析框架 Tika,再到 Elasticsearch 自身支持的 Ingest Attachment 文档处理器插件,最终到 Elastic 工程师开源的文档爬虫工具——FSCrawler。

2.1 OpenOffice

相比于闭源的金山WPS、微软Office,OpenOffice 现在已经成为全球领先的跨平台、全功能、多语言、公开对象接口、可扩展文件格式的开源办公软件 。引入相关 jar 包,即可实现文档的解析工作。

http://www.openoffice.org/

2.2 Tika

Apache Tika 用Java编写,用于文件类型检测和从各种格式的文件内容提取的库。

使用Tika可以开发出通用型检测器和内容提取到的不同类型的文件,如电子表格,文本文件,图像,PDF文件甚至多媒体输入格式,在一定程度上提取结构化文本以及元数据。

https://tika.apache.org/

2.3 Ingest Attachment 文件处理器插件

基于 Tika 实现的 Elasticsearch 文件处理插件,支持:PPT、XLS、PDF、WORD 等格式。

需要单独安装实现,安装实现如下:

sudo bin/elasticsearch-plugin install ingest-attachment

https://www.elastic.co/guide/en/elasticsearch/plugins/current/ingest-attachment.html

2.4 FSCrawler 文档爬虫工具

2019-02-25 我在社群给小伙伴推荐过,当时我写了如下的两段话。

应用场景:文件系统检索、中文知识库构建、简化pdf、office等文档解析繁琐步骤,一键导入构建索引实现检索等操作。

使用效果(推荐理由):

  • 1、效果不错,已经集成提卡映射Mapping可定制。

  • 2、集成得非常好。自己写的话:第一步,不同类型解析(pdf还有可能涉及OCR识别)、第二步:定好mapping,第三步:导入。

  • 3、各种配置写得很一目了然,上手快。

  • 4、全部开源,如果有需要可以定制化改代码。

  • 5、支持5.x,6.x,以及还未公布的7.x。(ps现在 7.X、8.X 都已经支持)

  • 6、作者貌似是 Elastic 公司的。

https://github.com/dadoonet/fscrawler

https://t.zsxq.com/02EMR7MRn

诚然,仅从更贴合 Elasticsearch 实现的角度来讲,FSCrawler 是文档分析的“终结者”。它几乎包含了我上面所述两幅图的全部技术实现。

所以,我们选型 FSCrawler 作为文档数据源处理+写入 Elasticsearch 同步工具。

2.5 Python Flask 轻量级 Web 框架

Flask 是目前最流行的 Python Web 框架之一。自 2010 年开源以来,Flask 受到了越来越多的 Python 开发者的喜欢,其受欢迎程度不输于 Django。

Flask 足够轻量,只用 5 行就能写出一个最简单的 Web 程序,但并不简陋,它能适应各类项目的开发。

截止:2022-05-24,GitHub Flask 框架 star 数:59.1k。

下图代表 Google 搜索走势,黄色:springboot,蓝色:django,蓝色:flask。flask 和 django 走势基本一致,受欢迎程度较高。

基于此,Web 部分我们选型 Python Flask 框架。

3、 整体架构

基于前面的需求分析和技术选型,整体架构&数据流图如下图所示。

相当于之前的分类型文档解析自己独立实现,FSCrawler 可谓“大包大揽”、“以一敌十”,之前最复杂、最困难的工作全部交由 FSCrawler 完成,包含但不限于:

  • PDF、DOC、XLS、TXT等文档读取解析

  • Elasticsearch 数据建模

  • 批量数据同步写入 Elasticsearch

  • 定时同步任务

  • 针对特定图片式样的 PDF 文档,需要OCR 识别实现

有了上面的图,整体就会非常释然,就剩下四个字“干就完了”。

4、 系统实现

直接来个 Gif 动图,看一下实现效果。

相比于之前 java 开发的 web 系统,这次是我全栈实现,涉及到技术包含但不限于:Html、CSS、Javascript、Python、Flask、Elasticsearch、Kibana、FSCrawler。

  • Html:页面框架。

  • CSS:页面美化。

  • JavaScript:动态更新样式的脚本实现。

  • Python:后端服务接口。

  • Flask:后端服务框架。

  • Elasticsearch:数据落地存储。

  • Kibana:数据可视化分析。

  • FSCrawler:本地磁盘文档爬虫解析并写入Elasticsearch。

由于足够轻量级,累计核心代码不到 1000 行。

取名为:织网知识库检索系统。此“织网”非彼“知网”。“织”强调的“精耕细作、日积月累、功不唐捐、水滴石穿”。

首页
列表页

详情页

各位基础稳定数据统计如下:

本系统涉及的文档数比较少,但要对 Elastic 充满信心。Elasticsearch 支持动态扩展,支持成千上万、数亿、数十亿只是配置问题和数据量问题,技术层面没有问题。

5、小结

回归文章初心,“知网”是个非常庞大的功能体,仅就检索细节讨论的话,涉及很大一块的内容就是内容分析(分词处理、命名实体识别等 NLP 自然语言处理领域的知识)、以及文档之间的关联性(引用、被引用)等,是不小的工程。

本文是以“知网”的文档检索出发,构建了本地知识库系统,验证了 Elasticsearch 技术栈结合 Python Flask 构建知识库检索系统的可行性。

细节,待续>>

参考

李辉《Flask Web 开发实战》

https://blog.csdn.net/laoyang360/article/details/75933314

Elasticsearch打造知识库检索系统

https://medium.com/analytics-vidhya/building-a-basic-search-engine-using-elasticsearch-fscrawler-97104c1ea220

用 Elasticsearch 造个“知网”难不难?相关推荐

  1. 学计算机的今年去当兵 转士官难吗,青年当兵学技术后,转士官到底难不难?这个答案要周知...

    原标题:青年当兵学技术后,转士官到底难不难?这个答案要周知 青年到部队当兵后,有很多的成长机遇,这其中就包括在部队学技术.所学习内容有些是与社会通用的,比如说车辆维修.医疗等.但还有一些技术只能应用于 ...

  2. 网文作者御用写作软件| Effie:网文签约到底难不难?

    网文作者,签约是第一道坎. 各大网文写作平台都有各种各样的签约机制,签约的人相对于未签约的人来说,相对属于较少的那一部分. 所以,网文签约到底难不难呢? 这个问题,就好比找工作,找工作的过程可能艰难无 ...

  3. 计算代码重复率_了解了知网大学生论文查重原理,重复率想高于6%都难!

    大家好,我是毕业之家小毕同学.后续会持续为大家更新毕业论文写作.修改.降重,记得关注哟. 每年的毕业季,相信大家面临论文查重都会头疼.想到这,作者真想拉最初设计查重系统的人聊一聊:就算长得帅,也不能这 ...

  4. 朱晔的互联网架构实践心得S2E1:业务代码究竟难不难写? | 掘金年度征文

    注意,这是我的架构实践心得的第二季的系列文章,第一季有10篇你也可以回顾. 最近我一直在思考几个问题: 业务代码究竟难不难写? 一直开发业务代码是不是完全学不到东西? 5年+开发经验的老程序员的价值在 ...

  5. ui设计自学对于零基础的人来说难不难

    本文由:"学设计上兔课网"原创,图片素材来自网络,仅供学习分享 ui设计自学对于零基础的人来说难不难?UI设计作为一个相对新兴的专业设计门类,目前定位还是蛮尴尬的,因为ui设计在国 ...

  6. 应用心理学跨考计算机难不难,关于心理学考研的难度

    心理学考研到底难不难,主要的课程是什么?不清楚的小伙伴看过来,下面由出国留学网小编为你精心准备了"心理学考研难吗"仅供参考,持续关注本站将可以持续获取更多的资讯! 心理学考研难吗 ...

  7. python知网查重_用Python写了个检测抄袭/文章去重算法(nshash)

    中国人有句话叫"天下文章一大抄",但是在正规场合下"抄"是要付出代价的,比如考试.写论文是不能抄的,一旦被发现后果相当严重.在互联网出现之前,"抄&q ...

  8. 知网首篇被引破万论文诞生!作者是曾两次“被迫转行”的他

    近日,知网首篇被引量破万的中文论文及其作者备受关注.根据中国知网,截至2021年7月23日,由温忠麟教授等人发表在<心理学报>上2004年05期的学术论文<中介效应检验程序及其应用& ...

  9. python自动化测试难不难_我从功能测试进阶到自动化测试工程师的经验总结~|Atstudy...

    1 我是谁? 大家好,我是软件测试汪.不知不觉,入行软件测试也有小5个年头.待过创业公司也待过上市公司.做过功能测.自动化测试也做过性能测试.做过测试新人也做过测试组长.如果要是从这5年中说出最宝贵的 ...

最新文章

  1. Azure 中快速搭建 FTPS 服务
  2. hadoop job 未跑满资源_2018年第26周-解剖MapReduce Job
  3. linux内核网络协议栈--linux协议栈调用流程(七)
  4. BUU[SCTF2019]Who is he
  5. test of ui5 duplicate control id
  6. C# 调用IP库(QQWry.Dat)查询IP位置及自动升级IP库方法(附IP库下载地址及相关dll下载)...
  7. Brex联合创始人:可能将加密货币纳入资产负债表
  8. 开发效率不高?强烈推荐这十款精选IDEA插件
  9. Launch和Shut Off操作详解 - 每天5分钟玩转 OpenStack(30)
  10. 自学python后自己接单-自学python后,可以自己独立做什么事情来挣钱吗?
  11. 【转】我眼中的自动化测试框架设计要点
  12. 爬取中国地震网地震数据
  13. HTML动态分页函数
  14. LS1012ARDB - How to reflash u-boot / RCW via built in Kinetis CMSIS-DAP
  15. Excel科学计数法转换成文本完整显示
  16. sql语句实现查询实例
  17. 操作系统P/V操作(V操作中的典型理解偏差)
  18. 软考系统架构设计师考试论文应试技巧
  19. PRA2020.4 平台 API 接口调用
  20. 按键精灵_字符点阵制作

热门文章

  1. 【Y忍冬草】Qt-状态栏的应用
  2. 联想Y430p安装ubuntu后无线网卡不能工作
  3. ORACLE SPATIAL介绍
  4. 统信uos安装jdk
  5. Oracle期中考试上机试题
  6. u-boot-2012.04.01移植(七)提供nor flash支持
  7. 算法题——双指针(错题总结)
  8. 用ESP8266制作一个WiFi干扰器
  9. ABC:第一台电子计算机
  10. 转朴素贝叶斯分类器的应用