国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Oracle全文檢索主要技術(shù)初探

2009-03-06 05:17曾妮麗
管理觀察 2009年5期
關(guān)鍵詞:全文檢索

曾妮麗 陳 林

摘 要:全文檢索技術(shù)是信息管理的關(guān)鍵技術(shù)之一, Oracle Text作為Oracle的一個(gè)組件, 提供了強(qiáng)大的全文檢索功能,用Oracle做后臺(tái)數(shù)據(jù)庫(kù), 就可以充分利用其全文檢索技術(shù), 構(gòu)建復(fù)雜的大型文檔管理系統(tǒng)。本文主要介紹了全文檢索的原理,Oracle Text全文檢索的主要技術(shù)及實(shí)現(xiàn)。

關(guān)鍵詞:Oracle Text 全文檢索 索引

一、引言

隨著信息技術(shù)的飛速發(fā)展,各行各業(yè)越來(lái)越靠信息系統(tǒng),面對(duì)越來(lái)越多的數(shù)據(jù),如何對(duì)信息進(jìn)行有效組織和檢索越來(lái)越受到人們的重視。目前各大數(shù)據(jù)庫(kù)廠商的數(shù)據(jù)庫(kù)版本中都帶有全文檢索功能,如SQL Server自7.0以后提供了全文檢索的功能;Oracle自7.3開(kāi)始提供文本查詢功能。在Oracle8i中,文本檢索和媒體管理結(jié)合在interMedia中,并且其需要單獨(dú)安裝;從Oracle9i開(kāi)始,文本檢索從interMedia中分離出來(lái),命名為Oracle Text,,在標(biāo)準(zhǔn)和企業(yè)級(jí)數(shù)據(jù)庫(kù)版本中為默認(rèn)組件不再需要單獨(dú)的許可。本文主要對(duì)Oracle9i的Oracle Text中所涉及的主要技術(shù)進(jìn)行探討。

二、全文檢索技術(shù)

1.概念

全文檢索就是指計(jì)算機(jī)索引程序通過(guò)掃描文章中的每一個(gè)詞,對(duì)每一個(gè)詞建立索引,當(dāng)用戶查詢時(shí),檢索程序就根據(jù)事先建立好的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶的檢索方式。

2..全文檢索系統(tǒng)結(jié)構(gòu)圖(如圖1)

3.主要技術(shù)

全文檢索主要由兩方面的核心技術(shù)結(jié)合而實(shí)現(xiàn):一是建立和維護(hù)索引庫(kù),二是提供快速有效的檢索機(jī)制。

(1) 文本分析

作為全文檢索技術(shù)的重要組成部分,中文分詞技術(shù)和各種常見(jiàn)格式文檔的處理方式是研究和應(yīng)用必然涉及的兩個(gè)方面。目前使用最為廣泛的中文分詞方法是詞表切分法,這種方法的核心是詞表的匹配方法。目前,針對(duì)各種格式文檔的處理,其主要實(shí)現(xiàn)方式是將各種格式文檔先轉(zhuǎn)換為某種中間格式,然后對(duì)中間格式進(jìn)行索引和查詢。

(2)索引

在中文系統(tǒng)中,基本元素可以是單個(gè)漢字字符,也可以是詞。因此存在兩種基本的索引庫(kù)結(jié)構(gòu),即基于字表的索引庫(kù)和基于詞表的索引庫(kù)。字表法和詞表法各有優(yōu)缺點(diǎn)。前者實(shí)用性很強(qiáng),構(gòu)建直觀方便。檢索方面,比較實(shí)用的是“首字直接匹配法”。詞表法多集中在中文自動(dòng)分詞研究,自然語(yǔ)言統(tǒng)計(jì)分析等方面。全文檢索中索引的組織方法有兩種,即正排表和倒排表。目前通常都采用倒排表進(jìn)行組織。

索引創(chuàng)建過(guò)程不需要排序,分為如下兩步。第一步分析源文檔,產(chǎn)生臨時(shí)的中間文件,我們稱為分析過(guò)程。第二步處理臨時(shí)文件,依次從臨時(shí)文件中讀取每個(gè)字符出現(xiàn)在每一篇文章中的數(shù)據(jù)信息,生成最終的倒排文件,在這里稱為創(chuàng)建過(guò)程。生成的最終倒排文件中包含每個(gè)字符出現(xiàn)在所有文檔中的信息。

(3)檢索

從文檔的內(nèi)容上,信息檢索有四種傳統(tǒng)模型:布爾模型(Boolean Model)、向量空間模型(Vector Space Model,VSM)、概率模型(Probabilistic Model)和邏輯模型(Logic Model)。在四種傳統(tǒng)模型的基礎(chǔ)上,又演變出了各種其他模型。

