当前位置:文档之家› Heritrix

Heritrix

Heritrix
Heritrix

Lucene很强大,这点在前面的章节中,已经作了详细介绍。但是,无论多么强大的搜索引擎工具,在其后台,都需要一样东西来支援它,那就是网络爬虫Spi der。

网络爬虫,又被称为蜘蛛Spider,或是网络机器人、BOT等,这些都无关紧要,最重要的是要认识到,由于爬虫的存在,才使得搜索引擎有了丰富的资源。Heritrix是一个纯由Java开发的、开源的Web网络爬虫,用户可以使用它从网络上抓取想要的资源。它来自于https://www.doczj.com/doc/987873514.html,。Heritrix最出色之处在于它的可扩展性,开发者可以扩展它的各个组件,来实现自己的抓取逻辑。本章就来详细介绍一下Heritrix和它的各个组件。

10.1 Heritrix的使用入门

要想学会使用Heritrix,当然首先得能把它运行起来。然而,运行Heritrix并非一件容易的事,需要进行很多配置。在Heritrix的文档中对它的运行有详细的介绍,不过尽管如此,笔者仍然花了大量时间,才将其配置好并运行成功。

10.1.1 下载和运行Heritrix

Heritrix的下载页面为:https://www.doczj.com/doc/987873514.html,/downloads.html。从上面可以链接到SourceForge的下载页面。当前Heritrix的最新版本为1.10。(1)在下载完Heritrix的完整开发包后,解压到本地的一个目录下,如图10-1所示。

图10-1 Heritrix的目录结构

其中,Heritrix所用到的工具类库都存于lib下,heritrix-1.10.1.jar是Her itrix的Jar包。另外,在Heritrix目录下有一个conf目录,其中包含了一个很重要的文件:heritrix.properties。

(2)在heritrix.properties中配置了大量与Heritrix运行息息相关的参数,这些参数主要是配置了Heritrix运行时的一些默认工具类、WebUI的启动参数,以及Heritrix的日志格式等。当第一次运行Heritrix时,只需要修改该文件,为其加入WebUI的登录名和密码,如图10-2所示。

图10-2 修改Heritrix的WebUI的登录名和密码

其中,用户名和密码是以一个冒号进行分隔,使用者可以指定任何的字符串做为用户名密码,图中所示只不过延续了Heritrix以前版本中默认的用户名和密码而已。

(3)在设置完登录名和密码后,就可以开始运行Heritrix了。Heritrix有多种方式启动,例如,可以使用CrawlController,以后台方式加载一个抓取任务,即为编程式启动。不过最常见的还是以WebUI的方式启动它。

(4)Heritrix的主类为org.archive.crawler.Heritrix,运行它,就可以启动Heritrix。当然,在运行它的时候,需要为其加上lib目录下的所有jar包。以下是笔者在命令行中启动Heritrix时所使用的批处理文件,此处列出,仅供读者参考(笔者的Heritrix目录是位于E盘的根目下,即E:\heritrix)。

代码10.1

java -Xmx512m-Dheritrix.home=e:\\heritrix-cp"E:\\heritrix\\lib\\commons-cod ec-1.3.jar;E:\\heritrix\\lib\\commons-collections-3.1.jar;E:\\heritrix\\lib\\dnsjava-1.6.2.jar; E:\\heritrix\\lib\\poi-scratchpad-2.0-RC1-20031102.jar;E:\\heritrix\\lib\\commons-logging -1.0.4.jar;E:\\heritrix\\lib\\commons-httpclient-3.0.1.jar;E:\\heritrix\\lib\\commons-cli-1.0. jar;E:\\heritrix\\lib\\mg4j-1.0.1.jar;E:\\heritrix\\lib\\javaswf-CVS-SNAPSHOT-1.jar;E:\\her itrix\\lib\\bsh-2.0b4.jar;E:\\heritrix\\lib\\servlet-tomcat-4.1.30.jar;E:\\heritrix\\lib\\junit-3.

8.1.jar;E:\\heritrix\\lib\\jasper-compiler-tomcat-4.1.30.jar;E:\\heritrix\\lib\\commons-lang -2.1.jar;E:\\heritrix\\lib\\itext-1.2.0.jar;E:\\heritrix\\lib\\poi-2.0-RC1-20031102.jar;E:\\her itrix\\lib\\jetty-4.2.23.jar;E:\\heritrix\\lib\\commons-net-1.4.1.jar;E:\\heritrix\\lib\\libidn-0.

5.9.jar;E:\\heritrix\\lib\\ant-1.

6.2.jar;E:\\heritrix\\lib\\fastutil-5.0.3-heritrix-subset-1.0.jar; E:\\heritrix\\lib\\je-3.0.12.jar;E:\\heritrix\\lib\\commons-pool-1.3.jar;E:\\heritrix\\lib\\jas per-runtime-tomcat-4.1.30.jar;E:\\heritrix\\heritrix-1.10.1.jar" org.archive.crawler.He ritrix

(5)在上面的批处理文件中,将Heritrix所用到的所有的第三方Jar包都写进了classpath中,同时执行了org.archive.crawler.Heritrix这个主类。图10 -3为Heritrix启动时的画面。

图10-3 Heritrix的启动画面

(6)在这时,Heritrix的后台已经对服务器的8080端口进行了监听,只需要通过浏览器访问http://localhost:8080,就可以打开Heritrix的WebUI了。如图10-4所示。

图10-4 Heritrix的WebUI的登录界面

(7)在这个登录界面,输入刚才在Heritrix.properties中预设的WebUI的用户名和密码,就可以进入如图10-5所示的Heritrix的WebUI的主界面。

图10-5 登录后的界面

(8)当看到这个页面的时候,就说明Heritrix已经成功的启动了。在页面的中央有一道状态栏,用于标识当前正在运行的抓取任务。如图10-6所示:

图10-6 抓取任务的状态栏

在这个WebUI的帮助下,用户就可以开始使用Heritrix来抓取网页了。

10.1.2 在Eclipse里配置Heritrix的开发环境

讲完了通过命令行方式启动的Heritrix,当然要讲一下如何在Eclipse中配置H eritrix的开发环境,因为可能需要对代码进行调试,甚至修改一些它的源代码,来达到所需要的效果。下面来研究一下Heritrix的下载包。

(1)webapps文件夹是用来提供Servlet引擎的,也就是提供Heritrix的Web UI的部分,因此,在构建开发环境时必不可少。conf文件夹是用来提供配置文件的,因此也需要配置进入工程。Lib目录下主要是Heritrix在运行时需要用到的第三方的软件,因此,需要将其设定到Eclipse的Build Path下。最后就是Heritrix的jar包了,将其解压,可以看到其内部的结构如图10-7所示。

图10-7 Heritrix的Jar包的结构

(2)根据图10-7所示,应该从Heritrix的源代码包中把这些内容取出,然后放置到工程中来。Heritrix的源代码包解压后,只有两个文件夹,如图10-8所示。

图10-8 Heritrix的源代码包的结构

(3)只需在src目录下,把图10-7中的内容配全,就可以将工程的结构完整了。如图10-9所示。

图10-9 src目录下的内容

(4)图10-10和图10-11是笔者机器上的Heritrix在Eclipse中的工程配置好后的截图,以及workspace中文件夹的预览。

图10-10 Eclipse工程视图下的包结构图10-11 文件夹中的工程

其中,org目录内是Heritrix的源代码,另外,笔者将conf目录去掉了,直接将heritrix.properties文件放在了工程目录下。在图10-10中,读者可能没有看到Heritrix所使用到的Jar包,这是因为在工程视图中,它们被过滤器过滤掉了,实际上,所有lib目录下的jar包都已经被加进了build path中。(5)不过,读者很有可能遇到这样的情况,那就是在将所有的jar包都导入后,工程编译完成,却发现在左边的package explorer中出现了大量的编译错误。如图10-12所示。

