1. 程式人生 > >網際網路+藥店推薦系統的設計與實現

網際網路+藥店推薦系統的設計與實現

目錄

中文摘要 3

1  緒論 6


中文摘要

隨著社會的進步與發展、社會基礎設施建設和服務也越來越完善。藥店深入到了城市的各個社群,為我們買藥治小病帶來了方便。同時,由於藥店越來越多、藥店等級、服務水平參吃不齊、藥品種類繁多等,消費者容易患上選擇困惑症。為使消費者挑選到合適的藥店和滿意藥品,也為使藥店管理者將本藥店和藥店藥品更好的呈現給消費者,本文設計和實現了網際網路+藥店推薦系統。

本系統的實現主要用Java語言開發,採用了當前流行的開源框架和技術,並融合了Web GIS技術、情感分析演算法和推薦演算法;資料儲存採用MySQL和Elasticsearch,Elasticsearch用於儲存使用者行為和使用者評價等資料量較大的資料,便於查詢、檢索和分析,其他系統資料儲存在MySQL資料庫。該系統包括使用者登入子系統、後臺管理子系統、藥店管理子系統、地理資訊子系統、評論管理子系統、藥店推薦子系統和客戶使用子系統。

本系統分為前端和管理後臺。前端包括瀏覽附近的藥店、關鍵詞查詢推薦藥店、檢視推薦藥店的藥品資訊和歷史使用者評論、導航至推薦藥店、對推薦方案中的藥店藥品進行評價等功能,可用於移動端裝置,主要服務於普通使用者;管理後臺主要在PC端使用,包括系統管理如資源、角色、使用者等管理以及藥店、藥品管理等功能,服務於系統管理員和藥店管理員。

本系統滿足了消費者個性化買藥需求,解決了消費者藥店、藥品選擇的困難,為消費者在最短的時間推薦最合適的購藥方案,節約了時間成本,同時也營造了一個更好的購藥氛圍和環境,藥店和藥店的藥品也能更好的展現給消費者,為消費者和藥店帶來了雙贏。

關鍵詞: 藥店,藥品,推薦系統,Web GIS,情感分析,網際網路+

With the progress and development of society, social infrastructure construction and services are also becoming more and more perfect. The pharmacy went deep into the various communities in the city and brought convenience for us to buy medicines to cure minor ailments. At the same time, due to the increasing number of pharmacies, pharmacy levels, poor access to quality and service, and wide variety of medicines, consumers are prone to choice confusion. In order to enable consumers to select suitable pharmacies and satisfactory medicines, and in order to enable pharmacy managers to better present this pharmacy and medicine to consumers, this paper designed and implemented an Internet plus pharmacy management system.

The implementation of this system is mainly developed in the Java language, using the currently popular open source frameworks and technologies, and integrating Web GIS technology, sentiment analysis algorithms and recommendation algorithms;   The system uses MySQL and Elasticsearch to storage data, Elasticsearch for storing user behavior data and user evaluation data with a large amount of data is easy to query, retrieve, and analyze. Other system data is stored in the MySQL database. The system includes a user login subsystem, a background management subsystem, a pharmacy management subsystem, a geographic information subsystem, a comment management subsystem, a pharmacy recommendation subsystem, and a customer use subsystem.

The system is divided into front-end and management background. The front end includes functions such as browsing a nearby pharmacy, finding keywords to find a recommendation pharmacy, viewing medicine information and historical user reviews of a recommended pharmacy, navigating to a recommended pharmacy, and evaluating pharmacy medicines in a recommended plan, which can be used in a mobile device and mainly face to customers; The management background is mainly used on the PC side, including system management such as resources, roles, users and other functions as well as pharmacy, medicine management and other functions. It’s faces to system administrators and pharmacy administrators.

The system meets the needs of consumers for personalized medicine purchases, solves the difficulties of consumer pharmacies and medicine selection, recommends the most suitable medicine purchasing plan for consumers in the shortest time. it saves time cost, and also creates a better medicine purchasing environment, pharmacies and medicines can also be better demonstrated to consumers, this bringing a win-win situation for consumers and pharmacies.

Key Words: pharmacies, medicines, recommendation system, Web GIS, sentiment analysis, internet plus

1  緒論

    1. 研究背景與意義
      1. 研究背景

隨著社會經濟的發展,城市化程序的加快,越來越多的藥店慢慢進入人們的視線。在“大病進醫院,小病上藥店”的醫藥消費模式下,近些年來藥店數量猛增。相對於日益增長的藥店來說,傳統小診所的數量卻在慢慢減少。調查發現,產生該現象的原因主要包括以下幾個方面:

  • 相對於開設診所,經營藥店門檻較低,費用較低;
  • 經營藥店風險低,只要按規定經營,不會出現什麼重大問題
  • 看病貴,很多人小病選擇在藥店買藥;
  • 藥店買藥方便,去醫院或診所麻煩且看病流程複雜,費時費力;
  • 藥店需求旺盛,利潤高。

藥店給人們看病帶來了極大的方便的同時,也帶來了很大的困擾,消費者在需要買藥時,時常有如下困惑:

  • 藥店太多,藥店等級參差不齊,該怎麼選擇?
  • 地理環境不熟悉,不清楚藥店的具體位置,要怎麼快速到達想去的藥店?
  • 面對種類繁多的藥目,琳琅滿目的藥品,該如何選擇?
  • 藥劑師推薦的藥實惠嗎?怎麼才不會被宰?

