- [Android]为什么不能在没开looper的子线程中使用AsyncHttpClient
黑森林中的小木屋
没开looper的子线程中使用AsyncHttpClient会出现下面的异常:SynchronousResponseHandlerusedinAsyncHttpClient.YoushouldcreateyourresponsehandlerinalooperthreadoruseSyncHttpClientinstead.通过翻阅源码,发现AsyncHttpClient的请求最终会被提交到线程池
- 聊聊AsyncHttpClient的SignatureCalculator
hello_ejb3
http
序本文主要研究一下AsyncHttpClient的SignatureCalculatorSignatureCalculatororg/asynchttpclient/SignatureCalculator.java/***Interfacethatallowsinjectingsignaturecalculatorinto*{@linkRequestBuilder}sothatsignaturec
- 聊聊AsyncHttpClient的ClientStats
hello_ejb3
http
序本文主要研究一下AsyncHttpClient的ClientStatsClientStatsorg/asynchttpclient/ClientStats.java/***Arecordclassrepresentingthestateofan(@linkorg.asynchttpclient.AsyncHttpClient).*/publicclassClientStats{privatefi
- 聊聊AsyncHttpClient的ListenableFuture
hello_ejb3
http
序本文主要研究一下AsyncHttpClient的ListenableFutureListenableFutureorg/asynchttpclient/ListenableFuture.javapublicinterfaceListenableFutureextendsFuture{/***Terminateandifthereisnoexception,markthisFutureasdone
- python 父类实例化子类,替换__init__方法(记录) 2018-09-06
夏树的宝马
阅读tornado的时候发现,tornado的AsyncHTTPClient的初始化,是没有调用init方法,而是调用了自己写的一个方法,一直不明白原因。tornadoAsynchttpclient实例过程AsyncHTTPClient--->Configurable--->SimpleAsyncHTTPClient进行一个实例说明:在new方法中返回了对象实例时,再调用已经写好的对象实例方法进行
- Tornado 异步请求使用 Digest 等复杂鉴权
爱吃芒果的芬里尔狼
PythonTornadotornadolinuxpython
方案简介使用tornado.curl_httpclient.CurlAsyncHTTPClient模块代替tornado.httpclient.AsyncHTTPClient模块,其余与普通请求相同。准备条件使用CurlAsyncHTTPClient模块需已安装pycurl模块,使用:pipinstallpycurl进行安装,出现以下信息时,安装完成:CollectingpycurlUsingca
- java http get请求传json对象
LiaoZe770
springbootjavahttpjson
原文章地址,这里只用于记录DefaultAsyncHttpClientasyncHttpClient=newDefaultAsyncHttpClient();Mapparams=newHashMapfuture=asyncHttpClient.executeRequest(r);try{Responseresponse=future.get();}catch(Exceptione){e.print
- 第三方接口调用工具
烟火缠过客
JAVA知识回顾java
引入依赖com.ningasync-http-client1.8.13com.alibabafastjson1.2.12importcom.ning.http.client.AsyncHttpClient;importcom.ning.http.client.ProxyServer;importcom.ning.http.client.Response;importorg.apache.http.
- Tornado请求第三方延迟40ms问题
婆娑人
问题背景项目使用的是Torando框架,请求第三方应用,用的是AsyncHttpClient。昨天有个需求是在项目直接进行http请求数据,但是http需要长连接,由于AsyncHttpClient不支持使用长连接,根据官方文档,换成了CurlAsyncHTTPClient,这个可以满足需求。之后,在运行过程中发现,相对于替换之前,请求时间增加了40ms,查了一下,发现是由于TCP的设置导致的ht
- Selenium 问题 java.io.IOException: Invalid Status code=403 text=Forbidden
微笑的Java
javaselenium
0.异常信息org.openqa.selenium.remote.http.WebSocket$Listener.onError()InvalidStatuscode=403text=Forbiddenjava.io.IOException:InvalidStatuscode=403text=Forbiddenatorg.asynchttpclient.netty.handler.WebSocke
- http网关/转发 - spring boot zuul方案
freelance_v
SpringCloudSpringBootJAVAspringbootjava后端
一、方案概述普通restTemplate&httpclient包转发时,阻塞线程,性能低下,需要使用非阻塞方式,可选zuul&asynchttpclient,本文讨论zuul方案二、引入包注意:springboot&cloud的版本必须一致,否则会出现兼容异常org.springframework.bootspring-boot-starter-parent2.1.2.RELEASEorg.spr
- 模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。...
weixin_30687811
移动开发jsonjava
需要用到的lib包:解析jsongson包,从网络地址解析json数据成String字符串的异步网络解析工具AsyncHttpClient等下载地址:点击下载Xlistview下拉上拉第三方框架点击下载侧滑菜单的lib点击下载1packagecom.lixu.testjsonall;23importcom.jeremyfeinstein.slidingmenu.lib.SlidingMenu;4i
- 使用 Swift 搭建一个 HTTP 代理
Swift社区
swifthttpios
前言我将通过这篇文章详述一下如何用Swift搭建一个HTTP代理服务器。本文将使用Hummingbird作为服务端的基本HTTP框架,以及使用AsyncHTTPClient作为Swift的HTTP客户端来请求目标服务。什么是代理服务器代理服务器是一个搭载在客户端和另一个服务端(后面我们成为目标服务端)的中间服务器,它从客户端转发消息到目标服务端,并且从目标服务端获取响应信息传回给客户端。在转发消息
- 【Android】网络(二)网络框架OKHttp
AlanGe
高性能网络框架OKHttp出现背景在okhttp出现以前,android上发起网络请求要么使用系统自带的HttpClient、HttpURLConnection、要么使用google开源的Volley、要么使用第三方开源的AsyncHttpClient,随着互联网的发展,APP的业务发展也越来越复杂,APP的网络请求数量急剧增加,但是上述的网络请求框架均存在难以性能和并发数量的限制OkHttp流行
- tornado【6】异步请求
玩阿轲睡妲己
Tornado包含一个AsyncHTTPClient类,可以执行异步HTTP请求。关键字:@tornado.web.asynchronous,self.finish()importtornado.webimporttornado.httpclientclassIndexHandler(tornado.web.RequestHandler):#@tornado.web.asynchronous装饰器
- java实现高效下载文件的方法
本文实例为大家分享了java实现下载文件的方法,供大家参考,具体内容如下本文我们介绍几种方法下载文件。从基本JAVAIO到NIO包,也介绍第三方库的一些方法,如AsyncHttpClient和ApacheCommonsIO.最后我们还讨论在连接断开后如何恢复下载。使用javaIO下载文件最基本的方法是javaIO,使用URL类打开待下载文件的连接。为有效读取文件,我们使用openStream()方
- tornado【1】引言
玩阿轲睡妲己
Tornado是基于Python实现的异步网络框架,它采用非阻塞IO,可以支持成千上万的并发访问量,所以非常适合于长轮询和Websocket,以及其他需要持久连接的应用场景。Tornado可以分为以下几个部分:web框架,包括了RequestHandler客户端和服务器端的HTTP实现(HTTPServer和AsyncHTTPClient)异步网络库IOLoop和IOStream协程库tornad
- tornado异步请求
雀知安
Tornado包含一个AsyncHTTPClient类,可以执行异步HTTP请求。关键字:@tornado.web.asynchronous,self.finish()importtornado.webimporttornado.httpclientclassIndexHandler(tornado.web.RequestHandler):#@tornado.web.asynchronous装饰器
- android-async-http get 请求Json数据
RickGe
01添加Android-async-httpcompile'com.loopj.android:android-async-http:1.4.9'02网络请求class:ApiHttpClientimportcom.loopj.android.http.AsyncHttpClient;importcom.loopj.android.http.AsyncHttpResponseHandler;pub
- Tornado异步笔记(二)--- 异步客户端AsyncHTTPClient
人世间
Tornado异步笔记(二)---异步客户端前面了解Tornado的异步任务的常用做法,姑且归结为异步服务。通常在我们的服务内,还需要异步的请求第三方服务。针对HTTP请求,Python的库Requests是最好用的库,没有之一。官网宣称:HTTPforHuman。然而,在tornado中直接使用requests将会是一场恶梦。requests的请求会block整个服务进程。上帝关上门的时候,往往
- (2018-05-30.Python从Zero到One)8、(Tornado)异步与WebSockets__1.7.2 Tornado异步
lyh165
7.2Tornado异步因为epoll主要是用来解决网络IO的并发问题,所以Tornado的异步编程也主要体现在网络IO的异步上,即异步Web请求。1.tornado.httpclient.AsyncHTTPClientTornado提供了一个异步Web请求客户端tornado.httpclient.AsyncHTTPClient用来进行异步Web请求。fetch(request,callback
- tornado AsyncHttpClient 源码分析
东植George
虽然tornado到现在,已经4.x版本了,但是由于其编程概念比较难理解以及使用的人不是太多,因此,即使看了文档,以及搜索资料,还是处于一知半解的情况,这时间,就只能硬着头皮看源码了,虽然麻烦,但是弄懂之后,就会发现tornado原来挺好用的,以及为什么高效,以后自己还可以DIY。首先是一个使用AsyncHttpClient发起http请求的例子(如果不用tornado的异步概念,就可能需要用到多
- java获取经纬度_java调用高德地图api获取某个位置的经纬度
汉周读书
java获取经纬度
java调用高德地图api获取经纬度的方法,废话少说,直接上代码:importcom.fasterxml.jackson.databind.JsonNode;importcom.ning.http.client.AsyncHttpClient;importcom.ning.http.client.AsyncHttpClientConfig;importcom.ning.http.client.Li
- 使用AsyncHttpClient发送异步请求
不知名的蛋挞
背景我们知道可以用HttpClient来发送同步请求,在并发量大的情况下使用HttpClient的连接池来提高性能。此方法虽然很有效果,但是当访问量极大或网络不好的情况下也会出现某些网络请求慢导致其它请求阻塞的情况。所以我们可以将网络请求变成一个异步的请求,不影响其它的请求。那么异步请求怎么发送呢?异步请求我们可以使用AsyncHttpClient类来进行实现。主方法:/***执行异步请求*/@C
- Fragment getActivity()返回null
ZHxin
android多线程
在Fragment中使用AsyncHttpClient框架异步访问接口,在接口的回调中,刷新界面,调用getActivity()有时会出现nullPointer的情况,这是什么原因呢?(一)getActivity()什么时候返回空,什么时候不返回空?查看Fragment的getActivity()的代码:/***ReturntheActivitythisfragmentiscurrentlyass
- 引用开源框架通过AsyncHttpClient实现网络图片查看器
一叶飘舟
Android开发
步骤:1.添加权限(访问网络权限)2.创建异步请求对象3.执行post请求(指定url路径,新建AsyncHttpResponseHandler方法)a)如果成功创建工厂对象b)工厂对象的decodeByteArray把字节转换成Bitmap对象c)设置图片实例项目解析项目要求:通过editText文本输入框中的网址,点击查看按钮,进行网络图片显示运行效果如下:重点代码:均有详细解析,请认真查看注
- 网络请求框架----AsyncHttpClient的get,post和图片上传服务器
iteye_5061
Android
async-http-client库是一个基于回调函数的Http异步通信客户端Android组件,是在Apache的HttpClient库的基础上开发构建而成的。Eclipse使用:导入android-async-http-1.4.4.jar包http://download.csdn.net/detail/dickyqie/9662215AndroidStudio:gradle中引入compile
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
要的是激情
android
前端andoidactivity用到的函数AsyncHttpClient是一个框架提供的库可以异步传输,使用时需下载android-async-http-1.4.4.jar包导入到项目中下载地址:http://loopj.com/android-async-httppublicstaticvoidreg(finalContextcont,Bitmapphotodata,StringregData)
- Android 之AsyncHttpClient
Pluto8172
android进阶AndroidAsyncHttpCli
在Android开发中,与服务器通讯主要是基于Http协议来进行的.Android自己为我们提供了URLHttpConnection类来处理网络访问的问题,但是这个类的确不是很好用.今天简绍一个在Android开发中被使用的非常广泛的一个专门针对Android的网络编程这一块的一个框架.Android-async-http.项目的官方网站:http://loopj.com/android-asyn
- AndroidAsync :异步Socket,http(client+server),websocket和socket.io的Android类库
weixin_30500473
AndroidAsync是一个用于Android应用的异步Socket,http(client+server),websocket和socket.io的类库。基于NIO,没有线程。它使用java.nio来管理连接。因此,所有连接都在一个单一的线程管理,而不是每一个线程。NIO是极其有效的。创建websockets:查看源码打印?01AsyncHttpClient.getDefaultInstanc
- apache 安装linux windows
墙头上一根草
apacheinuxwindows
linux安装Apache 有两种方式一种是手动安装通过二进制的文件进行安装,另外一种就是通过yum 安装,此中安装方式,需要物理机联网。以下分别介绍两种的安装方式
通过二进制文件安装Apache需要的软件有apr,apr-util,pcre
1,安装 apr 下载地址:htt
- fill_parent、wrap_content和match_parent的区别
Cb123456
match_parentfill_parent
fill_parent、wrap_content和match_parent的区别:
1)fill_parent
设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间。这跟Windows控件的dockstyle属性大体一致。设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。
2) wrap_conte
- 网页自适应设计
天子之骄
htmlcss响应式设计页面自适应
网页自适应设计
网页对浏览器窗口的自适应支持变得越来越重要了。自适应响应设计更是异常火爆。再加上移动端的崛起,更是如日中天。以前为了适应不同屏幕分布率和浏览器窗口的扩大和缩小,需要设计几套css样式,用js脚本判断窗口大小,选择加载。结构臃肿,加载负担较大。现笔者经过一定时间的学习,有所心得,故分享于此,加强交流,共同进步。同时希望对大家有所
- [sql server] 分组取最大最小常用sql
一炮送你回车库
SQL Server
--分组取最大最小常用sql--测试环境if OBJECT_ID('tb') is not null drop table tb;gocreate table tb( col1 int, col2 int, Fcount int)insert into tbselect 11,20,1 union allselect 11,22,1 union allselect 1
- ImageIO写图片输出到硬盘
3213213333332132
javaimage
package awt;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imagei
- 自己的String动态数组
宝剑锋梅花香
java动态数组数组
数组还是好说,学过一两门编程语言的就知道,需要注意的是数组声明时需要把大小给它定下来,比如声明一个字符串类型的数组:String str[]=new String[10]; 但是问题就来了,每次都是大小确定的数组,我需要数组大小不固定随时变化怎么办呢? 动态数组就这样应运而生,龙哥给我们讲的是自己用代码写动态数组,并非用的ArrayList 看看字符
- pinyin4j工具类
darkranger
.net
pinyin4j工具类Java工具类 2010-04-24 00:47:00 阅读69 评论0 字号:大中小
引入pinyin4j-2.5.0.jar包:
pinyin4j是一个功能强悍的汉语拼音工具包,主要是从汉语获取各种格式和需求的拼音,功能强悍,下面看看如何使用pinyin4j。
本人以前用AscII编码提取工具,效果不理想,现在用pinyin4j简单实现了一个。功能还不是很完美,
- StarUML学习笔记----基本概念
aijuans
UML建模
介绍StarUML的基本概念,这些都是有效运用StarUML?所需要的。包括对模型、视图、图、项目、单元、方法、框架、模型块及其差异以及UML轮廓。
模型、视与图(Model, View and Diagram)
&
- Activiti最终总结
avords
Activiti id 工作流
1、流程定义ID:ProcessDefinitionId,当定义一个流程就会产生。
2、流程实例ID:ProcessInstanceId,当开始一个具体的流程时就会产生,也就是不同的流程实例ID可能有相同的流程定义ID。
3、TaskId,每一个userTask都会有一个Id这个是存在于流程实例上的。
4、TaskDefinitionKey和(ActivityImpl activityId
- 从省市区多重级联想到的,react和jquery的差别
bee1314
jqueryUIreact
在我们的前端项目里经常会用到级联的select,比如省市区这样。通常这种级联大多是动态的。比如先加载了省,点击省加载市,点击市加载区。然后数据通常ajax返回。如果没有数据则说明到了叶子节点。 针对这种场景,如果我们使用jquery来实现,要考虑很多的问题,数据部分,以及大量的dom操作。比如这个页面上显示了某个区,这时候我切换省,要把市重新初始化数据,然后区域的部分要从页面
- Eclipse快捷键大全
bijian1013
javaeclipse快捷键
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑ 当前行和上面一行交互位置(同上)Alt+← 前一个编辑的页面Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)Alt+En
- js 笔记 函数
征客丶
JavaScript
一、函数的使用
1.1、定义函数变量
var vName = funcation(params){
}
1.2、函数的调用
函数变量的调用: vName(params);
函数定义时自发调用:(function(params){})(params);
1.3、函数中变量赋值
var a = 'a';
var ff
- 【Scala四】分析Spark源代码总结的Scala语法二
bit1129
scala
1. Some操作
在下面的代码中,使用了Some操作:if (self.partitioner == Some(partitioner)),那么Some(partitioner)表示什么含义?首先partitioner是方法combineByKey传入的变量,
Some的文档说明:
/** Class `Some[A]` represents existin
- java 匿名内部类
BlueSkator
java匿名内部类
组合优先于继承
Java的匿名类,就是提供了一个快捷方便的手段,令继承关系可以方便地变成组合关系
继承只有一个时候才能用,当你要求子类的实例可以替代父类实例的位置时才可以用继承。
在Java中内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类。
内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相
- 盗版win装在MAC有害发热,苹果的东西不值得买,win应该不用
ljy325
游戏applewindowsXPOS
Mac mini 型号: MC270CH-A RMB:5,688
Apple 对windows的产品支持不好,有以下问题:
1.装完了xp,发现机身很热虽然没有运行任何程序!貌似显卡跑游戏发热一样,按照那样的发热量,那部机子损耗很大,使用寿命受到严重的影响!
2.反观安装了Mac os的展示机,发热量很小,运行了1天温度也没有那么高
&nbs
- 读《研磨设计模式》-代码笔记-生成器模式-Builder
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/**
* 生成器模式的意图在于将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示(GoF)
* 个人理解:
* 构建一个复杂的对象,对于创建者(Builder)来说,一是要有数据来源(rawData),二是要返回构
- JIRA与SVN插件安装
chenyu19891124
SVNjira
JIRA安装好后提交代码并要显示在JIRA上,这得需要用SVN的插件才能看见开发人员提交的代码。
1.下载svn与jira插件安装包,解压后在安装包(atlassian-jira-subversion-plugin-0.10.1)
2.解压出来的包里下的lib文件夹下的jar拷贝到(C:\Program Files\Atlassian\JIRA 4.3.4\atlassian-jira\WEB
- 常用数学思想方法
comsci
工作
对于搞工程和技术的朋友来讲,在工作中常常遇到一些实际问题,而采用常规的思维方式无法很好的解决这些问题,那么这个时候我们就需要用数学语言和数学工具,而使用数学工具的前提却是用数学思想的方法来描述问题。。下面转帖几种常用的数学思想方法,仅供学习和参考
函数思想
把某一数学问题用函数表示出来,并且利用函数探究这个问题的一般规律。这是最基本、最常用的数学方法
- pl/sql集合类型
daizj
oracle集合typepl/sql
--集合类型
/*
单行单列的数据,使用标量变量
单行多列数据,使用记录
单列多行数据,使用集合(。。。)
*集合:类似于数组也就是。pl/sql集合类型包括索引表(pl/sql table)、嵌套表(Nested Table)、变长数组(VARRAY)等
*/
/*
--集合方法
&n
- [Ofbiz]ofbiz初用
dinguangx
电商ofbiz
从github下载最新的ofbiz(截止2015-7-13),从源码进行ofbiz的试用
1. 加载测试库
ofbiz内置derby,通过下面的命令初始化测试库
./ant load-demo (与load-seed有一些区别)
2. 启动内置tomcat
./ant start
或
./startofbiz.sh
或
java -jar ofbiz.jar
&
- 结构体中最后一个元素是长度为0的数组
dcj3sjt126com
cgcc
在Linux源代码中,有很多的结构体最后都定义了一个元素个数为0个的数组,如/usr/include/linux/if_pppox.h中有这样一个结构体: struct pppoe_tag { __u16 tag_type; __u16 tag_len; &n
- Linux cp 实现强行覆盖
dcj3sjt126com
linux
发现在Fedora 10 /ubutun 里面用cp -fr src dest,即使加了-f也是不能强行覆盖的,这时怎么回事的呢?一两个文件还好说,就输几个yes吧,但是要是n多文件怎么办,那还不输死人呢?下面提供三种解决办法。 方法一
我们输入alias命令,看看系统给cp起了一个什么别名。
[root@localhost ~]# aliasalias cp=’cp -i’a
- Memcached(一)、HelloWorld
frank1234
memcached
一、简介
高性能的架构离不开缓存,分布式缓存中的佼佼者当属memcached,它通过客户端将不同的key hash到不同的memcached服务器中,而获取的时候也到相同的服务器中获取,由于不需要做集群同步,也就省去了集群间同步的开销和延迟,所以它相对于ehcache等缓存来说能更好的支持分布式应用,具有更强的横向伸缩能力。
二、客户端
选择一个memcached客户端,我这里用的是memc
- Search in Rotated Sorted Array II
hcx2013
search
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given ta
- Spring4新特性——更好的Java泛型操作API
jinnianshilongnian
spring4generic type
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
- CentOS安装JDK
liuxingguome
centos
1、行卸载原来的:
[root@localhost opt]# rpm -qa | grep java
tzdata-java-2014g-1.el6.noarch
java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64
java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64
[root@localhost
- 二分搜索专题2-在有序二维数组中搜索一个元素
OpenMind
二维数组算法二分搜索
1,设二维数组p的每行每列都按照下标递增的顺序递增。
用数学语言描述如下:p满足
(1),对任意的x1,x2,y,如果x1<x2,则p(x1,y)<p(x2,y);
(2),对任意的x,y1,y2, 如果y1<y2,则p(x,y1)<p(x,y2);
2,问题:
给定满足1的数组p和一个整数k,求是否存在x0,y0使得p(x0,y0)=k?
3,算法分析:
(
- java 随机数 Math与Random
SaraWon
javaMathRandom
今天需要在程序中产生随机数,知道有两种方法可以使用,但是使用Math和Random的区别还不是特别清楚,看到一篇文章是关于的,觉得写的还挺不错的,原文地址是
http://www.oschina.net/question/157182_45274?sort=default&p=1#answers
产生1到10之间的随机数的两种实现方式:
//Math
Math.roun
- oracle创建表空间
tugn
oracle
create temporary tablespace TXSJ_TEMP
tempfile 'E:\Oracle\oradata\TXSJ_TEMP.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent m
- 使用Java8实现自己的个性化搜索引擎
yangshangchuan
javasuperword搜索引擎java8全文检索
需要对249本软件著作实现句子级别全文检索,这些著作均为PDF文件,不使用现有的框架如lucene,自己实现的方法如下:
1、从PDF文件中提取文本,这里的重点是如何最大可能地还原文本。提取之后的文本,一个句子一行保存为文本文件。
2、将所有文本文件合并为一个单一的文本文件,这样,每一个句子就有一个唯一行号。
3、对每一行文本进行分词,建立倒排表,倒排表的格式为:词=包含该词的总行数N=行号