图10-12 出现的编辑错误

(6)随便打开一个出错的文件,如图10-13所示,会发现大量的错误都来自于“assert”关键字。这种写法似乎Eclipse不认识。

图10-13 出错的程序

(7)解决问题的关键在于,Eclipse的编译器不认识assert这个关键字。可以在“选项”菜单中将编译器的语法样式改为5.0,也就是JDK1.5兼容的语法,然后重启编译整个工程就可以了。如图10-14所示。

图10-14 改变编译器的语法等级

(8)在重新编译完整个工程后,笔者的Eclipse中仍然出现了一个编译错误,那就是在org.archive.io.ArchiveRecord类中,如图10-15所示。

图10-15 一个仍然存在的错误

从代码看来,这是因为在使用条件表达式,对strippedFileName这个String 类型的对象赋值时,操作符的右则出现了一个char型的常量,因此影响了编译。暂且不论为什么在Heritrix的源代码中会出现这样的错误,解决问题的办法就是将char变成String类型,即:

buffer.append(strippedFileName != null? strippedFileName: "-");

(9)当这样修改完后,整个工程的错误就被全部解决了,也就可以开始运行He ritrix了。在Eclipse下运行org.archive.crawler.Heritrix类,如图10-16所示。

图10-16 在Eclipse中运行Heritrix

(10)当看到图10-17所示的界面时,就说明Heritrix已经成功的在Eclipse 中运行,也就意味着可以使用Eclipse来对Heritrix进行断点调试和源码修改了。

图10-17 在Eclipse中成功的运行

10.1.3 创建一个新的抓取任务

在10.1.1小节中,已经看到了Heritrix成功运行后的WebUI,接下来,就要带领读者来创建一个新的抓取作务。

(1)单击WebUI菜单栏上的“Jobs”标签,就可以进入任务创建页面。如图10 -18所示。

图10-18 菜单栏上的“Jobs”标签

(2)在任务创建页面中,有4种创建任务的方式,如图10-19所示,具体含义如下。

l Based on existing job:以一个已经有的抓取任务为模板,创建所有抓取属

性和抓取起始URL的列表。

l Based on a recovery:在以前的某个任务中,可能设置过一些状态点,新的

任务将从这个设置的状态点开始。

l Based on a profile:专门为不同的任务设置了一些模板,新建的任务将按照

模板来生成。

l With defaults:这个最简单,表示按默认的配置来生成一个任务。

图10-19 “任务”菜单中

在Heritrix中,一个任务对应一个描述文件。这个描述文件的默认的名称为or der.xml。每次创建一个新任务时,都相当于生成了一个order.xml的文件。文件中详细记录了Heritrix在运行时需要的所有信息。例如,它包括该用户所选择的Processor类、Frontier类、Fetcher类、抓取时线程的最大数量、连接超时的最大等待时间等信息。上面所说的4种创建抓取任务的方式,其实都是在生成一个order.xml文件。其中,第4种With defaults,则是直接拷贝默认的o rder.xml文件。在所创建的Eclipse工程或是命令行启动的Heritrix下载包中,该默认的order.xml文件均是放于profiles\default目录下的。

关于order.xml的细节,在此还不必深究。因为它里面所有的内容,都会在Web UI上看到。

(3)单击With defaults链接,创建一个新的抓取任务,如图10-20所示。

图10-20 新的抓取任务

(4)在新建任务的名称上,填入“Sohu_news”,表示该抓取任务将抓取搜狐的新闻信息。在Description中随意填入字符,然后再在seeds框中,填入搜狐新闻的网址。

这里需要解释一下seeds的含义。所谓seeds,其实指的是抓取任务的起始点。每次的抓取,总是需要从一个起始点开始,在得到这个起始点网页上的信息后,分析出新的地址加入抓取队列中,然后循环抓取,重复这样的过程,直到所有链接都分析完毕。

(5)在图10-20中,设置了搜狐新闻的首页为种子页面,以此做为起始点。用户在使用时,也可以同时输入多个种子,每个URL地址单独写在一行上,如图1 0-21所示。

图10-21 多个种子的情况

当然,凭着目前的设置,还没法开始抓取网页,还需要对这个任务进行详细的设置。

10.1.4 设置抓取时的处理链

在图10-21中,seeds文本框下有一排按钮,单击“Modules”按钮,就进入了配置抓取时的处理链的页面,如图10-22所示。

图10-22 配置处理链的页面

从上而下,可以看到,需要配置的内容共有7项,其中CrawlScope和Frontier 是两个最重要的组件。

CrawlScope用于配置当前应该在什么范围内抓取网页链接。比如,如果选择Br oadScope,则表示当前抓取的范围不受限制,但如果选择了HostScope,则表示抓取的范围在当前的Host内。

从笔者的经验看来,在抓取时,无论是HostScope或PathScope都不能真正的限制到抓取的内容。需要对Scope内的代码进行一定的修改才可以,因此,暂时选择BroadScope来充当示例中的范围限定,其实也就是对范围不做任何的限定。即从https://www.doczj.com/doc/987873514.html,开始,抓取任何可以抓取到的信息。如图10-23所示。

图10-23 设置Scope

Frontier则是一个URL的处理器,它将决定下一个被处理的URL是什么。同时,它还会将经由处理器链所解析出来的URL加入到等待处理的队列中去。在例子中,使用BdbFrontier类来做为处理器,全权掌管URL的分配。如图10-24所示。

图10-24 设置Frontier

除了这两个组件外,还有5个队列要配。这五个队列根据先后的顺序,就依次组成了Heritrix的整个处理器链。5个队列的含义分别如下:

(1)PreProcessor:这个队列中,所有的处理器都是用来对抓取时的一些先决条件做判断的。比如判断robot.txt的信息等,它是整个处理器链的入口。如图10-25所示。

图10-25 设置PreProcessor

(2)Fetcher:从名称上看,它用于解析网络传输协议,比如解析DNS、HTTP

或FTP等。在演示中,主要使用FetchDNS和FetchHTTP两个类。如图10-26所示。

图10-26 设置Fetcher

(3)Extractor:它的名字就很好的揭示了它的作用。它主要用是于解析当前获取到的服务器返回内容,这些内容通常是以字符串形式缓存的。在这个队列中,包括了一系列的工具,如解析HTML、CSS等。在解析完毕,取出页面中的URL 后,将它们放入队列中,等待下次继续抓取。在演示中,使用两种Extractor,即ExtractorHTTP和ExtractorHTML。如图10-27所示。

图10-27 设置Extractor

(4)Writer:主要是用于将所抓取到的信息写入磁盘。通常写入磁盘时有两种形式,一种是采用压缩的方式写入,在这里被称为Arc方式,另一种则采用镜象方式写入。当然处理起来,镜象方式要更为容易一些,因此,在演示中命名用镜象Mirror方式。如图10-28所示。

图10-28 设置Writer

(5)PostProcessor:在整个抓取解析过程结束后,进行一些扫尾的工作,比如将前面Extractor解析出来的URL有条件的加入到待处理队列中去。如图10-29所示。

图10-29 设置PostProcessor

值得一提的是,在处理器链的设置过程中,每一个队列中的处理器都是要分先后顺序的,信息的处理流程实际上是不可逆的,因此,在设置时,可以看见在队列的右侧总是有“Up”、“Down”和“Remove”这样的操作,以帮助能够正确的设置其顺序。

在设置完Hertrix所需的处理链后,仍然还不能够马上开始抓取任务,还需对默认的运行时参数做一些修改,以适应真正的需要。

10.1.5 设置运行时的参数

在设置完处理链后,在页面顶部或底部都可以找到如图10-30所示的菜单项,单击“Settings”链接,就进入了属性设置的页面,如图10-30所示。

图10-30 进入“Settings”

在属性设置页面上有非常多的输入域,Heritrix在抓取网页时,这些域是用来对的各个组件的值进行预设,如图10-31所示。

