您的位置:首页 > 其它

Windows下调用nutch的脚本,可实现自动运行

2006-07-05 22:13 525 查看
现在正对搜索引擎有兴趣,
我的搜索基于nutch,并结合了ICTCLAS,分词和速度都不错。
这样做可以不用crywin来模拟linux
下面是在win nt下调用nutch的脚本,
你可以自己改一下,这样就可以很方便的实现自动运行了。
有兴趣的朋友可以用一下,大大方便了操作。

nutch.bat
@cmd /V:on /c %~dp0nutch1.bat %*

nutch1.bat
@echo on
rem *********************************************************************

rem * A script to launch nutch on Windows 2000/XP System.
rem *
rem * Written by babatu
rem * babatu@gmail.com blog: blog.babatu.com
rem *
rem * Because delayed environment is used, cmd /V:on should be used to
rem * run this script.
rem *****************************************************************
if "%OS%"=="Windows_NT" @setlocal
if "%OS%"=="WINNT" @setlocal

if "%1" == "" goto :msg
goto :begin
:msg
echo "Usage: nutch COMMAND"
echo "where COMMAND is one of:"
echo " crawl one-step crawler for intranets"
echo " readdb read / dump crawl db"
echo " readlinkdb read / dump link db"
echo " inject inject new urls into the database"
echo " generate generate new segments to fetch"
echo " fetch fetch a segment's pages"
echo " parse parse a segment's pages"
echo " segread read / dump segment data"
echo " updatedb update crawl db from segments after fetching"
echo " invertlinks create a linkdb from parsed segments"
echo " index run the indexer on parsed segments and linkdb"
echo " merge merge several segment indexes"
echo " dedup remove duplicates from a set of segment indexes"
echo " plugin load a plugin and run one of its classes main()"
echo " server run a search server"
echo " or"
echo " CLASSNAME run the class named CLASSNAME"
echo "Most commands print help when invoked w/o parameters."
pause
goto :end

:begin
rem %~dp0 这个脚本的扩展path ( expanded pathname of the current script under NT)
set DEFAULT_NUTCH_HOME=%~dp0..
rem set DEFAULT_NUTCH_HOME=..

if "%NUTCH_HOME%"=="" set NUTCH_HOME=%DEFAULT_NUTCH_HOME%
set DEFAULT_NUTCH_HOME=""
rem 设置默认DEFAULT_NUTCH_HOME

echo %NUTCH_HOME%

rem set _USE_CLASSPATH=yes

if "%CLASSPATH%"=="" ( set CLASSPATH=%JAVA_HOME%/lib/tools.jar) ELSE set
CLASSPATH=%CLASSPATH%;%JAVA_HOME%/lib/tools.jar
set CLASSPATH=%CLASSPATH%;%NUTCH_HOME%/conf;
echo %CLASSPATH%
echo before other

rem for developers, add plugins, job & test code to CLASSPATH
if exist %NUTCH_HOME%/build/plugins set
CLASSPATH=%CLASSPATH%;%NUTCH_HOME%/build

for /R %NUTCH_HOME%/build %%i in (nutch*.job) do set
CLASSPATH=!CLASSPATH!;%%i
if exist %NUTCH_HOME%/build/test/classes set
CLASSPATH=%CLASSPATH%;%NUTCH_HOME%/build/test/classes

rem for releases, add Nutch job to CLASSPATH
for /R %NUTCH_HOME% %%i in (nutch*.job) do set CLASSPATH=!CLASSPATH!;%%i
rem add plugins to classpath
if exist %NUTCH_HOME%/plugins set CLASSPATH=%CLASSPATH%;%NUTCH_HOME%
rem add libs to CLASSPATH
for /R %NUTCH_HOME%/lib %%f in (*.jar) do set CLASSPATH=!CLASSPATH!;%%f

echo %CLASSPATH%

rem translate command
if "%1"=="crawl" set CLASS=org.apache.nutch.crawl.Crawl
if "%1"=="inject" set CLASS=org.apache.nutch.crawl.Injector
if "%1"=="generate" set CLASS=org.apache.nutch.crawl.Generator
if "%1"=="fetch" set CLASS=org.apache.nutch.fetcher.Fetcher
if "%1"=="parse" set CLASS=org.apache.nutch.parse.ParseSegment
if "%1"=="readdb" set CLASS=org.apache.nutch.crawl.CrawlDbReader
if "%1"=="readlinkdb" set CLASS=org.apache.nutch.crawl.LinkDbReader
if "%1"=="segread" set CLASS=org.apache.nutch.segment.SegmentReader
if "%1"=="updatedb" set CLASS=org.apache.nutch.crawl.CrawlDb
if "%1"=="invertlinks" set CLASS=org.apache.nutch.crawl.LinkDb
if "%1"=="index" set CLASS=org.apache.nutch.indexer.Indexer
if "%1"=="dedup" set CLASS=org.apache.nutch.indexer .DeleteDuplicates
if "%1"=="merge" set CLASS=org.apache.nutch.indexer.IndexMerger
if "%1"=="plugin" set CLASS=org.apache.nutch.plugin.PluginRepository
if "%1"=="server" set CLASS='
org.apache.nutch.searcher.DistributedSearch$Server'
if "%CLASS%"=="" set CLASS=%1

%JAVA_HOME%/bin/java -cp %CLASSPATH% %CLASS% %*

if "%OS%"=="Windows_NT" @endlocal
if "%OS%"=="WINNT" @endlocal

:end

搜索不是目的,能够实现搜索那是非常容易的事情,随便下载一个ASP或者其它的搜索源码就可以轻松实现,有四个关键,1。不要说亿了,数据达到1000万时,你的搜索速度是多少
2。你的搜索引擎是不是可以发现最新的流行词语。
3。网页如何分类,如何明确用户的本意,或者接近。
4。内容的广泛度和专业度,能不能达到,怎么平衡。本人只是抛砖引玉,让大家见笑了。

由于NUTCH是apache的一个开源项目,所以它的性能是不错的。
现在我所做的就是:
1。发现在新词:
发现最新的流行词语,可以对用户的搜索词进行识别,对于词典中没有,它会把它当作单字来处理,这时,对一段时间内出现频率高的单字组合,设定一个阈值,把它识别出来,加到一个临时词典中,等更长时间的识别后,就把它加入词典中。
2。 网页如何分类,如何明确用户的本意,或者接近。
nutch是第二代的搜索引擎,全文索引,好像google baidu等对网页也是不分类的,所以基于它,并不实现网页的分类。如果要向这个方向扩展,现在好像比较好的方法是对网页中一定数量(权重最大)的关键字(词)用训练集的办法,把它们和与事先人工分类的样本进行对比,可以有很高的识别率。

4。内容的广泛度和专业度,能不能达到,怎么平衡
广泛度在nutch 中好像就得不断抓取更多的网页来保证了。在一个趋近现时中实际的网页的索引库中,广泛度可以保证,但这是基于有效的查询的基础上。就像是google,你的搜索词不好也不可能返回你想要的结果。专业度,一是要在良好的分词,索引前提下,二是要广泛的索引库中了。其实专业度的更需要的(就如你所说的)是网页的分类。在分类前提下,专业度更易保证。
在没有分类的情况下,在抓取网页后,对其进行尽可能正确的分词(同时在用户搜索时),这是最大的技术难点了吧。因为中文的特殊性,其难度很大。我在nutch中结合中科院的ICTCLAS就是这个目的。
以上也只是我的个人感受,请指教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: