面向对象大作业——自主选题 网安2411 于鸿硕

面向对象大作业——自主选题

拟选题:基于学院网站的搜索引擎 网安2411 于鸿硕 202421336018


一、使用的AI工具辅助选题

在选题过程中,我使用ChatGPT进行辅助选题,


二、选题与前期调查

想要做什么

经综合考量课设题目书和扩展题目,基于网络空间安全专业的专业特性,我对Java Socket编程和Web html较感兴趣,希望了解网站架构逻辑与网络通信知识,加强网络开发者技能,选择了基于学院网站的搜索引擎

该系统的主要功能是,通过爬虫对学院网站行抓取、建索、排序、搜索、摘要显示;涉及网络爬虫、中文分词、Web。

下附ChatGPT归纳的选题价值、可行性以及难点:

img

img

图2.1 AI选题点

别人是怎么做的

在GitHub中找到了部分可参考的项目案例,附链接:

**1.Basic-Search-engine ** https://github.com/djmejiaamador/Basic-Search-engine?utm_source=chatgpt.com

说明用 Java 索引网站并使用 Socket 提供界面

2.Java-Web-Search-engine-and-Crawler https://github.com/pavitrakumar78/Java-Web-Search-engine-and-Crawler?utm_source=chatgpt.com

简单的 Java 搜索引擎 + 爬虫示例

3.SearchEngine https://github.com/smmorneau/SearchEngine?utm_source=chatgpt.com

Java 应用:爬取 seed 页面、建立倒排索引并提供搜索服务

准备实现的部分

抓取、建索(中文分词)、排序、搜索、摘要显示


三、系统功能设计

① 用户界面层(UI)

  • 提供搜索框、按钮
  • 显示标题、URL、摘要和高亮关键词
  • 与后台通过 Socket/HTTP 通信

② 搜索服务层

  • 负责接收用户请求(Socket)
  • 对搜索引擎核心进行调度
  • 将结果封装成前端友好的 JSON

③ 搜索核心层

  • 查询解析、中文分词
  • 从倒排索引中读取文档列表
  • 使用 TF-IDF/BM25 排序
  • 生成搜索摘要并返回结果

④ 索引构建层

  • 解析 HTML、提取正文
  • 对中文正文进行分词
  • 构建倒排索引
  • 持久化索引文件(可重启加载)

⑤ 爬虫抓取层

  • 使用 Socket 抓取学院网页
  • 维护 URL 队列、去重集合
  • 获取可索引的 HTML 页面
  • 输入到索引层进行处理
┌───────────────────────────────────────────────┐
│                   Web 前端层(UI)            │
│   - 搜索输入框(Search Page)                 │
│   - 搜索结果展示页面(Result Page)           │
│   - 关键字高亮、摘要展示                      │
└───────────────────────────────────────────────┘
                      │ HTTP 请求 / 响应
                      ▼
┌───────────────────────────────────────────────┐
│                 Web Server 层(Java)         │
│  - 处理前端请求(Servlet / HttpHandler)      │
│  - 调用后端搜索服务(Socket 客户端)          │
│  - 组装 HTML / JSON 返回给前端               │
└───────────────────────────────────────────────┘
                      │ Socket 通信(JSON)
                      ▼
┌───────────────────────────────────────────────┐
│              搜索引擎核心后端(Java)          │
│     【通过 Java Socket 单独运行的服务端】     │
│   - 页面抓取模块(Crawler)                   │
│   - 中文分词与倒排索引模块(Indexer + jieba) │
│   - 排序模块(Ranker,TF-IDF / BM25)         │
│   - 搜索模块(Searcher)                      │
│   - 摘要生成模块(Snippet Generator)         │
└───────────────────────────────────────────────┘
                      │ 文件 I/O
                      ▼
┌───────────────────────────────────────────────┐
│                    数据存储层                 │
│   - 原始网页缓存(HTML)                       │
│   - 解析后的文本内容(JSON)                   │
│   - 倒排索引文件(JSON / Map 序列化)         │
│   - PageRank / 评分缓存                       │
└───────────────────────────────────────────────┘

图3.1 系统总体架构示意图

设计代码架构如下:

graph TD; src-->web-->|处理HTTP请求|SearchServlet.java web-->|Web首页|index.html web-->result.html src-->|搜索引擎|engine-->|爬虫|Crawler.java engine-->Indexer.java engine-->|搜索|Searcher.java engine-->Ranker.java engine-->SnippetGenerator.java engine-->Document&SearchResult.java engine-->Socket.Server.java src-->data-->|检索后的缓存|pages&index&log

四、拟使用的第三方Java生态工具

1.Crawler相关库

Jsoup HTML 解析 + 网页抓取 + DOM 提取

2.中文分词相关

jieba-java 中文文本分词

3.Web服务端相关

Java Servlet 构建 Web 页面、接收用户请求、调用 Socket 后端、返回 HTML 页面

4.JSON序列化

Gson Socket 通信时把对象转成 JSON、倒排索引落盘时序列化/反序列化


五、数据储存方式

1.抓取后的网页缓存(HTML Cache)

2.网页解析结构化后的JSON文件储存


六、界面

Web HTML


七、开发工具

IDE:IDEA 2024

Git+GitHub

Chrome Devtools

posted @ 2025-12-10 16:05  KinthYu  阅读(0)  评论(0)    收藏  举报