图10-31 属性配置页面

由于页面上的内容非常多,使用者可能无法全部了解它们的作用。所以Heritri x提供了一个辅助功能,来在最大程度上让使用者了解每个参数的含义。如图1 0-32所示。

图10-32 属性提示

可以看到,在每个属性的右侧都有一个小问号,当单击问号时,就会弹出一个J avascript的Alert提示框,上面介绍了当前属性的作用。例如,在上图中单击“max-bytes-download”属性,通过Alert的提示可以知道,它表示的是抓取器最大下载的字节数,当下载字节数超过这个属性上所设定的值时,抓取就会自动停止。另外,如果将这个值设为0,则表示没有限制。

事实上,当在第一次使用Heritrix时,所需要设置的参数并不多,以默认设置为主。以下就来介绍一些必须要在第一次使用时就要配置好的参数。

1.max-toe-threads

该参数的含义很容易了解,它表示Heritrix在运行该抓取任务时,为任务分配多少个线程进行同步抓取。该参数的默认值为100,而事实上根据笔者的经验,在机器配置和网络均很好的情况下,设置50个线程数就已经足够使用了。

2.HTTP-Header

在HTTP-Header这个属性域下面,包括两个属性值“user-agent”和“from”。默认情况下,这两个属性的值如图10-33所示。

图10-33 默认的情况

很明显,这样的值是无法完成真实的HTTP协议的模拟的,所以,必须要将值改掉。图10-34是笔者机器上的一种配置,读者可以借鉴。

图10-34 一种正确的配置

l “@VERSION@”字符串需要被替换成Heritrix的版本信息。

l “PROJECT_URL_HERE”可以被替换成任何一个完整的URL地址。

l “from”属性中不需要设置真实的E-mail地址,只需是格式正确的邮件地址就

可以了。

当正确设置了上述的两个属性后,Heritrix就具备了运行的条件。单击“Submi t”链接,提交这个抓取任务,如图10-35所示。

图10-35 提交任务“Submit job”

10.1.6 运行抓取任务

(1)当单击“Submit job”链接后,会看到图10-36所示的页面。图中最上方很清楚的显示了“Job created”,这表示刚才所设置的抓取任务已经被成功的建立。同时,在下面的“Pending Jobs”一栏,可以清楚的看到刚刚被创建的J ob,它的状态目前为“Pending”。

图10-36 Job提交后的页面

(2)下面启动这个任务。回到“Console”界面上,可以看到,如图10-37所示,刚刚创建的任务已经显示了出来,等待我们开始它。

图10-37 Job提交后的Console界面

(3)在面版的右测,它显示了当前Java虚拟机的一些状态,如图10-38所示,可以看到当前的堆大小为4184KB,而已经被使用了3806KB,另外,最大的堆内容可以达到65088KB,也就是在64M左右。

图10-38 内存状态显示

(4)此时,单击面版中的“Start”链接,就会将此时处于“Pending”状态的抓取任务激活,令其开始抓取

(5)在图10-39中,刚才还处于“Start”状态的链接已经变为了Hold状态。这表明,抓取任务已经被激活。

图10-39 抓取开始

(6)此时,面版中出现了一条抓取状态栏,它清楚的显示了当前已经被抓取的链接数量,另外还有在队列中等待被抓取的链接数量,然后用一个百分比显示出来。

(7)在绿红相间的长条左侧,是几个实时的运行状态,其中包括抓取的平均速度(KB/s)和每秒钟抓取的链接数(URIs/sec),另外的统计还包括抓取任务所消耗的时间和剩余的时间,不过这种剩余时间一般都不准,因为URI的数量总是在不断变化,每当分析一个网页,就会有新的URI加入队列中。如图10-40所示。

图10-40 抓取的速度和时间

(8)在绿红相间的长条右侧,是当前的负载,它显示了当前活跃的线程数量,同时,还统计了Heritrix内部的所有队列的平均长度。如图10-41所示。

图10-41 线程和队列负载

(9)从图10-40和图10-41中看到,真正的抓取任务还没有开始,队列中的总URI数量,以及下载的速率都还基本为0。这应该还处于接收种子URL的网页信息的阶段。让我们再来看一下当Heritrix运行一段时间后,整个系统的资源消耗和进度情况。

(10)在图10-42中,清楚的看到系统的资源消耗。其中,每秒下载的速率已经达到了23KB,另外,平均每秒有19.3个URI被抓取。在负载方面,初设的50个线程均处于工作状态,最长的队列长度已经达到了415个URI,平均长度为5。从进度条上看,总共有3771个URI等待抓取,已经完成了718个URI的抓取,另外,下载的字节总数也已经达到了1390KB。再观察一下左边,仅用时32s。可见,多线程抓取的速度还是很快的。

图10-42 系统运行一段时间后的情况

(11)不过,当抓取继续进行时,观察Java虚拟机的内存使用,发现其已达饱合状态。64M的最大Heap显然不够用。如图10-43所示。

图10-43 Java虚拟机的内存使用

(12)由于这仅是一次演示,可以忽略内存的影响。但在真正的开发过程中,使用Heritrix时,至少应为其分配512M的最大HeapSize,也就是在启动它时,应该设置-Xmx512m这个属性。在使用命令行方式启动Heritrix的脚本中,笔者已经为其加入了该参数,而如果要在使用Eclipse启动Heritrix时也设置该参数,具体的设置方法如图10-44所示。

图10-44 在Eclipse中加入启动参数

(13)按图10-44所示,输入Java虚拟机的参数,就可以增大Heritrix的最大可用内存。如图10-45是使用了-Xmx512m参数后的Console界面。

图10-45 使用了512m的HeapSize

在运行的过程中,值得注意的一点是,进度条的百分比数量并不是准确的。因为这个百分比实际上是已经处理的链接数和总共分析出的链接数的比值。当页面在不断被抓取分析时,链接的数量也会不断的增加,因此,这个百分比的数字也在不断的变化。例如如图10-46所示,此时总共抓取到的链接数已经达到了12280个,处理了799个,它的百分比数量为6%,这显然比图10-42或图10-39中的要小。

图10-46 抓取了799的链接

读者可能已经发现,在Heritrix中,大量的链接被称为URI。从理论上说,URL 应该是一个完整的地址,而URI应该是去除协议、主机和端口后剩余的部分。H eritrix中可能有一定程度的混淆,希望读者不要对此感到奇怪。

至此,已经把Heritrix成功的运行起来,并且抓取了一定的内容。接下来,看一下它是如何存储抓取下来的信息的。

10.1.7 Heritrix的镜象存储结构

由于在前面设置了Writer的类型为MirrorWriter。因此,磁盘上应该留有了所抓取到的网页的各种镜象。那么,究竟Heritrix是如何存储下镜象信息的呢?打开Eclipse的workspace目录,进入heritrixProject的工程,里面有一个j obs目录。进入后,找到以刚才job的名称打头的文件夹,这里面的内容,就是Heritrix在运行时实时生成的。其中,有一个mirror目录,进入后,如图10-47所示。

图10-47 mirror目录下的内容

其实所谓镜象方式存储,就是将URL地址按“/”进行切分,进而按切分出来的层次存储,比如一个URL地址为:

https://www.doczj.com/doc/987873514.html,/index.html

那么它在mirror目录中的保存位置就该是https://www.doczj.com/doc/987873514.html,目录下的index.html 文件。为了验证这一说法的准确性,打开https://www.doczj.com/doc/987873514.html,目录,可以看到图10-4 8。

图10-48 镜象示例

果然,index.html文件就在这个目录下。另外,Heritrix也同样将各种图片或脚本信息按路径进行了保存,例如,在https://www.doczj.com/doc/987873514.html,目录下有一个images目录,其中就保存了URL地址如https://www.doczj.com/doc/987873514.html,/images/xxx.gif这样的图片信息。如图10-49所示。

图10-49 抓取下来的图片文件

