一种电子书阅读进度计算方法及系统与流程

文档序号:23350393发布日期:2020-12-18 16:55阅读:389来源:国知局
一种电子书阅读进度计算方法及系统与流程

本发明涉及电子书技术领域,并且更具体地,涉及一种电子书阅读进度的记录和计算方法及装置。



背景技术:

电子书的阅读进度一直都是电子书领域比较难解决的问题,电子书本质上并没有真正的页码,因设备型号不同,字体、字号、行间距、页边距的不同整本电子书的总页码都是不同的,这也就导致了电子书的阅读进度很难被记录和计算的原因。

目前比较常见的阅读进度的计算方法是根据页码来计算的,等到电子书的总页码计算出来之后,在计算出当前阅读位置的页码,用当前位置的页码除以总页码来计算当前位置的阅读进度百分比,这种计算方式有几个缺点,第一个缺点是整本书的总页码想要计算出来必须要等到整本书全部下载完毕才能就算出来。第二个缺点是因为阅读进度的计算是根据当前位置的页码除以总页码来计算的,这就有一个问题是如果用户直接通过目录跳转到书籍的末尾,或者拖拽进度条跳到书籍的中间位置等,会导致阅读进度瞬间增大到很大或者变成100%,没法真实的记录用户阅读本书的真实已读百分比,而仅仅展示的是当前阅读位置的百分比。

诸如专利cn201811002027.9提出的基于电子书的阅读状态信息的确定方法,试图解决现有技术的上述问题,其提出的方案是:确定电子书已读页面中包含的起止类字符,将所述起止类字符与电子书的原文档进行匹配,根据匹配结果确定所述已读页面所对应的已读字符数,进而根据所述已读页面所对应的已读字符数以及所述电子书的总字符数确定所述电子书的阅读进度信息。这种方法也存在问题:这种方法需要根据阅读页面的字数来决定阅读进度,并且需要根据预设的去重规则和预设阈值来判断是否要标记,如果书籍遇到大的更新或者变动,原来的去重机制将难以继续适用,并且针对不同机型、不同字号、不同字体,页面的起止字符不同,都会影响到标记,使得该方案难以灵活适用。



技术实现要素:

为了解决现有技术的上述缺点,提出本发明,以使得阅读进度的计算不再依赖于页码或字符,即使书籍没有完全下载下来,用户的阅读进度依然可以被正确记录和计算;即使在阅读的过程中跳转目录或者拖拽进度条,用户的阅读进度也不会因此而瞬间增大;即使用户使用不同机型、不同字号、不同字体,也能真实、准确的记录并计算用户阅读全书的百分比。

根据本发明的一个方面,本发明提供了一种电子书阅读进度计算方法,所述方法包括:将所述电子书按字数拆分为多组数据,所拆分的多组数据中的每组数据至少包含分组编号、章节信息、起始位置数据以及结束位置数据;在用户阅读过程中,获取用户当前阅读页面的起始位置数据和结束位置数据;将当前阅读页面的起始位置数据、结束位置数据与所拆分的多组数据的起始位置数据、结束位置数据进行对比,判断二者是否存在重叠;如果判断当前阅读页面的起始位置数据、结束位置数据与所拆分的一组或多组数据的起始位置数据、结束位置数据存在重叠,则标记该一组或多组数据为已读数据;以及根据标记为已读数据的组的个数与总的拆分数据组的个数,计算确定电子书的阅读进度。

作为优选,在用户阅读过程中,检测用户是否存在预设的触发操作,并根据检测结果启动阅读进度的记录和计算步骤。

作为优选,在标记该一组或多组数据为已读数据后,还获取并存储该组数据的分组编号。

作为优选,在判断当前阅读页面的起始位置数据、结束位置数据与所拆分的一组或多组数据的起始位置数据、结束位置数据存在重叠后,进一步判断确定该一组或多组数据是否被标记过,并且,仅在所述一组或多组数据未被标记过时,才对其进行标记。

作为优选,将所述电子书按字数拆分为多组数据时,每组数据的字数相等。

作为优选,在每次关闭电子书时将标记为已读数据的分组编号传输至服务器,以及,在每次打开电子书时从服务器获取标记为已读数据的分组编号。

