基于Django的中文关键词提取系统的设计与实现

2019-07-08 02:23张少迪郑炅艾山·吾买尔赵全军
电脑知识与技术 2019年13期
关键词:安装包配置文件文件夹

张少迪 郑炅 艾山·吾买尔 赵全军

摘要:随着机器学习的不断兴起,python编程语言也逐渐的被更多人所知和使用,而Django作为由python编写的Web应用框架,也开始被更多的工程和项目所使用。但是随着互联网进程的不断推进,人们对于速度的要求也在逐渐加大,多线程的成为了各大企业和机构不可或缺的需要,而传统的Django在多线程上的拙劣表现也让人大失所望,因此,本系统采用了Django+uWSGI+Nginx的框架,很好的解决了多线程和高并发的问题,而且还拥有了负载均衡的功能,使得中文关键词提取系统的速度提升到了一个新的高度。

关键词:python;Django;多线程;uWSGI;Nginx

中图分类号:TP391   文献标识码:A

文章编号:1009-3044(2019)13-0220-03

Abstract: With the rising of machine learning, python programming language is gradually known and used by more people, and Django, as a web application framework written by python, is also beginning to be used by more projects and projects. However, with the continuous advancement of the Internet process, people's demand for speed is also increasing. Multithreading has become an indispensable requirement for major enterprises and institutions. The poor performance of traditional Django on multithreading is also disappointing. Therefore, the system adopts the framework of Django+uWSGI+Nginx, which solves the problems of multithreading and high concurrency very well. With the function of load balancing, the speed of Chinese keyword extraction system has been raised to a new level.

Key Words: python; Django; multithreading; uWSGI; Nginx

1 引言

隨着互联网进程的加快,人们产生的信息也在面临指数级的增涨,如何从日益庞大的数据中过滤出关键的信息成为学者们逐渐关注的课题,信息抽取任务也因此应运而生。信息抽取包括文本摘要提取、文本关键短语提取、文本关键词提取[1]等任务,关键词提取作为最基础也是需求量最大的一环,也成为学者们研究的最多也最为透彻的一环。

本文设计的中文关键词提取系统是一个基于Django[2]的关键词提取接口,当用户调用该接口之时,会对用户输入的文本进行关键词提取,并将结果返回给用户。该系统采用了Django+uWSGI+Nginx的开源开发框架来进行web[3]设计的,需要分别对Django[4]、uWSGI以及Nginx[5]来进行配置,从而使得这三者能够连接在一起,共同进行接口的调用。该关键词提取系统的工作流程如图1所示。

2 关键词提取系统服务器环境配置

本文中关键词提取系统使用的编程语言为pytthon语言为python3.5.2,操作系统为centos7.2。以下为关键词提取系统服务器的配置过程,包括Anaconda的安装,核心算法依赖包的安装,Django的安装与配置,uWSGI的安装与配置以及Nginx的安装与配置:

2.1 Anaconda的安装

Anaconda指的是一个开源的Python发行版本,其中包含了conda、Python、numpy、pandas等180多个科学包及其依赖项,而且也可以用于在同一个机器上安装不同版本的软件包及依赖,能够在不同的环境之间切换。

1) 下载Anaconda3-4.2.0-Linux-x86_64.sh版本。

2) 在安装包目录输入以下指令

#bash Anaconda3-4.2.0-Linux-x86_64.sh

//同意许可证

#yes

//同意将Anaconda添加进环境变量

#yes

3) 安装完成后,输入python,显示python版本和Anaconda版本即为安装成功。

2.2 依赖包的安装

1)安装依赖包jieba 0.39

2)下载jieba 0.39的安装包

3)在安装包的目录下打开命令行输入以下指令

#pip install jieba-0.39.tar.gz

4)安装networkx 1.11

5)下载networkx1.11的安装包

6)在安装包的目录下打开命令行输入以下指令

#pip install networkx-1.11.tar.gz

2.3 Django的安装