10.1.8 终止抓取或终止Heritrix的运行

当用户进行某个抓取任务时,有两种方法会让任务停止下来。

1.正常终止

第一种方法当然就是任务的自然结束,其条件为所有队列中的URI都已经被处理过了。此时,任务将自然终止。在“Jobs”面版上会看到任务已经完成,被加入到“Completed jobs”列表中。

2.强行终止

当然,任务不可能总是运行完,这可能是因为对任务的控制不够,结果抓取了太多不相关的信息,进而造成URL队列无限制膨胀,无法终止。在这种情况下,就需要强行将任务终止。在Console面版上有如图10-50所示的一排链接,最后一个“Terminate”链接,就是用来终止当前运行的任务。

图10-50 终止任务的运行

单击“Terminate”链接后,当前在运行的抓取任务就会立即终止,并同样将任务放置到“Jobs”面版上的“Completed jobs”列表中,只不过在“status”上,它会显示“Finished - Ended by operator”这样的提示。

当然,如果用户希望关闭Heritrix,并终止所有正在运行的任务,也可以单击C onsole面版上的“Shutdown Heritrix software”的链接,此时,Heritrix会弹出一个警告,告诉你如果关闭Heritrix,则当前一切正在运行的任务都将被终止。如图10-51所示。

图10-51 关闭前的提示

如果选择“I’m sure, shut it down”,则Heritrix的WebUI将会终止,虚拟机进程结束。

10.2 Heritrix的架构

在上一节中,详细介绍了Heritrix的使用入门。读者通过上一节的介绍,应该已经能够使用Heritrix来进行简单的网页抓取了。那么,Heritrix的内容究竟是如何工作的呢?它的设计方面有什么突出之处?

本节就将介绍Heritrix的几个主要组件,以此让读者了解其主要架构和工作方式。为后续的扩展Heritrix做一些铺垫。

10.2.1 抓取任务CrawlOrder

之所以选择从CrawlOrder这个类说起,是因为它是整个抓取工作的起点。在上一节中已经说过,一次抓取任务包括许多的属性,建立一个任务的方式有很多种,最简单的一种就是根据默认的order.xml来配置。在内存中,order使用Crawl Order这个类来进行表示。看一下API文档中CrawlOrder的继承关系图,如图1

0-52所示。

图10-52 CrawlOrder类的继承关系图

从继承关系图中可以看到,CrawlOrder继承自一系列的与属性设置相关的基类。另外,它的最顶层基类是javax.management.Attribute,这是一个JMX中的类,它可以动态的反映出Java容器内某个MBean的属性变化。关于这一部分的内容不是我们所要讨论的重点,只需知道,CrawlOrder中的属性,是需要被随时读

取和监测的。

那么究竟使用什么工具来读取order.xml文件中的各种属性呢。另外,一个Cra wlOrder的对象又该如何构建呢?Heritrix提供了很好的工具支持对于order.x ml的读取。在org.archive.crawler.settings包下有一个XMLSettingsHandle

r类,它可以用来帮助读取order.xml。

public XMLSettingsHandler(File orderFile) throws InvalidAttributeValueException

在XMLSettingsHandler的构造函数中,其所传入的参数orderFile正是一个经过对象封装的order.xml的File。这样,就可以直接调用其构造函数,来创建

一个XMLSettingsHandler的实例,以此做为一个读取order.xml的工具。

当一个XMLSettingsHandler的实例被创建后,可以通过getOrder()方法来获取CrawlOrder的实例,这样也就可以进行下一步的工作了。

10.2.2 中央控制器CrawlController

中央控制器是一次抓取任务中的核心组件。它将决定整个抓取任务的开始和结束。CrawlController位于org.archive.crawler.framework中,在它的Field声明中,看到如下代码片段。

代码10.2

Appium完整案例

Appium环境搭建 by Tspring tspring2014@https://www.doczj.com/doc/987873514.html, 随着人类消费观念转变,企业巨头间的无硝烟战场从互联网转移到移动端,为了抢占移动端用户,企业们更是绞尽脑汁,想方设法提高产品质量和增强用户体验,赢得此场战役的关键是产品质量,高质量产品更能捕获用户的芳心。但高质量产品保证的根源是高质量的测试,因此测试时关键。移动应用自动化测试是一个新的领域,移动端平台多样化(Andriod、Ios、FirefoxOS)为自动化测试带来了挑战与困难,随着Appium框架的推出,移动自动化测试进入一个崭新的阶段,自动化入门容易、上手快,轻轻松松测试多个移动平台。因Appium,移动自动化测试更加容易,现在让我为大家揭开Appium神秘面纱吧。 Appium is an open source test automation framework for use with native and hybrid mobile apps.It drives iOS and Android apps using the WebDriver JSON wire protocol. 摘自http://appium.io/从上面那句话我们可以窥探出Appium整个轮廓。Appium是一个开源、免费的移动端自动化测试框架,可以用来测试原生和混合移动应用,同时支持测试多种平台(Ios、Android、FirefoxOS)下应用,底层是采用WebDriver JSON Wire协议去实现的。 Appium测试环境搭建步骤: ?下载、安装JDK&配置Java环境变量 ?下载、安装SDK、ADT&配置Android环境变量 ?下载、安装AppiumForWindow ?创建安卓模拟器 ?在线安装Testng、SVN、Maven等插件 ?Appium简单案例 1、下载、安装JDK&配置Java环境变量 JDK(Java Development Kit)即Java开发工具集,一堆Java开发基本工具比如Javac.exe、Jar.exe、Javadoc.exe etc.同时JDK包含了JRE(Java Runtime Environment)即Java运行环境,因此要进行使用Java编写Appium脚本,前提是安装JDK。 Java语言以前是Sun公司推出,之前可以在Sun主页中下载JDK,但现在Sun公司被Oracle收购了,因此现在想下载JDK最好去Oracle官网下载。 JDK下载地址:https://www.doczj.com/doc/987873514.html,/technetwork/java/javase/downloads/index.html 安装(略),傻瓜式安装,关键是Java_Home 配置环境变量: 1、右键我的电脑--属性--高级--环境变量 2、新建系统变量JAVA_HOME和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0 变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 3.、选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。 变量名:Path 变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 验证配置是否成功:重新打开控制台输入:java-verison,如果显示Java版本信息表示安装成功。

语料库常用统计方法

3.5语料库常用统计方法 第3章前几节对语料库应用中的几种主要技术做了介绍。通过语料检索、词表和主题词表的生成,可以得到一定数量的句子、词汇或结构。为能更好说明所得到的结果的真正意义,常常需要对它们加以统计学分析。本章主要介绍语料分析中的一些常用统计方法。 3.5.1 语料库与统计方法 介绍相关统计方法之前,首先需要了解为什么语料库应用中需要运用统计方法。在2.1节讲到文本采集时,我们知道文本或会话构成了最终的语料库样本。这些样本是通过一定的抽样方法获得的。研究中,我们需要描述这些样本的出现和分布情况。此外,我们还经常需要观察不同语言项目之间在一定语境中共同出现(简称共现)的概率;以及观察某个(些)语言项目在不同文本之间出现多少的差异性。这些需要借助统计学知识来加以描写和分析。 理论上说,几乎所有统计方法都可以用于语料库分析。本章只择其中一些常用方法做一介绍。我们更注重相关统计方法的实际应用,不过多探讨其统计学原理。这一章我们主要介绍语料分析中的频数标准化(normalization )、频数差异检验和搭配强度的计算方法。 3.5.2 频数标准化 基本原理 通常语料检索、词表生成结果中都会报告频数(frequency, freq 或raw frequency )。那么某词(如many )在某语料库中出现频数为100次说明什么呢?这个词在另一个语料库中出现频数为105次,是否可以说many 在第二个语料库中更常用呢?显然,不能因为105大于100,就认定many 在第二个语料库中更常用。这里大家很容易想到,两个语料库的大小未必相同。按照通常的思维,我们可以算出many 在两个语料库中的出现百分比,这样就可比了。这种情况下,我们是将many 在两个语料库中的出现频数归到一个共同基数100之上,即每100词中出现多少个many 。这里通过百分比得到的频率即是一种标准化频率。有些文献中标准化频率也称归一频率或标称频率,即基于一个统一基准得出的频率。 实例及操作 频数标准化,首先需要用某个(些)检索项的实际观察频数(原始频数,raw frequency )除以总体频数(通常为文本或语料库的总词数),这样得到每一个单词里会出现该检索项多少次。在频数标准化操作中,我们通常会在此基础上乘以1千(1万、1百万)得到平均每千(万、百万)词的出现频率。即: 1000?=总体频数 观测频数标准化频率(每千词) (注:观测频数即检索词项实际出现的次数;总体频数即语料库的大小或总形符数。) 例如,more 在中国学生的作文里出现251次,在英语母语者语料中出现475次。两个语料库的大小分别为37,655词次和174,676词次。我们可以根据上面的公式很容易计算出251和475对应的标准化频率。另外,我们还可以利用Excel 或SPSS 等工具来计算标准化频率。比如,可以将实际观察频数和语料库大小如图3.5.1输入相应的单元格,然后在C1单元格里输入=(A1/B1)*1000即可得到中国学生每千词使用more 约为6.67次。要得到母语

