1. 引言
随着手机、电子阅读器等电子阅读终端设备的发展与普及,电子阅读以其信息量大、使用方便、经济实惠、节能环保、互动性强等优点,融合视频、语音、大数据智能分析与搜索等全面且强大的功能,逐渐深入大众的生活中 [1]。传统纸质阅读方式在电子科技广泛普及的影响下,发生了石破天惊的变化,电子书籍阅读方式越来越大众化。中国新闻出版研究院全国国民阅读调查课题组,所做的第十五次全国国民阅读调查显示,有35.1%的国民倾向于“手机阅读”,我国国民电子阅读方式的接触率正大幅度增长 [2]。
19世纪的美国著名作家梭罗说:“经典是人类思想最崇高的记录”。经典之所以是经典,就在于其主题的深刻、思辨的高度和敏锐的洞见,反复阅读经典能让人思维敏锐、视野宽广、情操高尚,对于人格的完善和志趣的培养,也是普通读物难以比肩的。同时也能在阅读中培养读者的爱国情怀 [3]。
《义务教育语文课程标准》指出:“7~9年级的学生应学会制订阅读计划,广泛阅读各种类型的读物,课外阅读总数不少于260万字,每学年阅读两三部名著”。同时,名著的教学现状却不尽如人意,教师只勾画出课本上部分的名著片段的主要情节和思想感情等基本信息,然后让学生死记硬背,导致学生对名著的理解支离破碎 [4]。另外文学名著虽是经典的传承,但其本身晦涩的词句和与当今社会脱节的历史背景成为阅读经典之路的绊脚石,基于电子阅读的普及和调查研究结果——有近五成的学生愿意使用手机作为课堂学习的辅助 [5],我们无法忽视名著助读系统的必要性。
本文基于Android系统,利用Java开发语言,实现了一个包含名著阅读、助读内容精准推荐、阅读感受分享、问答、读者画像等功能的手机应用,系统数据利用MySql存储在服务器端,利用WebService为移动端提供数据支撑,本文不包含服务器端的技术实现和数据库系统的设计,主要阐述移动端的设计与实现。
系统的助读资源有两个来源,一是由教师搜集的历史名家对名著所做的批注,属于已有的经典助读资源,在系统中被直接定义为“专家批注”,会在系统中精准地推荐给读者;第二类为读者的阅读感受、笔记,读者分享出来以后,经过教师的筛选、推荐转化为“专家批注”。系统中的助读资源会随着应用的推广、时间的累计,不断丰富,数量也会越来越庞大,此时,必须通过后台对数据的分析、过滤,实现助读资源的精准推荐,换句话说,精准推荐同时也用来应对信息过载,精准推送的意义和价值取决于信息过载的程度,助读精准推送的核心是一套推荐机制 [6],根据读者的行为数据分析,为用户推荐符合其阅读需求的助读内容。
2. 关键技术
系统移动端利用Android Studio工具进行开发,架构设计采用MVP (Model View Presenter)模式,将视图逻辑和业务逻辑分离,由于业务逻辑比较复杂,在助读内容精准匹配和数据动态加载、缓存功能上采用多线程技术配合网络请求进行实现。
2.1. MVP架构
MVP架构的核心是将业务逻辑从Activity (或者Fragment)中分离处理,Activity中只处理界面逻辑(显示和交互),将业务逻辑(包括网络请求、数据库的读写等)放入Presenter中,如图1所示,View层对应程序中的界面,Presenter实现界面和模型层的连接,起到桥梁的作用。
2.2. 多线程技术
由于android系统对界面的更新操作全部在主线程中完成,为了避免出现界面卡顿的现象,所有的耗时操作全部要在子线程中完成,耗时操作完成后,再通知主线程进行界面更新,线程间的灵活切换显得异常重要。本文采用ReactiveX实现异步操作,它提供了一个清晰、准确处理异步问题和事件的方法 [7],很好的避免了由于耗时操作回调而产生的多层嵌套问题。
在Android Studio中应用ReactiveX,导入RxJava开发包即可,其处理思想称之为观察者模式,两个主要逻辑执行者为Observable和Observer,即被观察者和观察者,被观察者处理耗时操作,处理完成或者处理过程中出现错误,都会发送给观察者消息,观察者根据处理结果,进行其余操作(包括页面更新等),被观察者和观察者可以通过接口指定其执行线程,一般被观察者所处理的操作在非主线程中完成,观察者如果在收到处理结果后要做页面更新,则指定在主线程中实现。
2.3. 数据缓存和动态加载技术
系统数据主要包括名著原文、助读信息、问答列表、用户信息等,其中对名著原文进行移动端数据缓存,其余数据全部通过网络请求实时加载,为了方便对缓存数据进行管理,在Android采用SQLite对数据进行存储。SQLite是一款轻量型的关系型数据库,android系统内置了该数据库,它的运算速度非常快,占用资源很少,非常适合本地持久化存储 [8]。为了实现对SQLite的CRUD,本文采用了greenDAO,它是一个开源的Android ORM (对象/关系映射,如图2所示)开发库,使用简单的面向对象的API来存储,更新,删除和查询数据,可以大大节省数据库相关内容的开发时间 [9]。
阅读名著时,对本地数据库原文进行查询操作,以确认是否通过网络请求按章节获取正文,如果从网络获取,成功后即存入本地SQLite数据库,在以后的阅读中直接从本地加载原文,其余数据全部通过网络请求实时加载,网络请求是耗时操作需用到前文中提到的多线程技术,同时为了实现网络请求的功能,系统采用了Retrofit开发库,它是对okhttp的进一步封装,功能强大,支持同步和异步、多种数据的解析 [10],本系统采用JSON数据格式。