作为优选,在每次关闭电子书时还将本地计算的阅读进度传输至服务器;以及,在每次打开电子书时还从服务器获取阅读进度数据,并将本地缓存的阅读进度数据与从服务器获取的阅读进度数据合并,生成更新的阅读进度数据。

根据本发明的另一方面,本发明提供了一种电子书阅读进度计算系统,包括:电子书拆分装置,将所述电子书按字数拆分为多组数据,所拆分的多组数据中的每组数据至少包含分组编号、章节信息、起始位置数据以及结束位置数据;阅读页面数据获取装置,在用户阅读过程中,获取用户当前阅读页面的起始位置数据和结束位置数据;阅读页面数据分析装置,将当前阅读页面的起始位置数据、结束位置数据与所拆分的多组数据的起始位置数据、结束位置数据进行对比,判断二者是否存在重叠;标记装置,如果判断当前阅读页面的起始位置数据、结束位置数据与所拆分的一组或多组数据的起始位置数据、结束位置数据存在重叠,则标记该一组或多组数据为已读数据;以及阅读进度计算装置,根据标记为已读数据的组的个数与总的拆分数据组的个数,计算确定电子书的阅读进度。

作为优选,所述阅读页面数据分析装置还包括触发启动装置,用于在用户阅读过程中,检测用户是否存在预设的触发操作,并根据检测结果启动阅读进度的记录和计算步骤。

作为优选,还包括标记数据信息存储装置,用于在标记该一组或多组数据为已读数据后,获取并存储该组数据的分组编号。

作为优选,还包括已读数据去重装置,在判断当前阅读页面的起始位置数据、结束位置数据与所拆分的一组或多组数据的起始位置数据、结束位置数据存在重叠后,所述已读数据去重装置进一步判断确定该一组或多组数据是否被标记过,以确保仅在所述一组或多组数据未被标记过时,才对其进行标记。

作为优选,将所述电子书按字数拆分为多组数据时,每组数据的字数相等。

作为优选,还包括上传装置,用于在每次关闭电子书时将标记为已读数据的分组编号传输至服务器;以及下载装置,用于在每次打开电子书时从服务器获取标记为已读数据的分组编号。

作为优选,所述上传装置在每次关闭电子书时还将本地计算的阅读进度传输至服务器;所述下载装置在每次打开电子书时还从服务器获取阅读进度数据,并将本地缓存的阅读进度数据与从服务器获取的阅读进度数据合并,生成更新的阅读进度数据。

根据本发明的另一方面,还提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行以下操作:将所述电子书按字数拆分为多组数据,所拆分的多组数据中的每组数据至少包含分组编号、章节信息、起始位置数据以及结束位置数据;在用户阅读过程中,获取用户当前阅读页面的起始位置数据和结束位置数据;将当前阅读页面的起始位置数据、结束位置数据与所拆分的多组数据的起始位置数据、结束位置数据进行对比,判断二者是否存在重叠;如果判断当前阅读页面的起始位置数据、结束位置数据与所拆分的一组或多组数据的起始位置数据、结束位置数据存在重叠,则标记该一组或多组数据为已读数据;以及根据标记为已读数据的组的个数与总的拆分数据组的个数,计算确定电子书的阅读进度。

作为优选,所述可执行指令进一步使所述处理器执行以下操作:在用户阅读过程中,检测用户是否存在预设的触发操作,并根据检测结果启动阅读进度的记录和计算步骤。

作为优选,所述可执行指令进一步使所述处理器执行以下操作:在标记该一组或多组数据为已读数据后,还获取并存储该组数据的分组编号。

作为优选,所述可执行指令进一步使所述处理器执行以下操作:在判断当前阅读页面的起始位置数据、结束位置数据与所拆分的一组或多组数据的起始位置数据、结束位置数据存在重叠后,进一步判断确定该一组或多组数据是否被标记过,并且,仅在所述一组或多组数据未被标记过时,才对其进行标记。

作为优选,将所述电子书按字数拆分为多组数据时,每组数据的字数相等。

作为优选,所述可执行指令进一步使所述处理器执行以下操作:在每次关闭电子书时将标记为已读数据的分组编号传输至服务器,以及,在每次打开电子书时从服务器获取标记为已读数据的分组编号。