自动化测试完整案例

Appium环境搭建 随着人类消费观念转变,企业巨头间的无硝烟战场从互联网转移到移动端,为了抢占移动端用户,企业们更是绞尽脑汁,想方设法提高产品质量和增强用户体验,赢得此场战役的关键是产品质量,高质量产品更能捕获用户的芳心。但高质量产品保证的根源是高质量的测试,因此测试时关键。移动应用自动化测试是一个新的领域,移动端平台多样化(Andriod、Ios、FirefoxOS)为自动化测试带来了挑战与困难,随着Appium框架的推出,移动自动化测试进入一个崭新的阶段,自动化入门容易、上手快,轻轻松松测试多个移动平台。因Appium,移动自动化测试更加容易,现在让我为大家揭开Appium神秘面纱吧。 Appium is an open source test automation framework for use with native and hybrid mobile apps. It drives iOS and Android apps using the WebDriver JSON wire protocol. 摘自http://appium.io/ 从上面那句话我们可以窥探出Appium整个轮廓。Appium是一个开源、免费的移动端自动化测试框架,可以用来测试原生和混合移动应用,同时支持测试多种平台(Ios、Android、FirefoxOS)下应用,底层是采用WebDriver JSON Wire协议去实现的。 Appium测试环境搭建步骤: ?下载、安装JDK&配置Java环境变量 ?下载、安装SDK、ADT&配置Android环境变量 ?下载、安装AppiumForWindow ?创建安卓模拟器 ?在线安装Testng、SVN、Maven等插件 ?Appium简单案例 1、下载、安装JDK&配置Java环境变量 JDK(Java Development Kit)即Java开发工具集,一堆Java开发基本工具比如Javac.exe、Jar.exe、Javadoc.exe etc.同时JDK包含了JRE(Java Runtime Environment)即Java运行环境,因此要进行使用Java编写Appium脚本,前提是安装JDK。 Java语言以前是Sun公司推出,之前可以在Sun主页中下载JDK,但现在Sun公司被Oracle收购了,因此现在想下载JDK最好去Oracle官网下载。 JDK下载地址:https://www.doczj.com/doc/987873514.html,/technetwork/java/javase/downloads/index.html 安装(略),傻瓜式安装,关键是Java_Home 配置环境变量: 1、右键我的电脑--属性--高级--环境变量 2、新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0 变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 3.、选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。 变量名:Path 变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 验证配置是否成功:重新打开控制台输入:java -verison,如果显示Java版本信息表示安装成功。 2、下载、安装ADT&配置Android环境变量 ADT(Android Development Kit,即安卓开发工具包)属于SDK(Software Development Kit, 即软件开发工具包)

漫长Appium之路(二)——Appium安装与使用总结

漫长Appium之路(二)——Appium安装与使用总结 前面介绍了iOS自动化工具的Appium所需的虚拟机环境,接下来介绍下Appium 的安装与使用方法,这个足足折腾我将近一个星期。网上没有什么详细的资料, 对于遇到的各种各样问题也没用提供明确的解决方法。这里我贴出我的总结经验,和大家分享。 Appium提供了两种安装使用方式:图形化界面和命令行控制。无论使用哪种方式安装,以下软件都最好准备并安装完毕: 1.Xcode Command Line Tools:必须。提供Xcode的命令行调用工具,需对应OS版本和Xcode版本。可从官网上下载或着远景论坛搜索。 2.Node.js:非必须。命令行使用那一定要下载安装Node.js,官网上下载安装包即可。图形化的不确定,不过最好安装上,也不费事。 3.Mac上的Eclipse和JDK:非必须。但是如果想用Java编写appium测试用例的话,那么这些开发环境最好准备着。 使用Java的话,需要导入以下三个包,都是刻骨铭心的总结啊: java-client-1.5.0.jar:appium官方提供的Java客户端,官网上下载: https://https://www.doczj.com/doc/987873514.html,/#search|ga|1|g%3Aio.appium%20a%3Ajava-client selenium-server-standalone-2.42.2.jar:selenium官方提供的Jar包,appium 会需要使用到这些类,使用selenium的最新版本搭配appium的最新版本,官网下载,非常的大,30多M gson-2.1.jar:谷歌官方提供的json工具,运行工程时会需要用到,这个百度就能搜到。 这里我先以Appium官网提供的.dmg作为示例说明Appium用法: 安装说明: 1.首先去Appium官网上下载appium.dmg。官网地址: http://appium.io/downloads.html。 需要注意Appium的版本可能跟Mac OS版本和Xcode版本有关系,像我Xcode 是4.5的最新版本就经常用不起来,不过用0.13.0和1.0.0是没问题的,可以多下载几个版本试一下。 2.以我的0.1 3.0版本为例。先把模拟器打开,运行你想录制的程序。打开Appium 以后先授权,然后作如下配置:

Appium工具分析

Appium是最近比较热门的框架,社区也很活跃。这个框架应该是是功能最强大的。 它的优点: o开源; o支持Native App、Hybird App、Web App; o支持Android、iOS、Firefox OS; o Server也是跨平台的,你可以使用Mac OS X、Windows或 者Linux; 它的哲理是: 用Appium自动化测试不需要重新编译App; 支持很多语言来编写测试脚本,Java、Javascript、PHP、Python、C#、Ruby等主流语言; 不需要为了自动化测试来重造轮子,因为扩展了WebDriver。(WebDriver是测试WebApps的一种简单、快速的自动化测试框架,所以有Web自动化测试经验的测试人员可以直接上手); 移动端自动化测试应该是开源的; 它的设计理念: Client/Server架构,运行的时候Server端会监听Client端发过来的命令,翻译这些命令发送给移动设备或模拟器,然后移动设备或模拟器做出响应的反应。正是因为这种架构,所以Client可以使用Appium client libraries多种语言的测试脚本,而且Server端完全

可以部署在服务器上,甚至云服务器。 Session,每个Client连接到Server以后都会有一个Session ID,而且Client发送命令到Server端都需要这个Session ID,因为这个seesion id代表了你所打开的浏览器或者是移动设备的模拟器。所以你甚至可以打开N个Session,同时测试不同的设备或模拟器。Desired Capabilities,其实就是一个键值对,设置一些测试的相关信息来告诉Server端,我们需要测试iOS、还是Android,或者换是WebApp等信息。 Appium Server是Node.js写的,所以可以直接用NPM来进行安装 Appium Clients,Mac OS和Win下提供GUI,不需要装Node.js,方便测试人员操作 相关限制: 如果你在Windows使用Appium,你没法使用预编译专用于OS X 的.app文件,因为Appium依赖OS X专用的库来支持iOS测试,所以在Windows平台你不能测试iOS Apps。这意味着你只能通过在Mac上来运行iOS测试。 总结:在iOS部分是封装了UIAutomation;Android 4.2以上是用UiAutomator,Android 2.3 ~ 4.1用的是Instrumentation,也就说Appium同时封装了UiAutomator和Instrumentation。所以Appium拥有了以上几大框架的所有优点:跨App,支持Native

