現在正對搜尋引擎有興趣,
我的搜尋基於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就是這個目的。
以上也只是我的個人感受,請指教。