三、Oracle Text 全文檢索技術(shù)及實(shí)現(xiàn)

要使用Oracle Text,必須具有CTXAPP角色或者是CTXSYS用戶。Oracle Text為系統(tǒng)管理員提供CTXSYS用戶,為應(yīng)用程序開(kāi)發(fā)人員提供CTXAPP角色。CTXSYS用戶可執(zhí)行以下任務(wù):?jiǎn)?dòng)Oracle Text服務(wù)器,執(zhí)行CTXAPP角色的所有任務(wù)。具有CTXAPP角色的用戶可執(zhí)行以下任務(wù): 創(chuàng)建索引,管理 Oracle Text 數(shù)據(jù)字典,包括創(chuàng)建和刪除首選項(xiàng),進(jìn)行Oracle Text 查詢,使用 Oracle Text PL/SQL程序包。

以下通過(guò)簡(jiǎn)單的實(shí)例從文本裝載,索引創(chuàng)建和查詢幾個(gè)方面介紹Oracle Text的全文檢索的關(guān)鍵技術(shù)。

1.裝載文本

Oracle Text默認(rèn)情況是將文本存儲(chǔ)在文本列.列的類型可以是VARCHAR2, CLOB, BLOB, CHAR or BFILE,裝載的文本可以是HTML, PDF, Word和純文本等不同格式.裝載文本主要有以下幾種模式:

(1) 利用SQL*Loader裝載文檔

下面以實(shí)例進(jìn)行介紹,將不同格式的文檔從操作系統(tǒng)裝載到一個(gè)BLOB列,需要兩個(gè)步驟:

首先是創(chuàng)建數(shù)據(jù)庫(kù)表

CREATE TABLE articles_formatted (

ARTICLE_IDNUMBER PRIMARY KEY ,

AUTHORVARCHAR2(30),

TEXT BLOB );

然后是發(fā)出SQL*Loader命令

使用SQL*Loader需要一個(gè)控制文件(設(shè)為load.ctl)和裝載信息文件(設(shè)為load.data).其中l(wèi)oad.ctl說(shuō)明了load.data文件的格式, loader2.data中包含了需要加載的文件的信息.可以使用逗號(hào)作為定界符.

Load1.ctl:

Load data

INFILE 'loader2.data'注釋:要導(dǎo)入的文件

INTO TABLE articles_formatted 注釋:指定裝入的表

APPEND注釋: 原先的表有數(shù)據(jù) 就加在后面

FIELDS TERMINATED BY ','注釋:以逗號(hào)作為定界符(如要裝載的數(shù)據(jù)是”abc,d,e”,在表中結(jié)果是”abcde”)

(article_id SEQUENCE (MAX,1), 注釋:以下是表的字段, FILLER 關(guān)鍵字 此列的數(shù)值不會(huì)被裝載

author CHAR(30),

ext_fname FILLER CHAR(80),

text LOBFILE(ext_fname) TERMINATED BY EOF)

load2.data:

1,JohnHancock,e:1LoadingMethods.txt,

2,張三,e:1oracle全文檢索技術(shù).doc,

3,曉月,e:1全文檢索原理及實(shí)現(xiàn).pdf,

然后就可以執(zhí)行以下命令

sqlldr userid=ctxsys/ctxsys control=load.ctl data=load.data log=load.log

(2)使用DBMS_L OB裝載文檔

SQL*Loader雖然可以用于批量的裝載文檔,但是不能將文檔文件載入已存在的行內(nèi)。此時(shí)就可以使用DBMS_L0B。這首先需要在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)目錄(這要求用戶有CREATE ANY DIRECTORY的權(quán)限),建立一個(gè)你要加載的文件所在目錄的別名。然后調(diào)用DBMS. FRROMFILE()函數(shù)。需要注意的是在進(jìn)行中文檢索時(shí),加載文件之后,還需要將所加載的文件的信息,如:格式、字符集、語(yǔ)言等信息添加到相應(yīng)的列中。

(3)使用ctxload裝載文檔

語(yǔ)法格式:

text. . .

col_name:列名

doc_data: 存儲(chǔ)在列中的結(jié)構(gòu)化數(shù)據(jù)

text:被裝載的文檔內(nèi)容或文檔名稱

(4) SQL INSERT 語(yǔ)句

2.索引