本論文的研究即是希望通過網際網路+藥店推薦系統解決消費者去藥店買藥的困惑。

隨著網際網路技術的飛速發展,我們逐漸從資訊匱乏的時代很快步入了資訊過載的時代。我們將藥店定義為資訊的生產者,將買藥的患者定義為資訊的消費者。

目前,無論是資訊的生產者還是資訊的消費者都遭遇到了非常大的挑戰。作為資訊消費者,如何從大量的藥店中挑選出自己滿意的藥店,如何從海量的藥品中挑選出對症的藥品是一件很困難的事;作為資訊的生產者,如何讓藥店和藥店的藥品資訊脫穎而出,受到消費者的廣泛關注,同樣是一件十分困難的事。

本論文研究的主要目的就是為了解決藥店與消費者的這一矛盾,通過聯絡消費者和藥店資訊,一方面幫助消費者發現對自己有價值的藥店、藥品資訊,另一方面讓藥店和藥店資訊能夠更有效的展現在對它感興趣的消費者面前,從而實現藥店和消費者的雙贏。

為滿足消費者個性化的購買藥品需求,我們將GIS(Geographic Information Systems,地理資訊系統)技術、評論挖掘與分析演算法、推薦演算法整合到藥店管理系統中,形成網際網路+藥店推薦系統。使用者使用該系統輸入個性化查詢需求,系統通過整合使用者需求、藥店藥目資訊、藥店位置資訊、藥店評論資訊、歷史使用者記錄等,為使用者推薦最為合適的1-3個藥店,並羅列出推薦藥品列表。客戶選中推薦的藥店後,可以通過本系統導航至該藥店進行藥品購買。網際網路+藥店推薦系統為消費者提供了便捷且更可靠的購藥解決方案。

1.2.1.1 管理資訊系統發展歷程

隨著管理理論和計算機技術的發展,管理資訊系統的發展經歷了6個時期,如圖1-1所示。

圖1-1 管理資訊系統發展的6個時期

  • 訂貨點法

訂貨點法(Order Point Method,OPM)開始於20世紀30年代。其原理是:由於生產或者銷售,某一類物料或者產品的庫存將會慢慢減少。我們為該物料或產品的庫存設定最低庫存量,即庫存閾值,當庫存下降至庫存閾值時,為補充庫存,我們發出採購訂貨單或加工訂貨單,當所定的物料或者商品到達倉庫時恰好能夠補充前一時期的降低量,將其庫存降低至安全庫存,該訂貨的數量值,稱為訂貨點。如圖1-2所示。

圖1-2 訂貨點法

在大批量的生產組織方式下,需求或消費量相對穩定的物料或產品適用訂貨點法。

  • 物料需求計劃

物料需求計劃(Material Requirements Planning,MRP),該理論由美國的Jo-seph A.Orlicky於1960s中期提出。他將原材料、輔料、中間產品、產品等這些企業生產過程中所涉及的材料在邏輯上看做同種物料,然後將企業生產過程中所需的各類物料劃分為獨立與相關兩種需求型別。

圖1-3 物料需求計劃

MRP一般適用在訂購業務方面,其沒有深入到企業生產和管理的核心之中,而只是涉及到企業與市場的介面。

  • 閉環MRP(Closed Material Requirements Planning)

閉環MRP(Closed Material Requirements Planning)將能力需求計劃和執行及控制計劃的功能也加入進來,形成一個閉環,如圖1-4所示,即為“計劃-實施-評價-反饋-計劃”的一個迴圈工作流程。

圖1-4 閉環MRP

閉環MRP既適用訂購業務,又深入企業生產管理的核心,實現了人力、機器、材料等各類生產資料的計劃和控制,進而使得在生產管理方面對市場的應變能力顯著增強。

  • 製造資源計劃

製造資源計劃(Manufacturing Resource Planning,MRPⅡ),將MRP作為核心,生產計劃的制定依賴於企業經營目標,擴充套件資訊共享的範圍,將生產-銷售-財務-採購-工程融合在一起,如圖1-5所示,實現了資料整合與共享,形成全面的生產管理整合與優化模式。

圖1-5 製造資源計劃MRPⅡ

MRPⅡ適用於企業對製造資源的管理,企業內部各部門之間的資訊交流單一的企業的管理。  

  • 企業資源計劃

企業資源計劃(Enterprise Resource planning,ERP),它通常被稱為一類商業管理軟體,通常是一套整合應用程式,企業可通過它收集、儲存、管理和解釋來自商業活動的資料。ERP系統是一個實時(或接近)執行的整合系統,它支援所有應用程式的通用資料庫,無縫連線各模組,使用者的感覺即為統一的整體。ERP系統一般涵蓋的功能區域包括:財務和會計、管理會計、人力資源、製造、訂單處理、供應鏈管理、專案管理、客戶關係管理。資料服務等。ERP最根本的優勢在於將企業的各類業務流程進行整合,節省了時間和成本,管理層可以更快速的做出決策並減少錯誤;最大的難點在於統一ERP系統可能是一項艱鉅的任務(特別是對於大公司),需要大量的時間、規劃以及資金。

  • 計算機整合制造系統

