前言:

前面我们已经能初步实现一个中文自然处理语言的模型了,但交互界面是命令行的,不太友好。

如果想做一个类似http://xiaosi.trs.cn/demo/rs/demo的界面,那就还需要继续往下处理。

Django

由于Jiagu等使用了python语言,所以Web站点的实现,优先考虑到python的web框架。

而这里选择了还比较流行的Django。

教程参考:

https://www.runoob.com/django/django-tutorial.html

https://www.cnblogs.com/feixuelove1009/p/5823135.html

1. Diango安装

pip install Diango

2. 创建一个Web站点

使用 django-admin命令来创建一个叫ai的项目

进入部署目录,Anaconda promt下cd

anaconda集成下安装默认的目录是: \anaconda\Lib\site-packages\django\bin\

django-admin startproject ai

linux下命令:

linux下默认安装目录是:/usr/local/python3/lib/python3.7/site-packages/django/bin/

python  django-admin.py  startproject ai

3. 编写Web页面

1)设置环境信息,修改settings.py

django知道我们的html文件在哪里,需要修改settings文件的相应内容。默认下不用修改

'DIRS': []修改为 'DIRS': [BASE_DIR+"/templates", ]

同时注释以下行,暂时关闭一下django的csrf跨站请求保护机制(涉及用户输入时会调用到,如不处理会报错):

MIDDLEWARE = [
   # 'django.middleware.csrf.CsrfViewMiddleware',

在ALLOWED_HOSTS = []中添加允许的IP ALLOWED_HOSTS = ['XX.XX.XX.XX']--当然,如果默认127.0.0.1运行,则不需要此步骤

2)表现层-创建template目录,并创建index.html

按Diango的分层思想,在界面显示的内容(表现层),放在模板Template中。

因此,我们先在项目下创建template的目录,并创建index.html文件。文件的内容后续补充。

3)UI-使用bootstrap美化界面

在项目中新建static目录,并放入bootstrap的目录。

同时在settings.py加入static目录的引用:

STATIC_URL='/static/'
STATICFILES_DIRS=(os.path.join(BASE_DIR, "static"),)

4) 控制器层-业务逻辑,修改view.py

这里用于向模板层提供数据,我们定义一个函数,html接收用户输入,view处理后返回给用户。

5)路由系统-urls.py

浏览器输入的url,通过这个urls.py文件转发到业务逻辑中

增加

import from ai import views

urlpatterns = [
path('admin/', admin.site.urls),
path('', views.login),
path('login/', views.login),
]

4. 启动Web服务

执行命令

python manage.py runserver 127.0.0.1:8000

python manage.py runserver IP:8000

5. 查看效果

浏览器打开url: http://127.0.0.1:8000/

主要代码:

views.py