作为优选,所述可执行指令进一步使所述处理器执行以下操作:在每次关闭电子书时还将本地计算的阅读进度传输至服务器;以及,在每次打开电子书时还从服务器获取阅读进度数据,并将本地缓存的阅读进度数据与从服务器获取的阅读进度数据合并,生成更新的阅读进度数据。

通过本发明提供的方案,电子书的阅读进度的计算不再依赖于页码,即使书籍没有完全下载下来,用户的阅读进度依然可以被正确记录和计算;再者,即使在阅读的过程中跳转目录或者拖拽进度条,用户的阅读进度也不会因此而瞬间增大,从而能够真实、客观地记录用户阅读全书的百分比。

附图说明

通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:

图1所示是根据本发明一实施例的电子书阅读进度的记录过程;

图2所示是根据本发明一实施例的打开电子书的过程;

图3所示是根据本发明一实施例的电子书阅读进度计算系统。

具体实施方式

现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。

除非另有说明,此处使用的术语(包括科技术语)对所述技术领域的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。

作为示例性实施方式,本发明提供的电子书阅读进度计算方法,如图1所示。其中,对电子书阅读进度进行标记主要分为三个步骤:

步骤一,对电子书epub文件的拆分。该步骤通常在电子书的书籍制作阶段完成,在该步骤中,将电子书的内容按照字数进行拆分,例如,将电子书按照每1000个字为一份拆分成若干份,每一份作为一组数据,从而将一本电子书的数据拆分形成多组数据,所拆分的多组数据中的每组数据至少包含分组编号、章节id信息、起始位置数据以及结束位置数据。

例如,拆分数据可为如下形式:

如上所示,data表示一个数组,它里面的每一份数据也是一个数组,每一份数据都代表拆分出来的一个份数,data里面的数据总和就是整本书一共拆分出来的总份数。其中,sectionid代表份数id,也可称为分组编号,设一本书总共被拆分为n组拆分数据,即总的份数为n,分组编号表示为1~n。chapterid代表该分组数据包括的章节信息,例如章节id;startoffset代表该分组数据的起始位置;endoffset代表该分组数据的结束位置。

在本实施例中,作为示例,确定的拆分规则为每一份数据(或者说,每一组分组数据)包含电子书1000个字的内容,由于有些章节的内容比较少,可能不足1000个字,则一份数据所包含的内容可能同时跨多个章节,所以每一份数据是一个数组。例如第一份数据的份数id(sectionid)是1,该份数据是从chapterid1的起始位置开始,到chapterid2的endoffset为500的位置结束;第二份数据的份数id(sectionid)是2,该份数据是从chapterid3的起始位置开始,到chapterid3的endoffset为1000的位置结束。

按上述规则对电子书的数据进行拆分完成之后,会把已经拆分出来的数据写入文件中,然后将这个文件上传到云端存储,每一个拆分文件都是相对于一本书而言的,也就是每一本书都会有这样一个拆分文件存储在云端。

步骤二、电子书阅读进度的记录

在用户阅读电子书的过程中,比较常见的操作是翻页阅读,目录跳转和进度拖拽,在产生以上行为时开始记录阅读进度。

首先,在电子书的页面已经显示出来的时候,获取到当前阅读页面的起始位置(currentstartoffset)和结束位置(currentendoffset),这两个位置是相对于当前章节而言的。在获取到当前阅读页面的起始位置和结束位置以后,将其与步骤一中获取到的拆分数据的起始位置数据、结束位置数据进行对比,并判断二者是否存在重叠。如果发现当前阅读页面的起始位置数据、结束位置数据与步骤一中所拆分的一组或多组数据的起始位置数据、结束位置数据之间存在重叠,则标记该重叠的拆分数据为已读数据,将其分组编号记录在内存中,用一个数组保存起来,这样不断翻页,不断记录新的拆分数据为已读,并保存其分组编号。

图1具体描述了上述电子书阅读进度的记录过程,如图所示,包括如下步骤:

步骤101、打开电子书,下载步骤一中已经拆分好的拆分数据;

步骤102、用户在阅读电子书的过程中正常翻页,在检测到用户存在预设的触发操作的情况下(例如,用户翻页操作使当前阅读页面已经正常显示出来以后),启动下面的阅读进度记录步骤;

步骤103、获取当前阅读页面的章节id(currentchapterid)、当前阅读页面的起始位置数据(currentstartoffset)和当前阅读页面的结束位置数据(currentendoffset);