計算機整合制造系統(Computer Integrated Manufacturing System,CIMS),是一種使用計算機來整合控制整個生產過程的生產製造方法,它允許各個程序之間相互交換資訊並協同工作。其主要優勢在於能夠建立自動化製造流程,可以加快製造速度且不易出錯。與傳統的“熄燈工廠”不同,它完全獨立於人為干預,系統涉及靈活的製造,工廠可以快速修改以生產不同的產品,或者可以藉助計算機快速更改產品數量。

圖1-6 計算機整合制造系統CIMS

順利運作的計算機整合制造系統的發展面臨三大挑戰:

  • 整合來自不同供應商的元件:當不同的機器(如傳送帶、機器人等)使用不同的通訊協議可能會導致系統整合面臨較大困境。
  • 資料完整性:自動化程度越高,用於控制機器的資料的完整性就越關鍵。雖然CIMS節省了操作機器的勞動力,但需要額外的人力來確保對用於控制機器的資料訊號有適當的保護。
  • 過程控制:計算機可用於協助製造工廠的操作人員,但必須有一位能勝任的工程師來處理控制軟體設計人員無法預見的情況。

1.2.1.2 管理資訊系統應用綜述

為了優化產業結構,減少管理成本,提高生產效率,企業越來越多重視自身的資訊化建設。管理資訊系統的建設和使用已深入社會的各行各業之中,如企業管理[1-5]、工程建設管理[6-8]、教育[9-12]、科研[13-14]、金融[15-17]、社保[18-19]、電力[20]、物流[21]、醫療[22]、旅遊[23]、農業生產[24-26]等,並隨著網際網路技術的發展向智慧化[27]、物聯網化[28]方向發展。

在企業與工程管理方面,樂偉平[1]在現代企業人力資源管理要求的基礎上,根據企業人力資源管理的需求,設計出符合WEB應用的企業人力資源管理資訊系統。針對目前倉庫資訊管理系統在通用性、多樣化、有效性等方面的不足與缺陷,彭紅利[2]在倉庫高效管理工作流程的各個環節基礎上,提出通用物資倉庫管理資訊系統的設計與實現的方案。謝鵬[5]通過分析管理系統研究和實現過程中存在的問題,採用B/S架構,運用.Net等Web技術等開發和實現一個功能完善的建築企業管理資訊系統。張宇棟[8]在深入研究企業安全生產管理中事故隱患排查治理及預警的主要功能需求和業務邏輯的基礎上,構建以隱患排查治理為核心的生產事故隱患排查治理及預警資訊系統的基本架構,設計了生產事故隱患排查治理及預警管理資訊系統。

在教育與科研方面,駱鵬傲等[9]將管理資訊系統應用於研究生招生與培養管理,提高了研究生管理的工作效率。宋甜[10]為提升高校學生管理的工作效率,減少各級教育管理部門和高校都在學生資訊的管理方面的人工資源、物資資源和財產資源,推動資訊化的高校學生管理實現資訊化管理平臺,實現了學生資訊管理系統設計與實現。管偉元[13]等以自主研發的科研設計管理資訊系統為基礎,採用資料庫優化等技術,總結出了適用於一般資訊管理系統的指導性方法。楊揚等[14]開發了包括立項管理、人力資源管理、科技成果管理、經費管理、考核管理及統計分析等模組的科研專案管理資訊系統,提高了科研專案管理效率。

在金融與社保方面,楊彥璐[16]設計了民生銀行信貸管理資訊系統,該系統實現辦公自動化平臺的升級,其主要思想是將信貸管理業務流程資訊化、規範化,有效的提高信貸審批的效率、提高信貸管理的質量,同時為信貸管理、信貸服務、信貸諮詢人員提供統一的辦公平臺。蘇櫻[17]開發了資金管理資訊系統平臺,實現了“管理上資訊化、介面上個性化、操作上自動化”。劉耘礽[18]對我國社保基金一體化管理資訊系統進行了研究和設計,為社保基金管理資訊化建設提供了思路和參考。劉毅新[19]開發了社會保險管理資訊系統,實現了資訊查詢、結算與財務管理以及分析預測等功能。

在其他生活領域方面,李維雅[22]為提高醫院管理資訊系統日常維護和管理能力,促進醫院工作的順利開展,歸納總結了醫院管理資訊系統的日常管理與維護的重要性,並對其日常管理與維護的主要內容和相關策略進行分析。針對我國旅遊業的資訊管理水平依然處於滯後的狀態,傳統的資訊管理方法無法滿足現階段旅遊業發展的需要,張曼玲[23]等對旅遊管理資訊系統系統的可行性、設計和實現進行了進一步設計。吳健[26]以種豬養殖業現狀、資訊管理需求等為理論基礎,分析了種豬養殖管理工藝。在種豬場生產管理階段將先進、科學的資訊、數字化技術運用其中,對種豬數字化管理資訊系統進行建構。此外,管理資訊系統已應用到智慧城市建設[27]和智慧物聯網平臺建設[28]。

在藥店和藥品管理方面,管理資訊系統的設計方案也十分成熟[29-32]。本系統在前人基礎上設計和實現藥店及藥品基礎資訊的管理、藥店和藥品評價管理等,其基礎資料即是用於給消費者推薦藥店藥品資料的直接或間接來源。

