目 录
摘要 II
Abstract III

第一章 引言 1
1.1 概述 1
1.2 选题的背景和意义 1
第二章 入门概念 3
2.1 蛋白质以及翻译后修饰概述 3
2.2文本挖掘技术概述 3
2.3 Pubmed生物医学文献检索系统 4
第三章 需求分析和系统设计 5
3.1需求 5
3.2 需求分析 5
3.3 用户用例分析 6
3.4 系统设计 7
3.4.1 系统工作流程和场景 7
3.4.2 模块化设计 8
3.4.3 软件开发架构 9
3.4.4 开发环境 10
第四章 程序设计和系统实现 11
4.1 程序设计 11
4.2 文本数据源获取 11
4.3 文本预处理 12
4.4 命名实体识别和实体关系提取 15
4.4.1命名实体识别概述 15
4.4.2 ABNER命名实体识别工具 16
4.5 实体关系提取 20
4.5.1 关系提取概念 20
4.5.2 Rlims-p工具介绍及其工作原理 20
4.5.3 嵌入使用Rlims-p工具 22
4.6 多线程处理文档优化 22
4.7 文档预处理和缓存机制 24
第五章 数据库设计和数据可视化 26
5.1数据库设计 26
5.2 数据可视化 27
第六章 总结及展望 30
6.1 总结 30
6.2 展望 30
结束语 32
参考文献 33
第三章 需求分析和系统设计

3.1需求

需求最初是由中山大学生物工程学院的几位师姐提出来的,她们研究蛋白质翻译后修饰的时候会经常去Pubmed生物医学文献检索系统里面去找有关蛋白质翻译后的文献,比如想要找找有关蛋白质磷酸化修饰的文献,学习这一类修饰后的蛋白质的知识,她们可以在Pubmed文献检索系统里输入phosphorylation关键字,接着就可以找到几千或者上万篇有关磷酸化的一些文献。这些根据关键字检索到的文献的数量有点庞大,人工每一篇地去阅读显得有些吃力,但是她们发现她们每次阅读文献的时候都有一个共同点,就是只要找出文献里面的关键信息,比如说只要找出某某蛋白质被某某酶在某个位点上修饰了。这样问题就来了,能不能借助计算机来识别这些关键信息并找出这些关键信息呢?如果可以的话就不用通篇阅读了,大大地节省了时间,提高了效率。于是她们就提出了这样一个需求:通过计算机来识别并找出文献中的一些关键信息,关键信息就是蛋白质的名称,酶的名称,酶修饰蛋白质的位点。
3.2 需求分析

接到这个需求的时候,给我的第一感觉就是要在一篇文章中找出摘要信息,用几个关键词概括出全文,这有点类似于文章目录提取和文章摘要概括。于是我去Pubmed数据库查了几篇有关于磷酸化修饰的文章。文章的主要的意思就是描述了某个激酶在某个位点上修饰了某个蛋白质,当然也有一些是无关紧要的文章,这些无关紧要的文章我们要把它们除去,因为它们并不能给我们带来知识和信息。本文转载自http://www.biyezuopin.vip/onews.asp?id=14573图3-1是一篇标准的Pubmed数据库中关于磷酸化修饰的一篇文章。在示例文中以标签ArticleTitle为例,ArticleTitle内容为GRK6 phosphorylates IκBα at Ser(32)/Ser(36) and enhances TNF-α-induced inflammation.在这句话中GRK6是一种激酶,IκBα是一种蛋白质,Ser(32)/Ser(36)是修饰的位点,它们三者之间的关系是GRK6激酶在Ser(32)/Ser(36)位点上磷酸化修饰了IκBα蛋白质。这就是研究人员想要找出的知识模型。

3.3 用户用例分析
需求我们已经知晓了,在这基础上,我们要建立一条完整地用户使用示例,这样我们才能了解整个系统的来龙去脉。假设一个用户需要在Pubmed生物医学文献检索系统中找出蛋白质磷酸化修饰的一些信息,用户可能想要输入关键词phosphorylate(磷酸化),然后用户想得到所有(当然不可能找出所有的被磷酸化修饰的蛋白质,有些蛋白质研究人员们还在进一步在探索,这里的所有指的是目前已经发现的并且已经被收录于MEDLINE文献数据库中的所有被磷酸化修饰过的蛋白质)被磷酸化修饰过的蛋白质,以及修饰的激酶和修饰的位点,并且这些数据以一种直观、可视化的图表来展示在他面前。简单抽象一点概括的话,用户输入一个pubmed文献,然后期望得到一个可视化的图表。图3-2展示了用户和系统这样一种关系。

<%@page import="com.scut.zl.bean.DisplayResource"%>
<%@page import="com.scut.zl.core.display.DisplayLogic"%>
<%@page import="java.util.Collections"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Comparator"%>
<%@page import="java.util.Collection"%>
<%@page import="java.util.Iterator"%>
<%@page import="com.scut.zl.utils.DataConverter"%>
<%@page import="java.util.List"%>
<%@page import="java.util.HashMap"%>
<%@page import="com.scut.zl.bean.xmlbean.ResultPassage"%>
<%@page import="com.scut.zl.rlims.Rlims_p"%>
<%@page import="java.io.File"%>
<%@page import="com.scut.zl.config.Config"%>
<%@page import="com.scut.zl.utils.FileUtils"%>
<%@page import="com.scut.zl.bean.xmlbean.Annotation"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文献详情页面</title>
<link rel="stylesheet" href="bootstrap.min.css">
<script type="text/javascript" src="bootstrap.min.js"></script>
</head>