步骤104、将当前阅读页面的章节id(currentchapterid)与步骤一中获取的分组数据的章节id(chapterid)做匹配,这个步骤中一定会匹配到一个或者多个与当前阅读页面的章节id(currentchapterid)相等的分组数据的章节id(chapterid),即可获得一个或者多个的分组数据作为匹配结果;

步骤105、用步骤103中获取到的当前阅读页面的起始位置数据(currentstartoffset)和当前阅读页面的结束位置数据(currentendoffset)与步骤104中获取到的一个或多个分组数据中的起始位置数据(startoffset)和结束位置数据(endoffset)分别做对比,判断偏移位置是否存在重叠,只要发现偏移位置有重叠,即执行步骤106;

步骤106、确定偏移位置有重叠的一个或多个分组数据的分组编号(sectionid),并确定所述分组数据的分组编号(sectionid)是否已经被标记为已读过,其中在内存中设置并保存一个记录已读标记的数组(readedarray),如果这个分组编号(sectionid)已经在数组(readedarray)中,则说明已经被标记过,无需处理,如果这个分组编号(sectienid)没有在数组(readedarray)中,则说明没有被标记过,执行步骤107;

步骤107、将步骤106中确定偏移位置有重叠的分组数据标记为已读,并将其分组编号(sectionid)添加到记录已读标记的数组(readedarray)中。

以下作为示例,用以说明阅读进度的记录过程:

1.假设一本书的拆分数据如第一步中的拆分数据data,在假如当前阅读页面的起始位置(currentstartoffse)为100,当前阅读页面的结束位置(currentendoffset)为600,当前阅读页面的章节信息(chapterid)为chapterid3,以及假设这本书还没有任何一个已经阅读过的标记;

2.经过匹配,发现在拆分的数据中,第二份和第三份数据的章节信息(chapterid)都为chapterud3;用第二份数据和第三份数据中的起始位置数据(startoffset)和结束位置数据(endoffset)分别和假设1中当前阅读页面的起始位置(currentstartoffset)和当前阅读页面的结束位置(currentendoffset)做对比;

3.发现第二份数据中的起始位置数据(startoffset)和结束位置数据(endoffset)和假设1中当前阅读页面的起始位置(currentstartoffset)和当前阅读页面的结束位置(currentendoffset)有交集,则标记第二份数据为已读,将第二份数据中的分组编号(sectionid)为2的信息记录在一个数组中;

4.以此类推,不断的去做比较,只要发现有重叠的则记录新的分组编号(sectionid)为已读。

步骤三、电子书阅读进度的计算

在步骤二完成以后,记录已读标记的数组(readedarray)中记录的是已经被标记为已读的数据份数n1,将数组(readedarray)中记录的份数n1除以步骤一中对整本电子书进行拆分得到的总的数据份数n,即可计算得到整本书的已读进度。

需要说明的是,前文所提供的示例是按照相等的字数的规则进行拆分,例如每一份数据(或者说,每一组分组数据)包含电子书1000个字的内容,在此情形下,直接以已读的数据份数n1/总的数据份数n,即可计算得到阅读进度。作为另一种替代性的实施方案,也可按照不同字数设计拆分规则,并根据分组数据包含的字数差别设置权重,在此情形下,计算阅读进度时需增加权重的影响。

需要注意的是,每次被标记为已读的份数都保存在数组(readedarray)中,这个数组中的数据是需要上报给云端来存储的,为了下次再打开电子书时继续标记使用,所以每次打开电子书都需要提前从服务器拉取这本书已经阅读过的份数数据存储到数组(readedarray)中,然后在阅读的过程中,不断的将没有标记过的份数添加到数组(readedarray)中。

每次从服务端获取到的阅读进度数据如下所示:

前面data里面的分组编号(sectionid)就是步骤107中加入到数组(readedarray)中的数据,然后在关闭电子书时上报给云端的。

步骤四、阅读进度的上报

前面步骤三中已经提到,数组(readedarray)中的数据是这本书已经被阅读过的份数明细数据,所有被标记为已读的份数都在这个数组中记录,这个数组中的明细数据最终是要上报给云端来保存的,这样下次重新打开这本电子书时才能知道用户上次的阅读进度,以及上次哪些位置是已经读过的。