地理資訊系統(Geographic Information Science,GIS)綜合了地理學、製圖學、測量學、測地學、計算科學和遠端感測技術等諸多學科與技術而形成的一個複雜的計算管理機系統,該系統為採集、傳輸、存取和回顯現實世界中的空間資訊實現了一系列功能完善且強大的工具。Web GIS可理解為基於Web環境的GIS。

目前,國內優秀的GIS平臺有很多,商業化的如SuperMap,MapGIS等。SuperMap是北京超圖軟體股份有限公司研發的大型GIS平臺,它包括雲GIS平臺軟體、桌面GIS平臺、移動GIS開發平臺、網路客戶端GIS開發平臺、元件GIS開發平臺以及相關的空間資料生產、加工和管理工具。MapGIS是武漢中地資訊工程有限公司研發的大型基礎地理資訊系統管理平臺,該平臺結合了圖形、影象、地質、地理遙感、測繪、人工智慧、電腦科學等知識的大型智慧GIS平臺。這些GIS平臺功能強大,定位十分精確,應用範圍廣泛,並且可提供定製開發或支援二次開發。免費的Web GIS服務則更廣泛的應用於Web應用中,如百度地圖API、高德地圖API、谷歌地圖API等。

百度地圖方面,程彬等[33]利用BaiduMapAPI實現生成房源周邊地物動態的評價功能,採用PHP語言和MYSQL資料庫開發了小型GIS平臺。張欣欣[34]使用百度地圖實現駕車導航功能,選定起點與終點,可查詢出最少時間,最短距離,避開高速三種駕車方案。鄭詩嘉等[35]剖析現有O2O餐飲系統存在的不足,將百度地圖的定位功能應用於O2O餐飲系統中。孫迪等[36]則研究了百度地圖API在WebGIS中的應用方法和過程,分析了百度地圖API與WebGIS結合的優勢,實現了交通流量的查詢。姜珊等[37]認為傳統GIS平臺開發過程繁瑣、運維成本較高,因此利用百度地圖API技術開發水庫資訊顯示系統。

高德地圖方面,魯萱萱[38]設計了一個專注於發現與分享運動的APP,該APP的實現運用了高德地圖API與投放自定義POI點的演算法,方便騎行範圍內的騎友進行交流。馬超等[39]設計一款基於高德地圖的生活服務平臺,該平臺可實現對周邊醫院、超市、派出所等查詢導航功能,以及數字地圖的基本功能。李庭威等[40]通過服務端讀取rtklib傳來的位置資訊,提取出經緯度傳給客戶端,將高精度差分位置資訊顯示在高德地圖上,可實時更新測量點的位置。吳國華[41]開發了基於高德地圖 API的公交查詢系統專案,並以該專案為教學案例,教授學生。

谷歌地圖方面,吳肖等[42]使用谷歌地圖提供的可新增各種個性化功能的API進行二次開發,開發了校園電子地圖。李垠等[43]通過使用谷歌地圖API,快速、有效的將將已發生的地震相關資訊和實時地震資訊已地圖、影像的形式展示出來,為公眾提供了一個十分友好、方便的地震資訊管理平臺。霍勝春等[44]將谷歌地圖API用於系統中來解決流動機械的遠端監控,提高了港口機械的效率,實現港口的經濟效益。

本系統Web GIS採用基於百度地圖的API,因為百度地圖在興趣點(Point of Interest,POI)的展示功能上更為強大,且網頁版地圖上百度地圖API的平臺性更好。

網路文字評論挖掘,或稱意見挖掘,即是面向網路文字,分析出有用的意見資訊或知識。主要應用包括:①產品(電商商品)評論挖掘;②輿情分析等。

產品評論挖掘方面,通過分析使用者評價,可進行商品推薦或作為產品(服務)改進的參考依據。許祥軍等[45]認為挖掘網路評論能夠為產品開發提供有用的資訊,他們結合了幾個經典的文字挖掘方法包括詞頻統計、點互資訊演算法、詞頻-逆文件頻率作為特診提取的方法,並通過情感分析和情感強度分析提出了面向產品開發的評論挖掘方案。程惠華等[46]通過挖掘產品評論,並進行情感傾向性分析,得出使用者對產品的滿意度。李涵昱等[47]認為挖掘商品評論,對分析商品口碑、進行商品推薦有十分重要的價值。黃秋義等[48]運用網路爬蟲技術爬取商品評論資訊,採用語義分析和數學統計方法進行情感傾向性分析,實現了面向電商平臺的意見挖掘模型。劉紫玉等[49]研究了基於消費者評論挖掘的B2C網購物流服務因素型別和作用機制,設計了物流服務質量的作用方案,該方案對改善電商企業物流服務質量、提高競爭力能夠發揮重大作用。鄭玉桂[50]則針對電商評論,加入了句子級的細顆粒度的情感傾向性分析,不僅可以分析整篇評論的情感極性,也可以分析出評價實體的情感極性。郗亞輝[51]研究了產品評論中的特徵同義詞識別方法,選取了must-link和can-not-link兩類約束,並採用了層次聚類演算法。陳義[52]通過分析天貓商城和京東商城使用者對手機的評論發現,天貓商城的使用者更在意手機的價效比和購物體驗,而京東商城的用於則更在意手機的整體效能。