1)下载Django-1.11.17.tar.gz

2)在安装包的目录下打开命令行输入以下指令

#pip install Django-1.11.17.tar.gz

2.4 uWSGI的安装

1)下载uwsgi-2.0.17.1.tar.gz

2)在安装包的目录下打开命令行输入以下指令

#pip install uwsgi-2.0.17.1.tar.gz

2.5 Nginx的安装

1)下载Nginx的安装包,nginx-1.12.2.tar.gz

2)在安装包目录下打开命令行输入以下指令

//解压安装包

#tar -zxvf nainx-1.12.2.tar.gz

//进入nginx文件目录

#cd nginx-1.12.2

#./configure

#make

#make install

3)运行Nginx

//进入Nginx的目录

#cd /usr/local/nginx/sbin

//启动Nginx

#sudo ./nginx

4)打开浏览器,输入本机地址,127.0.0.1,如果看到页面上显示“Welcome to nginx”即为安装成功。

3 项目部署

配置整个中文关键词提取系统需要配置三方面内容,包括配置Django,配置uWSGI以及配置Nginx。

3.1 配置Django

配置Django需要先创建Django工程,修改相关的视图函数以及url,同时修改settings.py的设置。具体操作如下:

1)创建一个Django工程zh_KeyExtraction

#django-admin.py startproject zhKeyExtraction

创建成功后会在目录下生成文件夹zh_KeyExtraction以及文件manage.py,文件夹zh_KeyExtraction下有__init__.py,settings.py,urls.py,wsgi.py。

2)新建一个名为keyextraction_app的app

#django-admin.py startapp keyextraction_app

创建成功后会生成keyextraction_app的文件夹,其中包含admin.py,apps.py,__init__.py,models.py,tests.py以及views.py。

4) 将核心代码放入keyextraction_app文件夹中,并配置views.py,创建get请求和post请求,以及json格式数据的解析和封装,核心代码如下:

#k_w = Key_Word_Extraction()

#def processkey(request):

#    if request.method == 'GET':

#        text = request.GET.get('text')

#        retdata=k_w.keywordextraction(text)

#   return HttpResponse(Tojson(retdata), charset='utf8')

#    else:

#        dt = request.body.decode()

#        jsdt = json.loads(dt)

#return HttpResponse(Tojson(jsdt['text']), charset='utf8')

#def Tojson(data):

#    dt={}

#    dt['code']=200

#    dt['data']=data

#    return json.dumps(dt,ensure_ascii=False)

4)配置zh_KeyExtraction文件夾下的urls.py文件,具体如下:

#urlpatterns = [

#   url(r'^admin/', admin.site.urls),

#   url(r'^keyextraction$', views.processkey,name='keyextraction$')]

5)配置settings.py文件,具体如下:

//将ALLOWED_HOSTS改为*可以保证该服务在不同ip的服务器上也可以顺利运行。

#ALLOWED_HOSTS = ['*']

//注释掉MIDDLEWARE可以有效防止post请求时,检测到没有csrf字符串而产生报错。

# #'django.middleware.csrf.CsrfViewMiddleware'

至此,Django就全部配置完成了。

3.2 配置uWSGI

配置uWSGI需要在django项目的根目录下创建配置文件,uwsgi.ini,配置文件的内容如下:

[uwsgi]

// 对外提供 http 服务的端口

#http = :10920 #这里改为自己的

//用于和 nginx 进行数据交互的端口

#socket = 127.0.0.1:10930

//django 程序的主目录

#chdir=/home/zsd/zh_KeyExtraction

//django中wsgi.py文件的目录

#wsgi-file=/home/zsd/zh_KeyExtraction/KeyExtraction/wsgi.py

//最大的进程数

#processes = 4

//每个进程中的线程数

#threads = 2

3.3配置Nginx

配置Nginx需要进如Nginx的文件夹下,配置相应的配置文件,并重启Nginx。

1)进入Nginx的目录