语料库

关于语料库的三点基本认识:语料库中存放的是在语言的实际使用中真实出现过的语言材料;语料库是以电子计算机为载体承载语言知识的基础资源;真实语料需要经过加工(分析和处理),才能成为有用的资源; 在语言学中,语料库(Corpus)指大量文本的集合,库中的文本(称为语料)通常经过整理,具有既定的格式与标记,特指计算机存储的数字化语料库。 语料库是语料库语言学研究的基础资源,也是经验主义语言研究方法的主要资源。应用于词典编纂,语言教学,传统语言研究,自然语言处理中基于统计或实例的研究等方面。 分类 语料库有多种类型,确定类型的主要依据是它的研究目的和用途,这一点往往能够体现在语料采集的原则和方式上。有人曾经把语料库分成四种类型:(1)异质的(Heterogeneous):没有特定的语料收集原则,广泛收集并原样存储各种语料;(2)同质的(Homogeneous):只收集同一类内容的语料;(3)系统的(Systematic):根据预先确定的原则和比例收集语料,使语料具有平衡性和系统性,能够代表某一范围内的语言事实;(4)专用的(Specialized):只收集用于某一特定用途的语料。 除此之外,按照语料的语种,语料库也可以分成单语的(Monolingual)、双语的(Bilingual)和多语的(Multilingual)。按照语料的采集单位,语料库又可以分为语篇的、语句的、短语的。双语和多语语料库按照语料的组织形式,还可以分为平行(对齐)语料库和比较语料库,前者的语料构成译文关系,多用于机器翻译、双语词典编撰等应用领域,后者将表述同样内容的不同语言文本收集到一起,多用于语言对比研究。目前已经累积了大量各种类型的语料库,如:葡萄牙语种树库、面向文本分类研究的中英文新闻分类语料库、路透社文本分类训练语料库、中文文本分类语料库、大开放字幕库OpenSubtitles的多语言平行语料数据(OpenSubtitles Corpus)、《圣经》双语语料库("Bible" bilingual corpus)、Short messages service(SMS ) corpus(短消息服务(SMS)语料)等。 特征 语料库有三点特征 1.语料库中存放的是在语言的实际使用中真实出现过的语言材料,因此例句库通常不应算作语料库; 2.语料库是承载语言知识的基础资源,但并不等于语言知识;

语料库的应用(最终)

语料库的应用 语料库方法广泛应用于语言学理论研究、军事等领域。当代语料库语言学(以语料库方法为取向的研究语言的分支就被称为语料库语言学)已是高歌猛进,日新月异,新的语料库更是层出不穷,经过科学选材和标注,具有适当规模的语料库能够反映和记录语言的实际使用情况,人们通过语料库观察和把握语言事实,分析和研究语言系统的规律,极大地方便了语言研究者。 军事语料库对信息化条件下的军事斗争具备潜在价值,积极开展军事语料库的研究和建设实践活动,并把研究成果转化到实战之中。和平时期对信息化高科技武器的建设不可小视,对战场态势的综合信息捕捉、把握和利用的能力建设至关重要,但对身边已有的各类信息的综合收集和利用也同样不可忽视。军事语料库的建设正是针对实现信息化战争中争夺与占有信息资源、获取不对称的战争中的信息掌握和信息利用的不对称优势。 【一】、语料库成为语言学理论研究的基础资源 语料库是计算语言学的基础。语料库对应的英文是corpus,复数形式为corpora。这个词既可以指语料也可以表示语料库。英国语言学专家戴维?克里斯特尔认为,语料库“指收集的一批语言学数据,或为书面文本或为言语录音的转写,可用作语言学描写的出发点,也