# -*- coding: utf-8 -*-
from django.shortcuts import render
import jiagu# Create your views here.
from django.shortcuts import render,redirectwords=""
keywords=""
knowledge=""
summarize=""
def login(request):# request 包含用户提交的所有信息words = ""keywords=""knowledge=""summarize=""text=""pos=""ner=""newPos={}newNer={}dict1 = {'B-PER':'人名','B-LOC':'地名','B-ORG':'机构名','I-PER':'人名','I-LOC':'地名','I-ORG':'机构名','O':'不是名词短语'}dict2 = {'n':'普通名词','nt':'时间名词','nd':'方位名词','nl':'处所名词','nh':'人名','nhf':'姓','nhs':'名',
'ns':'地名','nn':'族名','ni':'机构名','nz':'其他专名','v':'动词','a':'形容词','m':'数词','d':'副词','w':'标点符号','ws':'非汉字字符串','i':'习用语','j':'缩略语',
'r':'代词','p':'介词','c':'连词','u':'助词','e':'叹词','vd':'趋向动词','vl':'联系动词','vu':'能愿动词','x':'非语素字','m':'数词','q':'量词','mq':'待定','o':'拟声词','k':'后接成分'}if request.method == 'POST':inputText = request.POST.get('input',None)output = request.POST.get('output',None)text=inputTextwords = jiagu.seg(text)  # 分词,可以用model选择分词模式,不填则默认,mmseg则使用mmseg算法    if (len(text)<=6):try:keywords = jiagu.keywords(text, 1)except ValueError:print("关键词设置不当,请联系管理员!") elif (len(text)<=30):print(len(text))keywords = jiagu.keywords(text, 3)else:try:keywords = jiagu.keywords(text, 5)except ValueError:print("关键词设置不当,请联系管理员!")knowledge = jiagu.knowledge(text) # 知识抽取summarize = jiagu.summarize(text, 1) # 摘要pos = jiagu.pos(words)  # 词性标注ner = jiagu.ner(text)   # 命名实体识别
        j=len(pos)-1tmp=0tmp2=0while tmp<=j:k=pos[tmp]newPos[tmp]=(words[tmp],k,dict2[k])tmp=tmp+1i=len(ner)-1while tmp2<=i:t=ner[tmp2]newNer[tmp2]=(text[tmp2],t,dict1[t])tmp2=tmp2+1print(words)print(keywords)print(newPos)print(knowledge)return render(request, 'login.html',{"text":text,"words":words,"keywords":keywords,"knowledge":knowledge,"summarize":summarize,"pos":newPos,"ner":newNer})

View Code

login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>login</title><style>label{width: 80px;text-align: right;display: inline-block;}</style><link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css" >
</head>
<body>
<div class="container"><form action="/login/" method="post" class="form-horizontal"><filedset><legend><lable> <span class="glyphicon glyphicon-home"></span>&nbsp;NLP自然语言处理 </lable></legend><div class="row"> <!--栅格系统,每row行共12列,分个3div,每1,3个div占3列,第2个div则占5列,即3列+5列+4列=12列--> <span class="glyphicon glyphicon-pencil"></span>&nbsp;请输入要处理的语言: <input type="text" name="input" placeholder="请输入你要处理的文本:例如:广州市" class="form-control" style="margin: 20px 0px 0px; height: 104px; width: 807px;" required  value={{text}} >       </div><div class="row">  <br><div class="col-sm-7 col-sm-offset-7">      <input type="submit" value="一键处理" class="btn btn-xs btn-primary" ><!-- <button  type="reset" value="Reset" class="btn btn-xs btn-warning"></button>--></div></div><legend><lable> <span class="glyphicon glyphicon-road"></span>&nbsp;分析结果 </lable></legend><br><div class="row">      <div class="col-sm-3"><span class="glyphicon glyphicon-scissors"></span>&nbsp;自动分词结果: </div><div class="col-sm-6">{%for output in words%}{{output}}{% endfor %}</div><div class="col-sm-3"></div></div><br><div class="row"><div class="col-sm-3" ><span class="glyphicon glyphicon-lock"></span>&nbsp;关键词获取结果: </div><div class="col-sm-6">{%for output in keywords%}{{output}}{% endfor %}</div><div class="col-sm-3"></div></div><br><div class="row"><div class="col-sm-3" ><span class="glyphicon glyphicon-font"></span>&nbsp;文本摘要: </div><div class="col-sm-6">{%for output in summarize%}{{output}}{% endfor %}</div><div class="col-sm-3"></div></div><br><div class="row"><div class="col-sm-3" ><span class="glyphicon glyphicon-cog"></span>&nbsp;词性分析: </div><div class="col-sm-6">{{pos}}</div><div class="col-sm-3"></div></div>  <br><div class="row"><div class="col-sm-3" ><span class="glyphicon glyphicon-th"></span>&nbsp;实体识别: </div><div class="col-sm-6">{{ner}}</div><div class="col-sm-3"></div></div>   <br><div class="row"><div class="col-sm-3" ><span class="glyphicon glyphicon-tree-deciduous"></span>&nbsp;知识图谱关系: </div><div class="col-sm-6">{{knowledge}}</div><div class="col-sm-3"></div></div>   </filedset></form>
</div></body>
</html>