<style type="text/css">
span.substrate {
	background-color: yellow
}

span.acid {
	background-color: green
}

span.kinase {
	background-color: blue
}

span.position {
	background-color: red
}

span.trigger {
	background-color: gray;
}

div.titlebar {
	width: 100%;
	height: 80px;
	background-color: #7AD03A;
	padding-top: 20px;
	padding-left: 20px;
}

.label-protein {
  background-color: #f0ad4e;
}

.label-kinase {
  background-color: #b94a48;
  margin-left: 10px;
}

.label-position{
  background-color: #5cb85c;
  margin-left: 10px;
}

.label-acid {
  background-color: #5bc0de;
  margin-left: 10px;
}

.label-trigger{
  background-color: #333;
  margin-left: 10px;
}

</style>

<%
	int index = Integer.parseInt(request.getParameter("index"));
	//加载要展示的资源要内存
	DisplayResource resource = DisplayLogic.getDisplayRes(new File(
			Config.DOC_SET_PATH).listFiles()[index]);

	//给原文中的实体标注颜色
	String taggedText = DataConverter.getTaggedText(resource.text,
			resource.mEntityMap);
	System.out.println(resource.mRelationList.toString());
%>

<script type="text/javascript">
	function myFunction() {
		document.getElementById("protein_list").innerHTML = taggedText;
	}
</script>


<body>
	<div class="titlebar">
		<%
			String pmid = resource.title.split("\\.")[0];
			resource.title = resource.title.substring(pmid.length() + 1,
					resource.title.length());
			if (resource.title.length() > 100) {
				resource.title = resource.title.substring(0, 100) + "...";
			}
		%>
		<font size="6px" color="#ffffff">标题:<%=resource.title%></font>
	</div>
	<div class="container">
		<%
			if (taggedText
					.contains("PMID - 0000TI - Title not provided .AB - ")) {
				taggedText = taggedText.substring(
						"PMID - 0000TI - Title not provided .AB - ".length(),
						taggedText.length());
			}
		%>
		<br></br>
		<br></br>
		<h4>一、文献</h4>
		<table class="table table-bordered" width=100%>
			<tr>
				<td>标题:<%=resource.title%></td>
			</tr>
			<tr>
				<td>PMID:<%=pmid%></td>
			</tr>
			<tr>
				<td>内容:<%=taggedText%></td>
			</tr>
		</table>

		<div>
			<span class="label label-protein">protein</span>
			<span class="label label-kinase">kinase</span>
			<span class="label label-position">position</span>
			<span class="label label-acid">acid</span>
			<span class="label label-trigger">trigger</span>
		</div>
		
		<br></br>
		<h4>二、文中实体</h4>
		<table class="table table-striped table-bordered" width=1000>
			<tr>
				<td>蛋白质</td>
				<%
					String string_substrate = DataConverter.getEntitys(
							Rlims_p.TAG_SUBSTRATE, resource.mEntityMap);
				%>
				<td id="protein_list"><%=string_substrate%></td>
			</tr>

			<tr>
				<td>氨基酸</td>
				<%
					String string_acid = DataConverter.getEntitys(Rlims_p.TAG_ACID,
							resource.mEntityMap);
				%>
				<td><%=string_acid%></td>
			</tr>


			<tr>
				<td>激酶</td>
				<%
					String string_kinase = DataConverter.getEntitys(Rlims_p.TAG_KINASE,
							resource.mEntityMap);
				%>
				<td><%=string_kinase%></td>
			</tr>


			<tr>
				<td>位点</td>
				<%
					String string_position = DataConverter.getEntitys(
							Rlims_p.TAG_POSITION, resource.mEntityMap);
				%>
				<td><%=string_position%></td>
			</tr>


			<tr>

			</tr>



		</table>

		<h4>三、实体关系</h4>
		<table class="table table-striped table-bordered" width=100%>
			<tr>
				<td>关系</td>
				<td>被修饰的蛋白质</td>
				<td>修饰激酶</td>
				<td>修饰位点</td>
				<td>修饰词(phosphorylate)</td>
				<td>氨基酸</td>
			</tr>
			<%
				for (int i = 0; i < resource.mRelationList.size(); i++) {
			%>
			<tr>
				<td>关系<%=i + 1%></td>
				<td><%=DataConverter.getRelation(i, Rlims_p.TAG_SUBSTRATE,
						resource.mRelationList)%></td>
				<td><%=DataConverter.getRelation(i, Rlims_p.TAG_KINASE,
						resource.mRelationList)%></td>
				<td><%=DataConverter.getRelation(i, Rlims_p.TAG_POSITION,
						resource.mRelationList)%></td>
				<td><%=DataConverter.getRelation(i, Rlims_p.TAG_TRIGGER,
						resource.mRelationList)%></td>
				<td><%=DataConverter.getRelation(i, Rlims_p.TAG_ACID,
						resource.mRelationList)%></td>
			</tr>
			<%
				}
			%>
		</table>

	</div>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