可作为验证语言假说的手段。计算机语料库是一大批机器可读文本的结集。各种为不同目的而建立的语料库可以应用在词汇、语法、语义、语用、语体研究,社会语言学研究,口语研究,词典编纂,语言教学以及自然语言处理、人工智能、机器翻译、言语识别与合成等领域。 起初语料库主要用于语言学研究,而且建成的语料库多为通用语料库,服务的研究领域主要集中于词典编纂、词语搭配与结构、基于平行语料库的英汉互译、文学作品和作家语言风格的研究以及基于语料库的外语教学研究等。随着研究的不断深入,各种专业领域语料库也相继建立,语料库的应用研究逐渐扩大到其他学科。 我国在语料库的应用上还处于起步阶段,在计算语言学和语言信息处理领域,语料库主要用来为统计语言模型提供语言特征信息和概率数据,在语言研究的其他领域,多使用语料的检索和频率统计结果。 目前国外已建成且较有影响的主要为以下的语料库:美国:布朗大学的今日美国英语标准语料库(The Brown University Standard Corpusof Present Day American English)、兰卡斯特一奥斯陆/卑尔根语料库(The Lancast-er-Oslo/Bergen (LOB) Corpus)、英语语库(TheBank of English)、英国国家语料库(The BritishNational Corpus(BNC、伦敦一隆德语料库(Lon-don -Lund Corpus(LLC》、美国传统中介语料(American Heritage Intermediate(AHI) Corpus)以及英语国际语料库(The Intemational Corpus ofEnglish(ICE》等。

ECLIPSE使用过程中的一些问题总结

1.Syntax error,parameterized types are only available if source level is1.5 在eclipse中菜单Window----preferences----java-----compiler把右边中的Compiler compliance level改为1.6 右击项目,修改properties,找到java compiler修改compiler compliance level为1.6 ------------------------------------------------------------------------------------------------------------------------------------ 2.Java的Swing入门,继承JFrame报错问题,在使用JFrame时出错 应该是你环境变量配置的问题,先确认下环境变量是否正确, 如果还有问题再看看下面的解决办法:Eclipse默认把这些受访问限制的API设成了ERROR。只要把Windows-Preferences-Java-Complicer-Errors/Warnings 里面的Deprecated and restricted API中的Forbidden references(access rules)选为Warning就可以编译通过。 -------------------------------------------------------------------------------------------------------------------------- Appium java环境报https://www.doczj.com/doc/987873514.html,ng.NullPointerException错误(2014-12-0417:44:49) 标签:appium java https://www.doczj.com/doc/987873514.html,ng.nullpointe分类:手机自动化测试 最近我在学习Appium java环境下的手机自动化测试,于是按照网上说的步骤搭建环境, 可是一步步地设置完成后,右击刚刚新建的测试用例,选择“JUNIT”运行的时候, 弹出一下对话框架,报“an internal error occurred during:‘Launching LoginTest’https://www.doczj.com/doc/987873514.html,ng.NullPointerException”错误, 然后没有任何输出。这下傻了,只好去网上查一下,网上的问题是五花八门,各种尝试后发现没有解决掉问题,只好自己排查了。 排查问题 1,查看各位引用,Appium,selenium,junit的包都包含了,在Build path里面设置正确,此处没有问题。 2,APK的各种情况,版本安装是否正确,要测试的和提供的APK的版本是否一致。经查看,是一致的,此处Pass! 3,Capabilities各种参数的设置,对比了网上提供的实例和我以前用Python写的,运行成功的测试用例的设置, 发现完全一致,也没有任何问题。 4,现在只好查看一下Eclipse的问题了,查看WorkSpace下的.metadata文件夹下的.log文件,看一下是否存在问题。 经查看,发现有org.eclipse.jdt.junit相关的错误,于是我就在Eclipse下查找这个jdt.junit相关的插件, 发现没有找到,现在问题就定位到了,肯定是这个插件出问题了!! 解决问题

美篇常见使用问题.doc

美篇常见使用问题 1、如何分享文章? 文章正文底部点击分享按键即可选择需要的分享平台。目前可分享渠道包含:微信好友、微信群、朋友圈、微博、QQ、QQ空间、其它。2、文章分享到微信后,如何关闭标题前显示的昵称? 点击“我的”页面左上角齿轮符号,选择“通用设置—分享标题含昵称”,将此项开关关闭后,分享的缩略框即不再显示昵称。 3、文章如何投稿? 打开需要投稿的文章,正文底部点击“分享——我要投稿上美篇首页”,选择专题或圈子,点击右侧的“投稿”按钮即可。目前一篇文章只能投稿一次,且每7天只可投一次。 4、如何修改已经发布的文章? 在需要修改的文章正文界面,右击右上角“操作——编辑”,即可重新调整文章内容,修改后请及时发布。 5、文章标题如何居中? 文章标题暂时不支持手动居中操作,建议更换为标题居中展示模板。目前多数模板都是支持标题居中展示的,可根据需要选择添加。 6、如何修改文章权限? 文章正文的右上角点击“操作——文章设置——谁可以看”,即可调整文章阅读权限。 目前可设置的权限类型为:1公开(所有人可见,且录入个人专栏); 2、不公开(自信控制分享范围,仅被分享的人可见); 3、加密(设

置一个密码,凭密码访问);4、私密(仅自己可见)。 7、如何让文章自动播放? 文章编辑完成后点击“下一步——模板”,选择动态模板后完发布,文章就可以以自动播放的形式展示。 8、如何开启水印? 点击“我的”页面左上角齿轮符号,选择“通用设置——图片水印”,打开后再发文。老文章的图片不会自动生成水印,需要把老文章复制一篇,新复制的文章就会显示水印了。 9、如何修改文章的显示日期? 美篇文章目前还不支持修改日期,文章默认每一次编辑的时间,如需要显示最新的日期,需把文章复制一篇,复制的副本显示当天的日期。 10、如何复制文章? 在文章正文界面,点击右上角的“操作——复制”,复制成功后新文章以草稿形式存大,可点击进入正文,编辑调整后发布文章。 11、如何删除文章? 目前删除文章分为两种方式: 1、打开文章,点击右上角的“操作——删除”; 2、“我的——全部文章”页面,安卓手机长按文章点击删除。 3、注:删除后的文章在“回收站”内,回收站的文章支持手动恢复,安卓手机长按文章点击“恢复” 12、如何删除评论? 删除评论只能在客户端内操作,目前仅以下两种情况可删除:

如何自建英语语料库

论自建小型学习者语料库的方法及作用 ——以自建中学生英语写作语料库为例 曹鹤 北京市第三十一中 摘要: 大型语料库的出现和发展在研究语言的用法、翻译、教学、教材编写以及词典编撰等方面起着重要作用,但对于处于一线从事基础教育的外语教师而言,针对性和使用性不强。本文以自己建立小型基础英语教学中中学生写作语料库为例介绍了小型学习者语料库建设的可行性、方法和应用,借以提倡广大一线从事基础教育的教师利用高科技所带来的成果,武装和丰富自己,让自己的教学科学化、客观化。 关键词:小型学习者语料库;英语写作;基础教育 自20世纪60年代至今,语料库从萌芽阶段已经发展到广泛应用于语言研究的各个方面,如:词典编撰、语言学研究、教材编写、翻译、语言教学等等。同时,计算机技术的高速发展使语料库(Corpus)在过去的50多年来也得到了长足的发展,突出表现就是大型语料库的出现。大型语料库为语言研究提供了可靠的信息,但正因为其包罗万象、内容泛泛,在辅助基础教学研究等方面缺乏针对性,实用性不强。作者认为广大英语教师可以根据自己的实际需要建设小型学习者语料库,开展有针对性地研究,并将其应用到教学中。本文以建立中学生写作语料库为例介绍建设小型学习者语料库的方法、以及如何使用小型语料库等方面做主要论述,向基础英语教师展示如何运用这一新技术来辅助英语写作教学。 一、语料库简介 建设语料库之前,我们应首先明白什么是语料库。语料库并不复杂,它通常指为语言研究收集的、用电子形式保存的语言材料,由自然出现的书面语或口语的样本汇集而成,用来代表特定的语言或语言变体(杨惠中,2004)。语料库可以帮助人们观察和把握语言事实,分析和研究语言系统的规律。从语料库语言学的发展历程可以看出,语料库的用途主要体现在对语言现象以及语言本质的研究,如语言统计、词典编撰、词汇搭配和自然语言处理等方面(顾曰国,1988)。现在语料库也开始逐渐应用到语言教学研究中。根据邢富坤(2006)的统计,国内基于语料库的教学研究的数量越来越大,将语料库应用于外语教学的趋势也越来越明显。

robot framework安装和使用

Robot Framework +Appium的简单教程 RF+Appium介绍 网上文章较多,不做赘述 Robot Framework Appium RF 的安装和配置 在使用RF(Rebot framework)的时候需要Python 或Jython 环境,具体可根据自己的需求来确定。本文以在有Python 的环境的机器上安装和使用RF 为例。 在配置过程中需要安装如下包:python 2.7、wxPython、robot framework、robot framework ride、robot framework selenium library。 安装Python 2.7 RF 框架是基于Python 语言的,所以一定要有Python 环境。可以通过下面的下载页面下载对应的Python 版本。 下载页面:https://https://www.doczj.com/doc/987873514.html,/downloads/。 下载完成后,选择默认项进行安装 安装完后,需要设置环境变量:计算机—属性—高级系统设置—环境变量—系统变量—Path,写入C:\Python27 和C:\Python27\Scripts(更改为您指定路径即可)。

同时我们也可以通过DOS 环境来验证安装的Python 信息。 安装WxPython 下载页面: https://www.doczj.com/doc/987873514.html,/download.php#stable。 在选择版本下载的时候要注意选择与Python 版本对应的版本,并且选择unicode 版本,比如版本:wxPython2.8-win32-unicode-py26.exe,否则安装完成后不能支持中文。 下载完成后,选择默认项进行安装即可。 https://https://www.doczj.com/doc/987873514.html,/projects/wxpython/files/wxPython/2.8.12.1/ 安装PyCrypto 下载页面:https://www.doczj.com/doc/987873514.html,/python/modules.shtml#pycrypto。 选择对应的pycrypto installer 版本,进行默认安装。需要在安装库(如SHHLibrary)之前进行安装,否则会出现错误“Can't find vcvarsal.bat”。 安装Robot Framwork 进入Python 的安装路径,执行命令“pip install robotframework”或者通过下载页面 https://https://www.doczj.com/doc/987873514.html,/pypi/robotframework下载源码。 解压后,执行命令“python setup.py install”进行安装。进入Python 的安装路径,执行命令“pip install robotframework”。 pip install robotframework easy_install robotframework (3.0)

Appium测试环境搭建(python 实例)

Appium 自动化测试环境配置(附实例) (python) 本文档对appium自动化测试平台的环境搭建给出指导。自动化测试的语言选择python(python3.4),系统环境为Win7(x64),除了环境配置外,最后给一个简单的appium实例,讲解了详细的过程,大家可以运行一下。 一、配置环境步骤说明 1.说明: 整个环境搭建分为java环境,安卓开发环境,安卓虚拟机,python,appium 五个主要的步骤 2.软件准备 JDK : 官网下载(官网URL)(记得要下载X64版本的),当前使用jdk-7u80-windows-x64 云盘下载地址:https://www.doczj.com/doc/987873514.html,/s/1bPdeO2 安卓开发环境:直接使用adt集成包,官网下载(官网URL)或者这个路径下载https://www.doczj.com/doc/987873514.html,/ ,当前使用dt-bundle-windows-x86_64-20140321 云盘下载地址:https://www.doczj.com/doc/987873514.html,/s/1bphXWsf 安卓虚拟机:Gemotion(可选,不必须) 云盘下载地址: Python:官网下载(官网URL)当前使用python3.4 云盘地址:https://www.doczj.com/doc/987873514.html,/s/1slwy5zR Appium: appium 依赖于node.js,其下载地址https://www.doczj.com/doc/987873514.html,/download/) 云盘地址: Appium 下载地址: 二、Java环境配置 1.安装jdk和jre,尽量不要选择默认路径的program files路径下面(路径中带空格可能会引起不可预见的问题)。 2.设置环境变量 计算机→属性→高级系统设置→高级→环境变量 a.系统变量→新建JAVA_HOME 变量。 变量值填写jdk的安装目录(本人是E:\Java\jdk1.7.0) b.系统变量→寻找Path 变量→编辑 在变量值最后输入%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; (注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码) c.系统变量→新建CLASSPATH 变量 变量值填写.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点) d.检验是否配置成功运行cmd 输入java -version (java 和-version 之间有空格) 显示版本信息则说明安装和配置成功。 三、安卓开发环境配置 1.解压adt集成包到合适的路径下面,比如D:\adt\ 2.设置安卓环境变量 配置环境变量,设置ANDROID_HOME 系统变量为你的Android SDK 路径,并把tools和platform-tools两个目录加入到系统的Path路径里。 添加变量名:ANDROID_HOME 值: D:\adt\sdk

语料库相关书籍推荐

Meyer, C. F. 2002. English Corpus Linguistics: An Introduction.《英语语料库语言学导论》. Cambridge: Cambridge University Press.(外教社2008年引进) Wolfgang, Teubert & Anna Cermakova. 2007. Corpus Linguistics: A Short Introduction.《语料库语言学简论》. London & New York: Continuum International Publishing Group Ltd. (世界图书出版公司2009年引进) 曹竞,2012,《语料库语言学实用入门教程(Corpus Linguistics: A Practical Introduction)》。北京:北京理工大学出版社。 桂诗春,2009,《基于语料库的英语语言学语体分析》。北京:外语教学与研究出版社。 国防,2012,《基于语料库的英语话语标记语分析》。合肥:安徽大学出版社。 何安平,2004,《语料库语言学与英语教学》。北京:外语教学与研究出版社。 何安平,2010,《语料库辅助英语教学入门》。北京:外语

教学与研究出版社。 华南师范大学外国语学院编,2005,《语料库语言学的研究与应用》。长春:东北师范大学出版社。 黄昌宁,李涓子,2002,《语料库语言学》。北京:商务印书馆。 卢植,2012,《基于语料库的汉英语义基元的语义韵对比研究》。北京:外语教学与研究出版社。 潘璠,2012,《基于语料库的语言研究与教学应用》。北京:中国社会科学出版社。 王立非、梁茂成等,2007,《计算机辅助第二语言研究方法与实用》。北京:外语教学与研究出版社。 王世杰、赵玉华、武永胜,2013,《基于语料库的医学英语词汇研究与学习》。兰州:兰州大学出版社。 王永庆,2014,《计算机技术、语料库与语言测试》。北京:科学出版社。 卫乃兴,李文中,濮建忠等,2005,《语料库应用研究》。上海:上海外语教育出版社。

用 Pytest+Appium+Allure 做 UI 自动化的那些事

文本主要介绍下Pytest+Allure+Appium 记录一些过程和经历,一些好用的方法什么的,之前也没写过什么文章,文章可能有点干,看官们多喝水 主要用了啥: ?Python3 ?Appium ?Allure-pytest ?Pytes t Appium 直接执行adb shell 方法 # Appium 启动时增加--relaxed-security 参数 Appium 即可执行类似ad b shell的方法 > appium -p 4723--relaxed-security # 使用方法 def adb_shell(self, command, args, includeStderr=False): """ appium --relaxed-security 方式启动 adb_shell('ps',['|','grep','android']) :param command:命令 :param args:参数 :param includeStderr: 为 True 则抛异常 :return: """ result = self.driver.execute_script('mobile: shell',{ 'command': command, 'args': args, 'includeStderr': includeStderr, 'timeout':5000 }) return result['stdout'] Appium 直接截取元素图片的方法 element = self.driver.find_element_by_id('cn.xxxxxx:id/login_si gn') pngbyte = element.screenshot_as_png

一个简单的HTK入门参考例子

一个简单的HTK入门参考例子 主要参考HTKBook和HTK(v.3.1): Basic Tutorial――Nicolas Moreau 1 综述 目标:建立一个孤立词识别系统,只包含yes和no两个词。 步骤: 1.1 A: 创建一个语料库,yes和no各录5次 B: 声学分析,把waveform的声音文件转换为mfcc格式 C: 模型定义: 为词典里的每一个词建立一个HMM原型 D: 模型训练: HMM模型初始化和迭代 E: 问题定义,即语法定义 F: 对测试集合进行识别 G: 评测 建立一些文件夹 1.2 HTK工具的一些标准选项 1.3 2 创建语料库 我们来录yes和no的读音,这些要用来做训练。同时,每段语音都要被标注,也就是说有一个文本文件与其对应描述它的内容。录音和标注可以用HSLab完成。 name.sig HSLab 打开了录音和标注的图形界面。 录音 2.1 按Rec开始录音,按Stop结束。这样一个名字为name_0.sig的声音文件就被记录在当前目录了。如果你接着录音,name_1.sig就会被记录。Sig是HTK的格式。 标注 2.2 按Mark选择你要标注的段落,然后按Lableas键入名字,然后回车。我们的每段语音分成三部分,静音(sil), yes或者no, 静音(sil)。相邻的段不能重叠,可以有小的间隔。按Save 存储,Quit退出。 标注文件.lab格式如下: 4171250 9229375 sil 9229375 15043750 yes 15043750 20430625 sil 重命名 2.3 3 声学分析 从原始的声音文件转换为特征矢量文件: Hcopy –A –D –C analysis.conf –S targetlist.txt analysis.conf是一个配置文件,说明了特征矢量的特性。 targetlist.txt列出了源文件和目的文件的位置,即声音文件和特征文件。

基于appium的性能自动化使用说明

一、关于appium 1、概念 Appium是一个开源的,适用于原生或混合移动应用应用( hybrid mobile apps)的自 动化测试平台. Appium应用WebDriver: JSON wire protocol 驱动安卓和iOS移动应用. 2、特点 A、开源、跨平台(支持ios、android、hybrid) B、基于 Apple 、 Google原生UIAutomator框架,支持所有自动化apis C、使用 Selenium JSON Wire Protocol,支持selenium支持的语言及selenium webdriver; 二、环境依赖 1、开发环境 iOS Mac OSX 10.7+ XCode 4.5+ w/ Command Line Tools Android Mac OSX 10.7+ or Windows 7+ or Linux Android SDK ≥ 16 (SDK < 16 in Selendroid mode) 2、Android注意事项 A、需要安装jdk、eclipse、sdk保证adb shell等正常运行 B、Root过的手机 or 模拟器。Eg.blue stacks 不要用google原生模拟器,超级慢; 不要用genymotion。卫士不支持在genymotion上安装; C、Android sdk最低版本支持api level 18。因此选择device or emulator时注意 系统版本号 D、尽量不要选用miui,MX m9之类定制rom; 三、a ppium安装 1、下载路径 https://https://www.doczj.com/doc/987873514.html,/appium/appium.app/downloads/ 下载下载1.1及以上版本 2、安装包,解压,appium.exe,执行测试工程前必须启动appium服务 两种方式: A、点击appium.exe,右上角有启动按钮,无需设置任何参数 B、Cmd下运行命令:appium

相关主题
文本预览
相关文档 最新文档