輿情分析方面,我們將其分為社會輿情分析和企業輿情分析。

社會輿情分析,通過挖掘分析突發事件、熱門話題等網路評論文字,瞭解網民所持的態度,有助於民心,也有利於輿情預警和導向,有利於國家安全和社會穩定。傅黎犁等[53]以“毒膠囊”事件為案例進行了輿情檢測和分析,探討了醫學情報機構如何在突發事件中進行輿情分析。張瑜等[54]以微博熱議話題“背景單雙號限行常態化”為例,研究了社交媒體輿情分析方法,並將主體分類模型引入輿情分析之中,以時間為脈絡進行面向主題的情感分析,為輿情分析提供了物件和時點選擇的建議。宋鐵等[55]通過監測幾件突發公共衛生事件的網路輿情,認為輿情監測系統是現代疾病控制工作的一個重要手段,是疫情監測的有效的輔助手段。李斅葳[56]採用資料探勘、關聯分析、聚類分析等技術和演算法,設計了基於敏感資訊的意見挖掘方案。姜勝洪[57]研究了網路謠言的形成、傳導與輿論導向機制,為降低網路謠言的危害,建議政府加強網路輿情分析判研,加快培養意見領袖等意見。

企業輿情分析,通過挖掘分析使用者對企業或競爭對手評論,為企業提供危機負面監測,有利於市場資料調研、品牌營銷分析、品牌形象維護等。陳元等[58]構建企業競爭情報挖掘模型,從使用者評論中獲取產品競爭情報,並應用於企業產品的分析。石進等[59]認為隨著網際網路的發展,輿情對企業影響越來越大,輿情監控系統是企業競爭情報必不可少的一部分。葉水茂[60]針對企業如何提升危機管理和輿情應對能力,如何在輿論導向中轉“危”為“機”等問題提出了應對的方案。

本系統主要通過挖掘使用者病因與藥品選擇關聯關係和挖掘對藥店、藥品的評論,分析出病因、藥店、藥品選擇的最佳組合方式,作為藥店推薦的主要參考資料之一。

目前,學者對於推薦演算法的研究主要分為以下四個方面:①基於內容的推薦演算法;②協同過濾推薦演算法;③基於知識的推薦演算法;④混合推薦演算法。

基於內容的推薦演算法,例如個性化新聞推薦、給使用者打上個性化標籤、依據使用者喜好等。劉世傑等[61]分析了網路新聞推薦的策略,研究了推薦系統模型,總結了基於個性化新聞推薦的方法。黃志強[62]提出了一種層次化標籤推薦演算法,使用餘弦相似度計算標籤的相似性,從而為物品新增精確度更高的標籤。張東偉[63]研究了面向使用者偏好的包推薦演算法,為準確區分使用者的相似度,提出了一種基於灰色關聯的相似度計算方法,為降低推薦演算法複雜度,提出了基於效用的包推薦演算法,提高了推薦結果的質量。

協同過濾推薦演算法,簡單理解即是“物以類聚、人以群分”,具有相似屬性的人或物具有相似的需求。協同過濾演算法分為兩種,一種為基於使用者的協同過濾演算法,一種為基於物品的協同過濾演算法。

基於使用者的協同過濾演算法方面,賀桂和[64]設計了一種基於使用者偏好挖掘的電子商務協同過濾推薦演算法。該演算法利用使用者偏好挖掘技術進行使用者顯性偏好知識和隱性偏好知識的挖掘分析,實現基於使用者偏好知識的最近鄰居社群構建和智慧推薦。韓亞楠等[65]通過使用者屬性偏好和專案流行度計算使用者對專案的偏好度,並將基於時間的興趣度權重函式和偏好度引入到專案相似度計算和推薦過程中,確定專案最近鄰集合,從而實現最優推薦。楊大鑫等[66]認識到傳統協同過濾演算法在處理的資料時存在資料稀疏性和擴充套件性不佳等問題,提出利用Weighted Slope One演算法緩解其資料稀疏性,利用基於最小方差的K-means演算法提高其擴充套件性。

基於物品的協同過濾演算法方面,卜旭鬆[67]面對海量的視訊資源,對視訊相似度和使用者偏好進行計算,提出了改進的基於物品協同過濾推薦演算法。吳璽煜等[68]使用知識圖譜表示學習方法通過計算物品之間的語義相似性,將物品自身的語義資訊融入協同過濾推薦。演算法彌補了協同過濾演算法沒有考慮物品本身內涵知識的缺陷,在語義層面上增強了協同過濾推薦的效果。李琳娜等[69]認為物品之間的相似關係具傳遞性,提出基於啟發式的物品相似度傳播的協同過濾推薦方法。

基於知識的推薦演算法,這種方法比較典型的是構建領域本體,或者是建立一定的規則,進行推薦。曾維明[70]通過引入語義網和本體的技術,構建基於本體的語義檢索系統,並基於電影語義檢索系統的需求,提出基於本體的個性化推薦演算法。何明等[71]為了提高個性化推薦效率和推薦質量,平衡冷門與熱門資料推薦權重,改進了基於關聯規則的Apriori演算法,設計了基於k前項頻繁項集的剪枝方法,該方案提高了頻繁項集的提取效率,擁有較高的推薦非空率、調和平均值和推薦準確率,有效地平衡了冷、熱門資料的推薦權重。

