王江雨,胡鼎峰,王賽
(1.南京工程學(xué)院計(jì)算機(jī)工程學(xué)院,南京 211167;2.南京工程學(xué)院自動(dòng)化學(xué)院,南京 211167)
信息化社會(huì)中,工作及日常事務(wù)的增加使人們對(duì)日程管理的需求不斷提高。一款好的日程管理軟件不僅可以提高短期任務(wù)規(guī)劃執(zhí)行效率,還為個(gè)體間互動(dòng)協(xié)作提供便利。
目前,大多數(shù)日程管理軟件還使用手動(dòng)添加、管理內(nèi)容的方式,其操作過(guò)程過(guò)于機(jī)械繁瑣。即使部分已經(jīng)支持語(yǔ)音輸入,但僅能在此基礎(chǔ)上完成簡(jiǎn)單的增刪操作,并不能滿足人們管理規(guī)劃復(fù)雜日程的需求。同時(shí),日程管理軟件多追求通用性,未能針對(duì)特定人群的需求進(jìn)行優(yōu)化。以學(xué)生群體為例,普通日程管理軟件尚未能將課程信息與一般日程有機(jī)整合,而主流課程表軟件(如超級(jí)課程表)也未能良好實(shí)現(xiàn)這一功能。再者,目前主流日程管理軟件的功能多集中在日程預(yù)約與任務(wù)陳列,在長(zhǎng)期任務(wù)的規(guī)劃、時(shí)間的靈活調(diào)配和數(shù)據(jù)的視覺(jué)表現(xiàn)方面有待提升。
基于自然語(yǔ)言處理的學(xué)生日程規(guī)劃管理系統(tǒng)以在校學(xué)生為目標(biāo)人群,能夠通過(guò)語(yǔ)音快速方便地添加日程,并利用B/S結(jié)構(gòu)的跨平臺(tái)性,實(shí)現(xiàn)多終端的日程規(guī)劃和數(shù)據(jù)展示。
分析項(xiàng)目實(shí)際需求,整個(gè)項(xiàng)目包括多個(gè)終端(App,網(wǎng)頁(yè)等),因此考慮使用RESTful架構(gòu)。具體而言,使用同一套后端系統(tǒng),前端通過(guò)特定的URI和HTTP協(xié)議約定的動(dòng)詞訪問(wèn)后端系統(tǒng),后端系統(tǒng)返回一個(gè)約定好的數(shù)據(jù)格式(采用JSON格式),前端根據(jù)返回的數(shù)據(jù)處理結(jié)果實(shí)現(xiàn)與用戶的交互。
RESTful架構(gòu)主要指面向資源,這里的資源泛指一切項(xiàng)目架構(gòu)中可能會(huì)使用到的數(shù)據(jù)。典型的包括用戶信息、日程信息等。傳統(tǒng)的MVC架構(gòu)將頁(yè)面渲染的功能交給后端完成,用戶收到HTML頁(yè)面數(shù)據(jù),這種做法能夠保證各個(gè)用戶所看到的頁(yè)面基本一致,但是加大了服務(wù)器的負(fù)擔(dān)。隨著計(jì)算機(jī)和瀏覽器性能不斷提升,降低了在用戶端渲染頁(yè)面的難度。相對(duì)于傳統(tǒng)架構(gòu),RESTful架構(gòu)返回的不再是渲染好的HTML頁(yè)面,而是JSON格式的數(shù)據(jù)。
考慮到項(xiàng)目實(shí)際需要以及項(xiàng)目組成員的普遍水平,項(xiàng)目預(yù)計(jì)使用Java語(yǔ)言完成后端設(shè)計(jì)。具體來(lái)說(shuō)使用 Spring 系列組件,包括 Spring MVC,Spring,MyBa?tis,Shiro等,其中MyBatis主要完成數(shù)據(jù)訪問(wèn)層底層封裝,Spring MVC提供基礎(chǔ)的RESTful架構(gòu)和控制器,Shiro提供基本的用戶訪問(wèn)控制。
綜合考慮成本和效率等因素,項(xiàng)目選擇MySQL數(shù)據(jù)庫(kù)作為主要數(shù)據(jù)庫(kù);但是涉及到不同的資源,同樣考慮選擇合適的替代方案。例如,項(xiàng)目核心的模型之一——日程,相對(duì)來(lái)說(shuō)日程較為多樣化,難以用一個(gè)統(tǒng)一的抽象模型表示,傳統(tǒng)上日程的詳細(xì)信息基本是文本格式,往往不能很好地針對(duì)各個(gè)日程的特點(diǎn)進(jìn)行提醒;但是關(guān)系型數(shù)據(jù)庫(kù)受到范式約束,難以表述這樣的邏輯。項(xiàng)目組考慮使用MongoDB這種文檔型數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)日程信息,使存儲(chǔ)更加靈活。除此之外,針對(duì)需要短期緩存的信息,使用Redis來(lái)存儲(chǔ),在以往項(xiàng)目的實(shí)踐中,這種做法可以大大提高數(shù)據(jù)訪問(wèn)速度,降低主數(shù)據(jù)庫(kù)的訪問(wèn)壓力。
(1)界面設(shè)計(jì)
對(duì)比市面上Axure、墨刀等界面規(guī)范化設(shè)計(jì)的工具,項(xiàng)目組將采用墨刀作為原型設(shè)計(jì)工具。墨刀是一款在線移動(dòng)應(yīng)用原型工具,團(tuán)隊(duì)可以快速制作出可直接手機(jī)運(yùn)行的演示App交互的原型,快速構(gòu)建移動(dòng)應(yīng)用產(chǎn)品設(shè)計(jì),除了墨刀,還會(huì)使用Mark Man等工具輔助原型的設(shè)計(jì)。
(2)JSON解析能力
移動(dòng)端與服務(wù)器通信的數(shù)據(jù)格式一般使用JSON格式,Android系統(tǒng)原生提供了解析的API,但速度非常慢,而且沒(méi)有提供簡(jiǎn)潔方便的接口來(lái)提高開(kāi)發(fā)者的效率和降低出錯(cuò)的可能,因此選擇阿里巴巴公司開(kāi)發(fā)的Fastjson,采用“假定有序快速匹配”的算法,接口簡(jiǎn)單易用適合多場(chǎng)景使用。
在傳統(tǒng)日程管理系統(tǒng)的基礎(chǔ)上增加自然語(yǔ)言識(shí)別功能,將信息錄入方式從打字輸入變?yōu)檎Z(yǔ)音輸入。針對(duì)在校學(xué)生,實(shí)現(xiàn)添加課程信息。
(1)信息管理模塊:對(duì)于各種不同類型的日程的分類管理,對(duì)于長(zhǎng)期日程進(jìn)行可進(jìn)行分段安排;將每個(gè)用戶的日程自動(dòng)在云端數(shù)據(jù)庫(kù)中同步,實(shí)現(xiàn)跨平臺(tái)使用。
(2)日程展示模塊:當(dāng)用戶需要概覽一天或更長(zhǎng)時(shí)間的日程安排時(shí),可以通過(guò)日程視圖獲得直觀了解;日程視圖分為日視圖、周視圖、月視圖(時(shí)間單位依次為一天、一周、一個(gè)月);支持在同一時(shí)間段內(nèi)出現(xiàn)多個(gè)任務(wù),符合實(shí)際情況;App端和Web端使用視覺(jué)展示,同時(shí)對(duì)用戶日程數(shù)據(jù)進(jìn)行分析并增強(qiáng)視覺(jué)表現(xiàn)。
(3)日程錄入:語(yǔ)音添加,通過(guò)自然語(yǔ)言描述日程信息,系統(tǒng)分析出時(shí)間、事項(xiàng)、地點(diǎn)等;具體信息并添加進(jìn)日程安排中或修改日程安排;使用傳統(tǒng)方式手動(dòng)輸入各項(xiàng)具體信息添加日程安排;針對(duì)學(xué)生人群添加課程表信息。
(1)前端視圖切換
本日程規(guī)劃管理系統(tǒng)支持三種日程視圖類型,如日視圖、周視圖、月視圖,如圖1。
圖1 前端日程視圖切換流程圖
(2)自然語(yǔ)言處理
自然語(yǔ)言處理流程圖如圖2。
MySQL關(guān)系型數(shù)據(jù)庫(kù),分析系統(tǒng)需求,可以抽取出相關(guān)實(shí)體,包含用戶信息表(userinfo)、日程規(guī)劃表(task)和用戶日程表(user_task)三張數(shù)據(jù)表。
用戶信息表以u(píng)ser_id為主鍵存放用戶個(gè)人信息,日程規(guī)劃表以任務(wù)的task_id為主鍵存放日程規(guī)劃的詳細(xì)信息,用戶日程表user_id和task_id聯(lián)合主鍵主要用來(lái)查詢?nèi)粘痰奶嵝褧r(shí)間。
圖2 自然語(yǔ)言處理流程圖
該系統(tǒng)數(shù)據(jù)庫(kù)ER圖如圖3所示。以查看、修改或刪除該日程。每周日程分時(shí)間和天展示日程安排,實(shí)現(xiàn)的效果展示在下方,當(dāng)然,如果日程持續(xù)一天或更久,則會(huì)在“all day”一行顯示持續(xù)的天數(shù)便于查看。每月日程像日歷一樣展示日程安排,會(huì)顯示該月一天的安排,但不顯示時(shí)間段的圖表,而是以文字?jǐn)⑹龃妗?/p>
圖4 添加日程規(guī)劃界面圖
圖3 數(shù)據(jù)庫(kù)ER圖
該添加日程規(guī)劃界面可以添加日程規(guī)劃,這里在Web端實(shí)現(xiàn)時(shí),只能手動(dòng)輸入日程的信息,如標(biāo)題、開(kāi)始時(shí)間、結(jié)束時(shí)間、是否需要郵件提醒等,而在Android端實(shí)現(xiàn)時(shí),通過(guò)調(diào)用集成的騰訊云智能語(yǔ)音服務(wù)(AAI,Artificial Audio Intelligence)進(jìn)行語(yǔ)音識(shí)別并自建業(yè)務(wù)服務(wù)器接收回調(diào)信息,最終將獲取的語(yǔ)音文本分詞后添加到日程界面中,此時(shí)用戶仍然可以自己校對(duì)、修改日程規(guī)劃內(nèi)容。
添加日程規(guī)劃界面如圖4。
該日程規(guī)劃系統(tǒng)可以查看每日日程、每周日程和每月日程。每日日程分時(shí)間展示一天的安排,如果安排有重疊,則表現(xiàn)為兩個(gè)或多個(gè)方框疊加在一起,在方框中,可以查看到日程的時(shí)間和日程的標(biāo)題,點(diǎn)擊后可
每周日程規(guī)劃界面如圖5。
圖5 周日程規(guī)劃界面圖
該系統(tǒng)使用騰訊云AAI中的語(yǔ)音識(shí)別提供的API實(shí)現(xiàn)語(yǔ)音的文本轉(zhuǎn)換。在使用語(yǔ)音識(shí)別功能前,需要開(kāi)發(fā)者申請(qǐng)?jiān)摲?wù),取得appId、secretId和secretKey,并自建業(yè)務(wù)服務(wù)器接收回調(diào)數(shù)據(jù)。
這里不涉及騰訊云AAI RESTful API中的語(yǔ)音識(shí)別服務(wù)的調(diào)用方式,只說(shuō)明自建服務(wù)的接口實(shí)現(xiàn)[3]。
業(yè)務(wù)服務(wù)器接口表如下:
表1 業(yè)務(wù)服務(wù)器接口表
本系統(tǒng)主要使用Python和Java語(yǔ)言開(kāi)發(fā),通過(guò)數(shù)據(jù)庫(kù)設(shè)計(jì)、Web前端設(shè)計(jì)、服務(wù)端設(shè)計(jì),已基本完成基于自然語(yǔ)言的日程規(guī)劃管理功能,用戶可以通過(guò)語(yǔ)音輸入或手動(dòng)添加日程內(nèi)容,同時(shí)可以添加在校學(xué)生的課程信息,不僅便于用戶的日常日程規(guī)劃管理,也方便查看課程表。根據(jù)對(duì)現(xiàn)國(guó)內(nèi)外日程管理應(yīng)用的現(xiàn)狀、水平和發(fā)展趨勢(shì)的分析,該系統(tǒng)具有一定的實(shí)用性、可操作性。該系統(tǒng)在設(shè)計(jì)上采用較新穎的技術(shù),順應(yīng)目前行業(yè)發(fā)展潮流,可擴(kuò)展性強(qiáng)。