前言:css
前面咱們已經能初步實現一箇中文天然處理語言的模型了,但交互界面是命令行的,不太友好。html
若是想作一個相似http://xiaosi.trs.cn/demo/rs/demo的界面,那就還須要繼續往下處理。python
Djangolinux
因爲Jiagu等使用了python語言,因此Web站點的實現,優先考慮到python的web框架。web
而這裏選擇了還比較流行的Django。算法
教程參考:django
https://www.runoob.com/django/django-tutorial.htmlbootstrap
http://www.javashuo.com/article/p-kcvusssu-c.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,redirect words="" 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=inputText words = 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)-1 tmp=0 tmp2=0 while tmp<=j: k=pos[tmp] newPos[tmp]=(words[tmp],k,dict2[k]) tmp=tmp+1 i=len(ner)-1 while tmp2<=i: t=ner[tmp2] newNer[tmp2]=(text[tmp2],t,dict1[t]) tmp2=tmp2+1 print(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})
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> 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> 請輸入要處理的語言: <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> 分析結果 </lable></legend> <br> <div class="row"> <div class="col-sm-3"><span class="glyphicon glyphicon-scissors"></span> 自動分詞結果: </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> 關鍵詞獲取結果: </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> 文本摘要: </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> 詞性分析: </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> 實體識別: </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> 知識圖譜關係: </div> <div class="col-sm-6"> {{knowledge}} </div> <div class="col-sm-3"></div> </div> </filedset> </form> </div> </body> </html>
附:用到的知識:
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>