混合推薦演算法,顧名思義該方法會以加權或者串聯、並聯等方式融合以上方法。金紫嫣等[72]將標籤推薦技術與協同過濾演算法融合,提出一種新的混合式廣告推薦演算法,將廣告關鍵詞作為標籤引入到Query頁的相似性計算中,建立一種基於廣告關鍵詞的搜尋廣告興趣模型。使用Top-N策略以減少最近鄰候選集的大小,並基於預測CTR篩選出廣告推薦結果。陳平華等[73]提出一種結合關聯規則的協同過濾改進演算法,首先挖掘專案之間的強關聯規則,接著,將強關聯規則過濾和拆分;最後將拆分後的強關聯規則整合到相似度矩陣中,該演算法提高了推薦系統準確性、有效性和適用性。

本系統採用混合推薦演算法,該演算法將症狀關鍵詞、使用者評價、藥店地理位置等因素,融入協同過濾推薦演算法之中,形成網際網路+藥店推薦演算法。

    1.  研究內容

藥店及藥品資訊管理:將藥店抽象為物件,一個物件具有很多屬性,本論文需要研究使用者關心哪些屬性,我們需要採集哪些屬性。同理,藥品資訊的屬性也非常多,需要對這些屬性進行篩選。

許可權管理:一個應用系統的許可權的管理非常重要,使用者角色不同,許可權不同,對應的功能也就不同。

資料儲存技術:目前主要的關係型資料庫有MYSQL、SQL SEVER、ORACLE三種。本論文需要研究關係型資料庫是否能滿足本系統所有資料儲存要求。其中,藥品評論資料量級可能較大,選擇何種儲存方式能提高查詢和分析效率。

地圖上興趣點的標註展示與導航:藥店即為本系統地圖上的興趣點,我們需要研究如何將興趣點更友好的展示給使用者,如何從使用者所在位置導航至其選擇的藥店位置。

評論文字情感極性分析:本系統的評論文字來至使用者對藥店、藥品的評論。如何分析評論的情感極性以及如何展示給使用者是本論文需要研究的內容。

推薦演算法:當用戶輸入關鍵詞後,如何將最合適的藥店和藥品推薦給使用者是本論文需要研究的內容。

本論文各章節內容安排如下:

第1章:緒論。主要介紹本文的研究背景與意義;分析管理資訊系統、Web GIS、網路文字評論挖掘與分析、推薦演算法的研究現狀,並分別引出本文的方法的思想;介紹本文的研究內容和論文的結構安排。

第2章:相關技術與演算法。主要介紹系統的開發語言及基礎框架、資料儲存技術、地理資訊科技、評論文字情感極性分析技術、推薦演算法和許可權及安全驗證技術。

第3章:網際網路+藥店推薦系統需求分析。主要進行可行性分析、需求分析、系統組織架構分析、系統功能需求分析、使用者使用需求分析、業務流程分析。

第4章:系統設計。包括總體設計、概要設計、資料庫設計、詳細設計。

第5章:主要功能展示。包括使用者登入功能展示、普通使用者功能展示、系統管理員功能展示和藥店管理員功能展示。

第6章:結論與展望。總結了本文工作,並指出了系統存在的不足和後續的改進方向。

2相關技術與演算法

系統主要採用Java語言開發,情感極性分析模組使用了一個開源工具,是用Python語言開發的。主要基礎技術及框架、版本及說明如表2-1所示。

名稱

版本

說明

服務端技術

JDK

1.7

Java虛擬機器版本

Tomcat

8.5.6

Web伺服器中介軟體

Python

3.6.1

情感極性分析模組開發語言

Spring

4.1.6.RELEASE

輕量級的Java 開發框架

SpringMVC

4.1.6.RELEASE

Spring 框架提供了構建 Web 應用程式的全功能 MVC 模組

Mybatis

3.3.0

Java的持久層框架

Shiro

1.2.4

許可權及安全框架

druid

1.0.14

資料庫連連線池

ehcache

2.6.11

純Java的程序內快取框架

前端技術

Jquery

2.1.4

快速、簡潔的JavaScript框架

2.7.2

前端UI框架,支援H5

Layer

2.3

漂亮的彈出層框架

DTGrid

1.2.1

表格外掛

JQuery validation

1.14.0

資料合法性驗證外掛

百度地圖API

3.0

JavaScript API

資料儲存技術

MySQL

5.5

資料庫

Elasticsearch

5.0

基於Lucene的搜尋伺服器,千萬級量資料量查詢與分析可到毫秒級

本系統資料儲存主要用MySQL資料庫,使用者評論資訊資料量較大,採用分散式文件儲存技術Elasticsearch。

MySQL是一個開源的關係型資料庫管理系統,使用SQL進行資料庫管理,與Oracle、SQLServer、DB2等大型關係型資料庫,其功能相對較弱。其主要特點包括:

  • 開源,幾乎免費,使用成本和維護成本較低;
  • 可處理千萬級大型資料;
  • 跨平臺,可移植性好,支援Windows、Linux、MAC等多種作業系統;
  • 支援多種語言,為C、C++、Python、Java、Perl、PHP、Ruby等多種程式語言提供了API;
  • 支援SQL語法規範。