Oracle Text的索引在結(jié)構(gòu)上和Oracle中的其他索引完全不同。在創(chuàng)建索引過(guò)程中,可以對(duì)數(shù)據(jù)存儲(chǔ),分段器,詞法分析器,過(guò)濾器,相關(guān)詞表,停詞表或存儲(chǔ)首選項(xiàng)等參數(shù)進(jìn)行設(shè)置。對(duì)于英文的檢索,不需要設(shè)置首選項(xiàng),完全使用默認(rèn)值就可以了。但是對(duì)于其他語(yǔ)種文檔的檢索,則必須進(jìn)行設(shè)置。因?yàn)镺racle Text在創(chuàng)建索引時(shí),需要知道該文檔的格式、字符集、語(yǔ)種等信息。首選項(xiàng)的設(shè)置是通過(guò)CTX—DDL包中ctx_dd1.Create_preference和ctx_dd1.Set_attribute過(guò)程來(lái)進(jìn)行的。

(1)數(shù)據(jù)存儲(chǔ)(datastore)

數(shù)據(jù)存儲(chǔ)首選項(xiàng)向Oracle通告源數(shù)據(jù)的組織結(jié)構(gòu)。數(shù)據(jù)存儲(chǔ)參數(shù)類型主要有以下幾種.

DIRECT_DATASTORE:是默認(rèn)的數(shù)據(jù)存儲(chǔ)命名,大多數(shù)索引操作都使用它DIRECT_DATASTORE:數(shù)據(jù)被存儲(chǔ)在文本列中,文檔由詳表中的一行或多行組成,頭信息存儲(chǔ)在主表中

FILE_DATASTORE:數(shù)據(jù)存儲(chǔ)在操作系統(tǒng)的文件系統(tǒng)中,文件名存儲(chǔ)在文本列URL_DATASTORE:數(shù)據(jù)存儲(chǔ)在內(nèi)聯(lián)網(wǎng)或互聯(lián)網(wǎng)中的外部文件中,URL存儲(chǔ)在文本列中

USER_DATASTORE:通過(guò)用戶定義的存儲(chǔ)過(guò)程合成文件.

(2)過(guò)濾器(Filter)

通過(guò)過(guò)濾器,可以不考慮源文檔的類型,按照相同的方式將文本加入到索引.可以用以下對(duì)象創(chuàng)建過(guò)濾器參數(shù)。

NULL_FILTER:主要針對(duì)存儲(chǔ)在文本列的純文本文件

INSO_FILTER:是能夠過(guò)濾大部分帶格式文件的通用過(guò)濾器

USER_FILTER:創(chuàng)建用戶自定義的過(guò)濾器。

CHARSET_FILTER:能夠?qū)⑽臋n從一種字符集轉(zhuǎn)換成數(shù)據(jù)庫(kù)字符集。

(3)分段器(Sectioner)

分段器從文檔標(biāo)記中分離出文本,文本傳遞到詞法分析器分離出來(lái)的是標(biāo)記符,而把標(biāo)記保存起來(lái)是為了方便分段檢索.有了文檔段分組,就可以在特別的文檔段進(jìn)行搜索.

(4)詞法分析器(Lexer)

標(biāo)志符產(chǎn)生是查找,分級(jí),分類以及生成文檔的主題詞或要點(diǎn)的關(guān)鍵詞.詞法分析器是Oracle生成標(biāo)志符的方法.其主要包含以下幾種類型。

BASIC_LEXER適用于英語(yǔ)和其他單字節(jié)語(yǔ)種

CHINESE_VGRAM_LEXER適用于被索引列是英文

MULTI_LEXER被索引列的文檔列具有不同的語(yǔ)種.

如果文本列都是一種語(yǔ)言,可以使用一種Lexer設(shè)置,但我們檢索的文檔可能不一定是同一種語(yǔ)言的,所以常常要使用MULTI—LEXER,把索引設(shè)置為多種語(yǔ)言??梢栽O(shè)置一種基本檢索語(yǔ)言,多種子檢索語(yǔ)言。

(5)相關(guān)詞表(Wordlist)

利用相關(guān)詞表可以進(jìn)行模糊檢索和詞干檢索,相關(guān)詞表只有BASIC_WORDLIST一種類型.

(6)非索引字表(Stoplist)

有些詞,如the,of,and加入到索引中是完全沒(méi)有用的,它對(duì)于相關(guān)性沒(méi)有任何幫助,由此Oracle允許添加非索引字表.

如果只是進(jìn)行普通的檢索,設(shè)置datastore、FILTER、Lexer三個(gè)參數(shù)就可以了。下面以匿名存儲(chǔ)過(guò)程的形式給出了一個(gè)示例,設(shè)置英語(yǔ)為基本檢索語(yǔ)言,簡(jiǎn)體中文為子檢索語(yǔ)言。