Figure 2. Object relational mapping model diagram
图2. 对象关系映射模型图
JSON是一种轻量化的数据交换格式,比XML更轻量、比二进制更易读,调试也更加方便。本文采用Java的Gson类库,对数据进行序列化和反序列化,以实现类对象和JSON数据之间的转化。
2.4. 助读精准匹配技术
系统实现的精准匹配包含两层含义,首先是个性化推荐,即将用户的历史行为数据通过数学建模,来挖掘用户的兴趣和偏好,以此将用户可能感兴趣的信息筛选出来 [11],具体到本系统中是根据用户的阅读习惯、阅读感受分享等行为分析,为用户推荐相关的助读信息,包括名著历史背景、名家赏析等。其次,是将通过搜集的助读信息分别按名著内容进行匹配,又分为三类:热区批注、章内专题、助读频道。
热区批注是针对名著具体的字、词、句的助读信息,在阅读正文时,通过位置计算,将其以虚线的形式展现在阅读页面上。章内专题是针对名著某一章节内容的助读信息,用户可以在阅读过程中,通过点击相应按钮实时获取。助读频道内容比较丰富,是针对具体某一本名著的助读信息,包括视频、音频等比较具象化的助读信息,主要通过网页的形式在APP内呈现。
3. 系统功能设计与实现
本系统主要分为用户管理、阅读模块、助读模块、问答模块四个模块,整体功能模块图(如图3所示)。

Figure 3. Function module diagram of the whole system
图3. 系统整体功能模块图
3.1. 助读模块
助读模块主要分为热区批注、专题文章、助读频道三个功能板块。
用户在阅读文章时,可以看到部分文字拥有批注。热区批注分为专家批注,和用户批注,不同类别批注会有不同的显示(如图4所示),专家批注大都来源于搜集的史料,是一些名家对这段内容的赏析;用户批注来源于广大用户,是读者在阅读时所产生的一些见解或想法。用户批注可供分享,交互呈现在批注标签页下,用户可以对这些批注进行收藏、点赞与评论。专家对用户批注拥有置顶、分类和推荐的权力。如果用户批注内容不错,经专家推荐后可成为专家批注(如图5所示)。
专题文章是根据读者所阅读的章节推送一些相关的文章,这些文章可以是章节内容的延伸与扩展,历史背景的介绍,专家的赏析等内容。
助读频道内有许多帮助读者阅读和理解内容的模块,这里面有文章内容的注释、译文与分析,还有人物介绍、人物关系、图画、阅读方法与指导、音视频等助读信息(如图6所示)。
3.2. 阅读系统
阅读系统主要有书库和阅读两个主要功能(如图7所示)。
书库是通过网络加载服务器端已经编辑完成的15本中外名著的书籍信息生成。书架页面显示所有名著书籍,阅读请求发出后,将先判断该章节内容是否已缓存,没有本地缓存需要进行网络请求获取正文(如图8所示)。
阅读界面除了正文外,在拥有批注的句子下方会有虚线提示。图书的目录是由一个自定义的RecyclerView控件构成,上方有搜索框,可以查找全文内容。阅读界面还支持字体设置、背景颜色设置、亮度设置、音量键翻页等功能设置(如图9所示)。

Figure 9. Library catalogue & other functions
图9. 图书目录和其他功能
3.3. 问答模块
问答模块主要由问题列表和问题详情页组成(如图10所示)。
读者在阅读中遇见的任何问题都可在问答系统中进行提问,提出的问题也会被其他用户看到进行回答。问答模块中所有的问题与回答都存储在服务器中,使用时动态加载。用户在提出问题后,可以邀请其它用户或者专家教授来进行回答。问题列表中质量较高的问题可以被置顶,质量评估主要依据用户对用户的参与度,回答可以被用户点赞,答案将按点赞数量进行排序。用户也能进行对问题及回答的收藏和评论(如图11所示)。
4. 结论
本文基于Android系统,利用多线程技术、数据缓存与动态加载技术、助读精准匹配技术,设计实现了一款界面友好、功能丰富的名著助读APP,为人们提供一个名著阅读、分享阅读体验的平台,使名著阅读不再是一件枯燥、晦涩的事情。希望下一步能够利用机器学习的相关方法,不断完善数据分析过程,为用户提供更科学、智能的助读推荐。
基金项目
全国教育信息技术研究2018年度重点课题“实现精准推送、即插批注和在线问答功能的名著助读APP的研发与应用”(181120005)。