阅读进度上报的时机是在每次关闭电子书时一定将数组(readedarray)中的数据上报给云端。每次上报阅读进度的数据中除了包含数组(readedarray)中的明细数据,还要把阅读进度在本地算好,一起上报给云端存储。

需要注意的是,如果在打开书时没有网络,用户无法获得之前的阅读数据会导致后面的进度无法正确记录。为了确保在没有网络的时候也可以正常记录进度,每次上报给云端的数据均在本地存储一份同样的缓存数据。这样在下次打开电子书时,比对本地数据和云端的数据,将本地有而云端没有的数据取出来存入数组(readedarray),等待下次一起上报给云端。

图2具体描述了用户阅读时打开电子书的全过程,具体步骤如下:

步骤201、打开电子书;

步骤202、下载步骤一中已经拆分好的拆分数据;

步骤203、从云端拉取阅读进度的明细数据;

步骤204、将本地缓存的数据与云端拉取到的数据做一个合并;

步骤205、生成一份最终的已经阅读的进度明细数据,将数据存储到数组(readedarray)中;

步骤206、等到书籍打开以后获取到当前阅读页面的起始位置(currentstartoffset)和结束位置(currentendoffset),判断一下当前位置所在的份数是否被标记过;

步骤207、如果没有被标记过,则标记当前位置所在的份数为已读,并将新分组编号(sectionid)存入数组(readedarray)中,具体流程参见步骤二;

步骤208、结束,正常翻页阅读即可。

图3示出了根据本发明实施例提供的电子书阅读进度计算系统,包括:电子书拆分装置,将所述电子书按字数拆分为多组数据,所拆分的多组数据中的每组数据至少包含分组编号(sectionid)、章节信息(chapterid)、起始位置数据(startoffset)以及结束位置数据(endoffset);阅读页面数据获取装置,在用户阅读过程中,获取用户当前阅读页面的起始位置数据(currentstartoffset)和结束位置数据(currentendoffset);阅读页面数据分析装置,将当前阅读页面的起始位置数据(currentstartoffset)、结束位置数据(currentendoffset)与所拆分的多组数据的起始位置数据(startoffset)、结束位置数据(endoffset)进行对比,判断二者是否存在重叠;标记装置,如果判断当前阅读页面的起始位置数据、结束位置数据与所拆分的一组或多组数据的起始位置数据、结束位置数据存在重叠,则标记该一组或多组数据为已读数据;以及阅读进度计算装置,根据标记为已读数据的组的个数与总的拆分数据组的个数,计算确定电子书的阅读进度。

本发明还提供了计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行以下操作:将所述电子书按字数拆分为多组数据,所拆分的多组数据中的每组数据至少包含分组编号、章节信息、起始位置数据以及结束位置数据;在用户阅读过程中,获取用户当前阅读页面的起始位置数据和结束位置数据;将当前阅读页面的起始位置数据、结束位置数据与所拆分的多组数据的起始位置数据、结束位置数据进行对比,判断二者是否存在重叠;如果判断当前阅读页面的起始位置数据、结束位置数据与所拆分的一组或多组数据的起始位置数据、结束位置数据存在重叠,则标记该一组或多组数据为已读数据;以及根据标记为已读数据的组的个数与总的拆分数据组的个数,计算确定电子书的阅读进度。

本发明通过对电子书数据进行拆分,不仅便于用户阅读时快速加载电子书数据,而且依据拆分电子书数据时存储的拆分数据的信息,可以快速、便捷地计算电子书的阅读进度,电子书的阅读进度的计算不再依赖于书籍的页码,即使书籍没有完全下载下来,用户的阅读进度依然可以被正确记录和计算;再者,即使在阅读的过程中跳转目录或者拖拽进度条,本发明的方案由于是基于拆分数据进行计算,所计算的阅读进度并不会因此受影响瞬间增大;本发明提供的阅读进度计算方案计算快速、准确,算法简单,并且不受电子书的字号、字体、用户阅读机型等影响,具有更好的灵活性和适应性,能够真实、客观地记录用户阅读全书的百分比。

以上,已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如附带的专利权利要求所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。

通常地,在权利要求中使用的所有术语都根据他们在技术领域的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个/所述/该[装置、组件等]”都被开放地解释为所述装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1