begin

ctx_dd1.create_preference(‘My_File_DATASTORE,‘DIRECT_DATASTORE );

ctx_dd1.create_preference(‘My_ENG_Lexer,‘BASIC_LEXER);

ctx_dd1.create_preference(‘My_CHN_Lexer,‘CHINESE_VGRAM_LEXER);

ctx_dd1.create_preference(‘My_Multi_Lexer,‘MULTI_LEXER);

ctx_dd1.a(chǎn)dd_sub_lexer(‘My_Multi_Lexer,‘ENGLISH,‘My_ENG_Lexer,‘My_Eng);

ctx_dd1.a(chǎn)dd_sub_lexer(‘My_Multi_Lexer,‘simplified chinese,‘M y_CHN_Lexer,‘M y_Chi);

end;

(7)索引類型及創(chuàng)建

Oracle提供了4種索引類型.CONTEXT索引的功能很強(qiáng)大,也是最常用的類型.創(chuàng)建索引有許多選項(xiàng),但如果只是英文文檔,簡(jiǎn)單的使用一個(gè)create語(yǔ)句就可以了,例如:

create index myindex on articles_formatted(text)indextype is ctxsys.context;

對(duì)于其它語(yǔ)言的文檔,就需要使用其它的選項(xiàng)。舉例說(shuō)明如下:

create index index_doc on articles_formatted (text)indextype is ctxsys.context parameters(‘datastore My_File_DATASTORE

filterctxsys.inso_filter

charset column charset_col

format column format_col

lexerMy_Multi_Lexer

language column lang);

當(dāng)加載了新文檔或刪除文檔后,就必須重建索引。有兩種方法可以使索引保持同步。一種是ctxgrv程序,另一種方法是手動(dòng)對(duì)索引進(jìn)行更新:

alter index index—doc rebuild param eters(‘SYNC);

這種方法對(duì)于文檔列更新不很頻繁的情況更為適用。

3..查詢處理

索引創(chuàng)建和更新以后,就可以檢索了,例如:

SELECT SCORE(1) title from news WHERE CONTAINS(text, 'oracle', 1) > 0;

其可以查找到所有包含“oracle”的文檔的title,并由score()函數(shù)得出Oracle Text對(duì)于該文章匹配程度的打分。

SELECT SCORE(1) title from news WHERE CONTAINS(text, 'about(politics)', 1) > 0;

查找包含“politics”主題的所有文檔顯示其title,并由score()函數(shù)得出Oracle Text對(duì)于該文章匹配程度的打分。

四、小結(jié)

Oracle Text和PL/SQL為關(guān)系數(shù)據(jù)庫(kù)提供了完備的IR解決方案,使用INSO過(guò)濾器,Oracle Text支持150種多種不同文檔類型的檢索,還可以提取主題詞或要點(diǎn)可以高亮度顯示關(guān)鍵字和主題詞,支持詞干技術(shù)、模糊查詢和通配符查詢等,非常便于大型信息檢索系統(tǒng)的開(kāi)發(fā)。

參考文獻(xiàn):

[1] Colin McGregor.Oracle8i interMedia Text Reference. http://download.oracle.com/docs/cd/F49540_01/DOC/inter.815/a67843/cdefault.htm.1999,2.

作者簡(jiǎn)介:曾妮麗,女, 1980年5月生,2002年畢業(yè)于南京理工大學(xué),講師)。

猜你喜歡
全文檢索
基于MySQL的中文全文搜索研究
基于Lucene全文檢索技術(shù)的優(yōu)化探討
Oracle數(shù)據(jù)庫(kù)全文檢索性能研究
全文檢索引擎技術(shù)在電子病歷中的應(yīng)用
基于KySou的全文檢索系統(tǒng)的分析與優(yōu)化
用JSP調(diào)用Lucene包來(lái)實(shí)現(xiàn)全文檢索
民勤县| 乡宁县| 周宁县| 沅陵县| 芜湖县| 广平县| 乐亭县| 山西省| 锦州市| 绥德县| 休宁县| 铜鼓县| 分宜县| 连州市| 玉龙| 苏尼特右旗| 高平市| 黑河市| 安新县| 怀柔区| 通渭县| 饶平县| 芜湖县| 石景山区| 阳山县| 永定县| 肇源县| 奇台县| 青岛市| 班玛县| 新建县| 彝良县| 洛阳市| 利津县| 阿合奇县| 镶黄旗| 昌乐县| 济南市| 嘉兴市| 邢台县| 板桥市|