MySQL應用十分廣泛,大多數網際網路公司資料庫都是用的MySQL或者有用MySQL,如淘寶、京東、騰訊、百度等,特別是採用PHP開發的應用幾乎都是用MySQL。

Elasticsearch簡稱ES,它基於Lucene,是一種開源的實時分散式搜尋和分析引擎,可提供資料儲存服務、搜尋服務和實時資料分析服務。其主要特點是:

  • 它是分散式的文件儲存引擎,分也是布式的搜尋引擎和分析引擎;
  • 可以作為一個大型分散式叢集技術,處理PB級資料,服務大型應用系統;也可以執行在單機上,服務中小型應用;
  • 對使用者而言,是開箱即用的,非常簡單,作為中小型的應用,直接3分鐘部署一下ES,就可以作為生產環境的系統來使用了,資料量不大,操作不是太複雜。

主要應用場景有:

  • 維基百科,實現了全文檢索,高亮檢索,搜尋推薦;
  • 資料分析,如使用者行為日誌(點選,瀏覽,收藏,評論)+社交網路資料(對某某新聞的相關看法),分析每篇新聞的公眾反饋(好,壞,熱門,垃圾,鄙視,崇拜);
  • 日誌資料分析,logstash採集日誌,ES進行復雜的資料分析(ELK技術,elasticsearch+logstash+kibana);
  • BI系統,商業智慧,ES執行資料分析和挖掘,Kibana進行資料視覺化;
  • 電商網站,檢索商品;
  • 商品價格監控網站,使用者設定某商品的價格閾值,當低於該閾值的時候,傳送通知訊息給使用者;
  • GitHub(開原始碼管理),搜尋上千億行程式碼。

本系統屬於ES的簡單應用,搭建單節點的ES伺服器,用於儲存使用者的行為和對藥店、藥品的評論,進行分析,並提供查詢檢索功能,展示給使用者。

百度地圖API是一套為開發者免費提供的基於百度地圖的應用程式介面,包括JavaScript、IOS、Android、靜態地圖、Web服務等多種版本,提供基本地圖、位置搜尋、周邊搜尋、公交駕車導航、定位服務、地理編碼及逆地理編碼等豐富功能。

本系統採用百度地圖JavaScript API,它是一套由JavaScript語言編寫的應用程式介面,可幫助您在網站中構建功能豐富、互動性強的地圖應用,支援PC端和移動端基於瀏覽器的地圖應用開發,且支援HTML5特性的地圖開發。

百度地圖快速開發步驟如下:

  1. 申請百度賬號和ak;
  2. 根據HTML標準,建立一份基於HTML5的頁面,使用最新的符合HTML5規範的文件宣告

<!DOCTYPE html>

  1. 新增一個meta標籤,以便頁面更好的在移動平臺上展示

<meta name="viewport" content="initial-scale=1.0,

user-scalable=no" />

  1. 設定容器大小,使地圖充滿整個瀏覽器視窗

<style type="text/css">  

    html{height:100%}    

    body{height:100%;margin:0px;padding:0px}    

#container{height:100%}    

</style>

  1. 引用百度地圖API檔案

<script type="text/javascript"

src="http://api.map.baidu.com/api?v=3.0&ak=您的金鑰">

</script>

  1. 建立一個div元素作為百度地圖容器元素

<div id="container"></div>

  1. 通過new操作符可以建立一個地圖例項,引數可以是元素id也可以是元素物件

var map = new BMap.Map("container");

  1. 設定中心點座標

//其中117.175215表示經度,39.109359表示緯度。(為南開大學座標)

var point = new BMap.Point(117.175215,39.109359);

  1. 地圖初始化,同時設定地圖展示級別

map.centerAndZoom(point, 15);  

至此,我們就快速建立了一張以南開大學為中心的地圖,如圖2-1所示。

本系統後續的地圖開發,均基於此地圖。

2.4 評論文字情感極性分析技術

本系統採用一款開源、免費的情感分析工具[74],進行使用者對藥店、藥品評論的情感極性分析。該工具採用Python語言開發,實現了使用一種基本演算法來預測文章的情感。經過測試,基本滿足對本系統情感極性分析的需求,且準確度可以信賴。其具體功能如下:

  • 基於python-jieba中文分詞包,對文章和句子進行分詞;
  • 使用大連理工大學情感分析詞庫,對文章分詞結果進行詞語的情感預測;
  • 使用bsa_agorithm作為基本情感極性分析演算法,基於詞語的情感預測來聚合整條評論的情感傾向和情感強度。

bsa_agorithm演算法核心程式碼片段如下:

#!/usr/bin/python

#encoding=utf-8

from algorithm import Algorithm

class BsaAlgorithm(Algorithm):

   //載入情感詞典,我們使用大連理工大學情感分析詞庫

    def __init__(self, negative_word_file):

        negative_word_file = file(negative_word_file, "r")

        lines = negative_word_file.readlines()

        self.negative_word_set = set()

        for line in lines:

            line = line.encode("UTF-8").strip()

            if line.isspace():

                continue

            self.negative_word_set.add(line)

        negative_word_file.close()