View Code

附:用到的知识:

1. Django获取用户界面表单提交过来的数据

view.py中:

if request.method == 'POST':
    # 获取用户通过post 提交过来的数据
        inputText = request.POST.get('input',None)

html中:

<form action="/login/" method="post" class="form-horizontal">

       <input type="text" name="input" value={{text}} >       

2. Django返回用户界面数据并展示在html中

view.js中

return render(request, 'index.html',{"text":text,"words":words})

html中:

<div class="col-sm-6">
              {%for output in words%}
              {{output}}
              {% endfor %}
        </div>

转载于:https://www.cnblogs.com/xiaoer/p/11262456.html

自然语言处理NLP学习笔记三:使用Django做一个NLP的Web站点相关推荐

  1. ROS学习笔记三:编写第一个ROS节点程序

    在编写第一个ROS节点程序之前需要创建工作空间(workspace)和功能包(package). 一.创建工作空间(workspace) 创建一个catkin_ws: #注意:如果使用sudo一次性创 ...

  2. 利用计算机技术实现对文本篇章,自然语言处理NLP学习笔记一:概念与模型初探...

    前言 先来看一些demo,来一些直观的了解. 自然语言处理: 可以做中文分词,词性分析,文本摘要等,为后面的知识图谱做准备. 知识图谱: 还有2个实际应用的例子,加深对NLP的理解 九歌机器人: 微软 ...

  3. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  4. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  5. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  6. Ethernet/IP 学习笔记三

    Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...

  7. 吴恩达《机器学习》学习笔记三——多变量线性回归

    吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...

  8. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

  9. Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装

    扫码看专栏 jQuery的优点 jquery是JavaScript库,能够极大地简化JavaScript编程,能够更方便的处理DOM操作和进行Ajax交互 1.轻量级 JQuery非常轻巧 2.强大的 ...

最新文章

  1. javascript与java的不同之处
  2. java封装插件,基于面向对象思想封装一个水球插件
  3. Windbg/KD驱动调试点滴–将平时调试的一些小方法共享给大家 --------- 转
  4. 跨行合并居中html标记语言,[前端Web]HTML语法最全解-建议收藏
  5. 时间序列研(part7)--单位根检验
  6. java从入门到精通_Java入门到精通、学习路线、就业方向、薪资及前景分析(上篇)...
  7. 普里姆从不同顶点出发_来自三个不同聚类分析的三个不同教训数据科学的顶点...
  8. linux查看tcl版本_查看Linux内核版本的方法有几个?你也是这样操作吗?
  9. maven--mvn命令
  10. php jwplayer mp4,jwplayer6 和 php播放视频
  11. android uikit框架详解,UIKit框架(2)框架简介
  12. 微软全球最有价值专家(MVP) - 中国区2008年7月最有价值专家名录
  13. 最简明扼要的 Systemd 教程,只需十分钟
  14. 思科和H3C交换机单端口环路解决方案
  15. 键盘按键ctrl与大小写切换键caps lock位置互换
  16. html5 手机uc浏览器 复制链接,删除手机UC浏览器强制插入关键词链接的方法
  17. 安装IE11提示“Internet Explorer在安装前需要更新”
  18. JAVA——Java后端技术体系韩顺平框架图_韩顺平Java基础学习路线图
  19. springboot 集成支付宝支付
  20. 软工实践 - 第六次作业

热门文章

  1. 小区重选优先级_小区重选时的PLMN选择
  2. 服务器电脑无限重启,win10电脑蓝屏无限重启_网站服务器运行维护
  3. 如何进行BI工具的选型?2019必看的商业智能工具选型参考
  4. 药学薛定谔专题干货总结
  5. Jenkins的下载安装及入门使用
  6. 心动著境即是魔,随缘分别则无定
  7. 怎么使用微信打印文档,微信文档如何打印
  8. .Net遇到的问题以及解决方法
  9. deflategzip区别
  10. python爬虫爬取新浪网站新闻内容