#cd /usr/local/nginx/conf/

2)创建文件夹conf.d用于存放配置文件

#mkdir conf.d

3)进入conf.d文件夹下并创建配置文件zh_kw.conf

#cd conf.d

#sudo vim zh_kw.conf

4)编辑配置文件,配置内容如下

#upstream zh_kw{

//假设有两台服务器,而且都部署有相同的服务,两台服务器ip分别为10.11.12.3和10.11.12.4,设置nginx可以将请求平均分配到这两个端口号上,即可将效率大幅提升。

#server 10.11.12.3:10910

#server 10.11.12.4:10910 }

#server {

#   listen    10940;

#   server_name localhost;

#   location / {

#       proxy_set_header Host $http_host;

#       proxy_pass http://zh_kw;

# include /usr/local/nginx/conf/uwsgi_params;}}

# server {

#     listen       10910;

#     server_name  localhost;

#     location / {

#         uwsgi_pass 127.0.0.1:12130;

#         uwsgi_send_timeout 600;

#         uwsgi_connect_timeout 600;

#         uwsgi_read_timeout 600;

#         client_max_body_size 500m;

#         client_body_buffer_size 1024k;

# include /usr/local/nginx/conf/uwsgi_params;}

# error_page   500 502 503 504  /50x.html;

#     location = /50x.html {

#         root   etc/nginx/default-site/;}}

5)重新啟动Nginx

//进入nginx启动程序的目录

#cd /usr/local/nginx/sbin

//启动nginx

#sudo ./nginx

4 远程测试

经过以上的配置,中文关键词提取系统已经完成,启动服务后即可进行测试,启动方式如下:

//进入django项目的根目录下

#cd /home/zsd/zh_KeyExtraction

//启动django项目

#uwsgi --ini uwsgi.ini

启动完成后,打开浏览器,在地址栏输入以下数据:

#127.0.0.1:10910/extraction?text=”我感谢中国共产党的领导。”

得到以下结果:

{“code”:200,”data”:{“中国”,”共产党”,”领导”,”感谢”}}

可以发现该服务已经正常启动了,用户可以通过上述方式的get请求对该接口进行访问,或者通过post请求对该接口进行访问,提取所需的中文关键词。

此外,我们选择从腾讯大豫网上面爬取了10000篇中文新闻作为测试语料,对该接口的速度进行并发性测试,测试数据如下表所示:

由上表可知,Django+uWSGI+Nginx在一定的范围内,多线程的效果提升非常显著,当达到硬件的瓶颈后,速度不再提升,但是仍然十分稳定,所有的请求都能够成功返回。

5 总结

综上所述,基于Django的中文关键词提取系统,在加入了uWSGI和Nginx之后,在多线程方面的表现非常出色,有效的解决了Django在多线程方面的缺陷,使得关键词提取的速度更加的快捷,极大的提升了使用者的工作效率。

参考文献:

[1] 赵京胜,朱巧明,周国栋,等.自动关键词抽取研究综述[J].软件学报,2017,28(09):2431-2449.

[2] 郭鹍,蒋晓龙,赵甲文.基于Django框架的电子海图服务器设计[J].电脑知识与技术,2018,14(19):61-63.

[3] 杨改红,赵冬,邓豪,等.基于WEB的远程体育教学平台的开发与设计[J].电子设计工程,2018,26(22):10-13+18.

[4] 杨刚.基于Django的在线考试系统的设计与实现[J].电脑知识与技术,2016,12(14):40-42.

[5] 戴伟,马明栋,王得玉.基于Nginx的负载均衡技术研究与优化[J/OL].计算机技术与发展,2019(03):1-7[2019-03-02].http://kns.cnki.net/kcms/detail/61.1450.TP.20181219.1511.038.html.

【通联编辑:梁书】

猜你喜欢
安装包配置文件文件夹
忘记ESXi主机root密码怎么办
打印机设置
挂在墙上的文件夹
CentOS用yum方式装MySQL