企业负面信息采集和分级系统设计与实现《网站规划与设计》期末论文3
|
图3-8 三层DFD图 负词库管理系统
3.1.3 数据模型
1. 数据字典
表3-1 negative_infos表
字段名 | 含义 | 类型 | 非空 | 依赖 |
ID | 负面信息ID | INT UNSIGEND | 是 | 主键 |
TITLE | 负面信息标题 | VARCHER(50) | 是 | |
SOURCE | 负面信息来源 | VARCHER(100) | 是 | |
TIME | 负面信息发表时间 | DATE | 是 | |
CONTENT | 负面信息正文 | TEXT | 是 | |
LEVEL | 负面信息负面程度 | INT | 否 | |
COMPANY | 负面信息涉及公司 | VARCHAR(20) | 否 | |
CREATED_AT | 本记录创建时间 | TIMESTAMP | 是 | |
UPDATED_AT | 本记录更新时间 | TIMESTAMP | 是 |
表3-2 negative_words表
字段名 | 含义 | 类型 | 非空 | 依赖 |
ID | 负词ID | INT UNSIGEND | 是 | 主键 |
CONTENT | 负词内容 | VARCHAR(10) | 是 | |
LEVEL | 负词负面等级 | INT | 否 | |
CREATE_AT | 本记录创建时间 | TIMESTAMP | 是 | |
UPADTE_AT | 本记录更新时间 | TIMESTAMP | 是 |
表3-3 users表
字段名 | 含义 | 类型 | 非空 | 依赖 |
ID | 用户ID | INT UNSIGEND | 是 | 主键 |
NAME | 用户名称 | VARCHAR(10) | 是 | |
用户邮箱 | VARCHAR(50) | 是 | 主键、外键 | |
PASSWORD | 用户密码 | VARCHAR(30) | 是 | |
REMEMBER_TOKEN | 用户标识 | VARCHAR(100) | 是 | |
CREATED_AT | 本记录创建时间 | TIMESTAMP | 是 | |
UPDATE_AT | 本记录更新时间 | TIMESTAMP | 是 |
表3-4 password_resets表
字段名 | 含义 | 类型 | 非空 | 依赖 |
用户邮箱 | VARCHAR(50) | 是 | 主键,参照user表 | |
TOKEN | 用户标识 | VARCHAR(100) | 是 | |
CREATED_AT | 本记录创建时间 | TIMESTAMP | 是 |
3.2 非功能性需求
3.2.1 易用性
对于用户,在使用系统时,应该是无学习成本的。用户不需要了解系统的架构与实现。界面应尽可能的简洁,以减少无效信息对用户的干扰和误导,让用户可以一眼发现需要的功能。
3.2.2 通用性
系统的使用应该与设备及平台无关。在不同平台,不同设备,不同浏览器上,系统应尽可能的展现给用户相同的界面,至少要保证使用逻辑是相同的。
3.2.3 可维护性
系统在建成之后,应该是可维护的。对于新添加的功能,可以在不影响原有功能的情况下正常运行。系统出现重大问题时,可以通过回滚或DeBug的手段重新上线。
3.2.4 性能
系统应该在用户可接受的时间内完成用户请求的业务。系统应该能长时间的持续运行。系统应该具有足够的容量来保存处理业务的过程中产生的数据。
3.2.5 时效
由于业务的特殊性,系统中的数据应是新鲜的。对于老旧数据应该清理或保存到静态存储作为资料备份。在线数据的产生时间应该是较近的。
4 详细设计
4.1 系统业务流程
本系统由用户通过浏览器访问服务器地址开始业务流程。对于游客,需要首先注册成为系统的用户。用户需要进行登录,以完成身份验证。然后根据角色的不同,分别进入普通用户的业务流程和管理员的业务流程。对于普通用户,登录后,用户进入展示了负面信息列表的主页面,通过搜索框,可以筛选出经过聚集的负面信息列表,然后通过点击负面信息标题,用户可以查看负面信息的详细内容,关闭页面后流程结束。对于管理员,除了普通用户的全部流程,管理员可以启用后台管理流程。管理员进入后台管理页面后,可以选择负面信息管理、负词库管理及爬虫这三个不同的功能,每个功能具有不同的子流程。关闭页面后,流程结束。为了直观的描述系统业务流程,绘制如图4-1所示的流程图。
图4-1 系统业务流程图
在负面信息管理子流程中,流程开始于管理员进入负面信息管理模块。在负面信息管理模块中,首先需要进行功能选择。对于修改和新增负面信息,本质是以数据库中的表字段为最小单位进行增量更新,故接下来进入相同流程。首先展示信息表单,之后填写信息增量并保存,流程结束。而删除负面信息是以数据库表中的元组为单位进行操作,故进入不同流程。由于删除操作具有原子性,故删除过程结束后,直接结束。流程图如图4-2。
图4-2 负面信息管理子流程
在负词库管理子流程中,流程开始于管理员进入负词库管理模块。在负词库管理模块中,首先需要进行功能选择。对于修改和新增负词,本质是以数据库中的表字段为最小单位进行增量更新,故接下来进入相同流程。先展示负词的表单,之后填写负词增量并做保存,流程结束。而删除负词是以数据库表中的元组为单位进行操作,故进入不同流程。由于删除操作具有原子性,故删除果程结束后,直接结束。流程图如图4-3所示。
图4-3 负词库管理子流程
在爬虫管理子流程中,流程开始于管理员进入爬虫管理模块。之后管理员输入企业名称,把名称发送到后端。然后后端执行爬虫,对负面信息搜索并分级。之后进行保存。保存的过程中存在一个校验的子过程,在系统实现部分进行描述。至此流程结束。如图4-4所示。
图4-4 爬虫子流程
4.2 系统结构设计
4.3.1 系统结构图
图4-5 系统结构图
4.3.2 数据访问
本系统使用的数据存储工具是MySQL数据库,但是所实现的数据访问方式是数据库无关的。Laravel提供了Eloquent,它实现了一种 ORM(对象关系映射)的方法,其效果等同于创建了一个虚拟对象数据库。ORM主要传达三个思想: 首先是简单。在建模的时候保存最基本的信息即实体,对于约束、关联等,则在ORM系统中考虑。其次是表现力。对于文档化的数据库结构,应该足够清晰易懂。最后是精确性。基于简单数据模型构建的ORM应该完整的传达数据库模型所想表达的信息和约束。通过Eloquent,我们可以创建一个模型与数据表关联。通过模型我们可以直接使用面向对象的方式,实现对数据表的增删改查及关系映射等。
4.3.3 身份认证
身份认证子系统主要由三个模块构成,包括登录、注册及忘记密码。对于没有登录的情况,我们会给出一个登录页面,在登录之前,系统不允许使用者使用除登录注册和忘记密码外的其他功能。
- 未登录或者登录过期的使用者,在访问服务器后,首先被给出一个登录界面,使用者在此输入账号密码。点击Login后,信息将通过表单提交给服务器,之后服务器进行验证。
- 如果忘记密码,用户可以点击Forgot Your Password链接进行密码重置。进入密码重置的页面后,用户输入注册时的邮箱。邮箱地址通过表单提交给服务器。如果邮箱存在,在通过邮件验证后,系统为用户重置密码并要求设置新密码。设置完成并提交后,密码更新。
- 点击右上角的Register按钮可以进入注册页面。在此,系统要求使用者填写注册信息。使用者填写并提交后,系统会验证信息是否合法。对于合法的注册信息,允许注册,注册成功后会自动登录并进入信息展示页。
4.3.4 负面信息展示
- 1. 已登录用户自动跳转到一个负面信息列表,系统在此展示一些负面信息的概要信息。包括负面信息的标题,时间,来源,相关企业,负面等级。
- 用户可以点击负面信息标题来进入负面信息详情页面查看具体内容。在用户点击标题后,前端向服务器提交一个GET请求,请求中附带所点击的负面信息的ID。服务器通过ID,在数据库中查找对应的负面信息并返回到浏览器。
- 用户可以在筛选框内输入企业名称,点击筛选负面信息后,页面向服务器提交一个POST请求,请求中包含用户提交的企业名称。服务器接收这个请求后,通过该字段对负面信息表进行聚集,之后返回给前端,浏览器就会展示筛选后的负面信息列表。
4.3.5 负面信息管理
- 用户点击后台管理按钮可以进入后台管理模块。在后台管理模块中,有具体的三个模块的入口。
- 点击负面信息管理,可以进入负面信息管理模块。在此处展示了负面信息的标题以及管理模块的子功能入口。
- 点击新增,系统展示一个表单,要求用户填写需要所新增负面信息的详情。其中包括标题、来源、发布时间、企业名称、详细内容。用户填写后,点击新增负面信息。此时页面会向服务器发出一个POST请求来提交刚刚填写的表单。服务器接收表单后,通过数据访问层,把收到的信息保存到数据库。页面返回到负面信息管理。
- 点击修改,页面向服务器发送一个GET请求,请求中包含对应负面信息的ID,之后服务器获取ID所对应的信息后,返回一个填入那些信息的表单。用户可以对信息进行更改。点击提交修改后,页面发出一个POST请求。服务器收到请求后,把修改写入数据库。页面返回到负面信息管理。
- 点击删除,页面向服务器发送一个伪造的请求。请求中包含负面信息ID,伪造的请求类型为DELETE。服务器收到请求后,执行删除操作,对该ID对应的记录进行删除。页面返回到负面信息管理。
4.3.6 负词库管理
- 点击负词库管理,可以进入负词库管理模块。在此处展示了负词内容以及管理模块的子功能入口。
- 点击新增,系统展示一个表单,要求用户填写需要所新增负面信息的详情。其中包括负词和分级。用户填写后,点击提交负词。此时页面会向服务器发出一个POST请求来提交刚刚填写的表单。服务器接收表单后,通过数据访问层,把收到的信息保存到数据库。页面返回到负词库管理。
- 点击编辑,页面向服务器发送一个GET请求,请求中包含对应负词的ID,之后服务器获取ID所对应的信息后,返回一个填入那些信息的表单。用户可以对信息进行更改。点击提交修改后,页面发出一个POST请求。服务器收到请求后,把修改写入数据库。页面返回到负词库管理。
- 点击删除,页面向服务器发送一个伪造的请求。请求中包含负词ID,伪造的请求类型为DELETE。服务器收到请求后,执行删除操作,对该ID对应的记录进行删除。页面返回到负词库管理。
4.3.7 爬虫管理
- 点击爬虫管理进入爬虫模块。页面展示一个表单,在表单中填写企业名称后点击查询负面信息,表单会以POST请求提交给服务器。收到请求的服务器执行爬虫模块从互联网获取企业负面信息。
- 爬虫首先通过URL参数,把公司名称作为关键字,向百度提交一个GET请求。通过get_html收到请求返回的结果后,爬虫模块通过get_url方法,从搜索结果中提取出指向负面信息来源的URL,之后对于提取到的每一个URL,再次通过get_html方法获取到网页文本并保存到本地。获取到的网页文本包含了广告,页头,侧边栏等许多无效信息。通过dom_resorce对文本进行解析,提取出标题、时间、来源、正文等信息,对于无法提取出完整信息的文本,我们认为其信息不完整,做丢弃处理。
- 得到负面信息后,我们对其进行去重,对于标题或内容完全相同的信息,即使来自不同的来源,我们也认为其相同。丢弃判断为重复的信息。
- 对于不重复的信息,我们获取其正文,并通过get_level方法处理,得到文本的负面等级。get_level方法通过分词算法对文本进行分词,然后把分词后的文本向量化。通过文本分类算法,对向量化的文本进行分类,之后基于词库对分类的文本计算出负面等级。这部分通过百度提供的情感分析API实现。对API提交文本,会得到一个包括负面可能,正面可能,置信度,情感倾向等信息的数组。通过
Level = 2 * (负面概率 - 0.5) * 置信度 * 10
变换得到负面等级。此时得到完整的负面信息,将其保存到数据库。算法执行结束后,会返回一个执行结果页面。
0 Comments.