//計算情感值

    def cal_semantic_value(self, article_semantic_result):

        segment_value_list = list()

        for seg_result in article_semantic_result:

            seg_value = list()

            for setence_result in seg_result:

               setence_value = 0

               word_counter = 0

               for word_result in setence_result:

                 if word_result.has_key("meaning") is False:

                        word_counter += 1

                        continue

                  value=int(word_result["semantic_strength"])

                    # TODO check the polarity use the self

    # negative word set,

    # and change the polarity

                    last_word_pos = word_counter - 1

                    is_reverted = False

                    if last_word_pos >= 0:

                        last_word_result =

setence_result[last_word_pos]

                      last_word = last_word_result["word"]

                    if last_word in self.negative_word_set:

                            is_reverted = True

                  if word_result["semantic_polagiry"] == "2":

                        value = value * (-1)

                    if is_reverted:

                        value = value * (-1)

                    setence_value += value

                    word_counter += 1

                seg_value.append(setence_value)

            segment_value_list.append(seg_value)

        segment_value = list()

        for item in segment_value_list:

            sum = 0

            counter = 0

            for value in item:

                sum += value

                counter += 1

            if counter == 0:

                average = 0

            else:

                average = sum /counter

            segment_value.append(average)

        article_sum = 0

        seg_counter = 0

        for seg in segment_value:

            article_sum += seg

            seg_counter += 1

        if seg_counter == 0:

            article_average = 0

        else:

            article_average = float(article_sum)/seg_counter

        # TODO add more result

        return article_average

評論情感極性分析方法呼叫string_semantic_analysis方法:

# 呼叫string_semantic_analysis方法

@staticmethod

def string_semantic_analysis(input_string,library,algorithm):

//分詞

segment_list=ArticleAnalysis.get_segment_list(input_string)

segment_partition_list=ArticleAnalysis.partition(segment_list)

//計算情感極性值

article_result = ArticleAnalysis.semantic_analysis(segment_partition_list, library, algorithm)

return article_result

分析返回的結果為json字串,格式如下:

{

   'score' : 1;

'score_comment' :

'正:正向情感;負:負向情感。情感值越大,情感越強。';

    'details' : [

                 {'meaning' : '讚美', 'strength' : 5},

                 {'meaning' : '佩服', 'strength' : 3}

                 ]

 }

返回值欄位說明:

  • score欄位,是整體的情感得分;
  • score_comment欄位,是對score含義的註釋,正:正向情感;負:負向情感。情感值越大,情感越強;
  • details欄位,詳細的介紹了文字體現出的每個子情感分類的情感度,meaning欄位表示子分類,strength表示這個子分類的情感度。

本系統只處理score欄位,處理整體的情感得分,獲取整體情感極性及極性強度,暫不處理details欄位,不處理子情感分類。

採用基於地理位置和評價的協同過濾推薦演算法,實現藥品和藥店的推薦。主要步驟如下:

步驟1:計算基於協同過於的推薦值,採用詞頻-逆檔案頻率(Term Frequency-Inverse Document Frequency, TD-IDF)演算法,藥品、藥店的關鍵片語和使用者輸入的關鍵片語為維度,建立向量空間模型,計算使用者維度與各藥店、藥品維度的餘弦相似度,該值即作為基於協同過於的推薦值,的取值範圍為[-1,1];

步驟2:計算基於地理位置的推薦值,計算方法如公式(1)所示。其中x表示使用者位置與藥店位置之間的距離,a表示閾值距離,當x<a時推薦值為正,當x>a時推薦值為負,本系統a值取5,即閾值距離為5公里。的取值範圍為[-1,1]。

步驟3:計算基於使用者評論的推薦值,計算方法如公式(2)所示。其中x為情感極性計算值,按照第2.4小結情感極性演算法計算所得,b為極性強度分為幾個等級,本系統取b=5。的取值範圍為[-1,1]。

步驟4:計算最終推薦值y,計算方法如公式(3)所示。y的取值範圍為[-3,3]。最終推薦值y越大,推薦越靠前;反之越靠後。

另附計算的核心程式碼如下:

//宣告必要的模型變數

private static int len = 0; //總文件數

private static ArrayList< String[] > doc

= new ArrayList<String[]>(); //文件內容

private static HashMap<String, Float> []tdidf;   //TDIDF值

private static int leng[]; //文件詞數

private static float film[]; //詞向量的模

//獲取所有文件,即獲取使用者查詢關鍵詞和所有藥品、藥店關鍵詞記錄

doc=getAllDoc();

//計算TDIDF值

public static void calTdidf(){

long a = System.currentTimeMillis();

HashMap<String, Float> []tmp_tdidf = new HashMap[len];

int size;

int n = 0;

String str;

HashMap<String,Integer> idf = new HashMap<String, Integer>();

for(String d[]:doc){

size = d.length;

leng[n] = size; //文件詞數

HashMap<String, Float> td = new HashMap<String, Float>();

for(int i = 0; i < size; ++i){

str = d[i];

if(!td.containsKey(str)){

td.put(str, (float) 1.0);

if(idf.containsKey(str))

idf.put(str, idf.get(str)+1);

else

idf.put(str, (int) 1);

}

else

td.put(str, td.get(str)+1);

}