亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2009-03-06 05:17:52曾妮麗
        管理觀察 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)始提供文本查詢(xún)功能。在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)用戶查詢(xún)時(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)行索引和查詢(xú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í)的中間文件,我們稱(chēng)為分析過(guò)程。第二步處理臨時(shí)文件,依次從臨時(shí)文件中讀取每個(gè)字符出現(xiàn)在每一篇文章中的數(shù)據(jù)信息,生成最終的倒排文件,在這里稱(chēng)為創(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 查詢(xún),使用 Oracle Text PL/SQL程序包。

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

        1.裝載文本

        Oracle Text默認(rèn)情況是將文本存儲(chǔ)在文本列.列的類(lèi)型可以是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)容或文檔名稱(chēng)

        (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ù)類(lèi)型主要有以下幾種.

        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ò)濾器,可以不考慮源文檔的類(lèi)型,按照相同的方式將文本加入到索引.可以用以下對(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í),分類(lèi)以及生成文檔的主題詞或要點(diǎn)的關(guān)鍵詞.詞法分析器是Oracle生成標(biāo)志符的方法.其主要包含以下幾種類(lèi)型。

        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一種類(lèi)型.

        (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)索引類(lèi)型及創(chuàng)建

        Oracle提供了4種索引類(lèi)型.CONTEXT索引的功能很強(qiáng)大,也是最常用的類(lèi)型.創(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..查詢(xún)處理

        索引創(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種多種不同文檔類(lèi)型的檢索,還可以提取主題詞或要點(diǎn)可以高亮度顯示關(guān)鍵字和主題詞,支持詞干技術(shù)、模糊查詢(xún)和通配符查詢(xún)等,非常便于大型信息檢索系統(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é),講師)。

        猜你喜歡
        全文檢索
        基于Lucene全文檢索技術(shù)的優(yōu)化探討
        Oracle數(shù)據(jù)庫(kù)全文檢索性能研究
        全文檢索引擎技術(shù)在電子病歷中的應(yīng)用
        基于KySou的全文檢索系統(tǒng)的分析與優(yōu)化
        特色數(shù)據(jù)庫(kù)全文檢索系統(tǒng)的設(shè)計(jì)
        用JSP調(diào)用Lucene包來(lái)實(shí)現(xiàn)全文檢索
        中文字幕一区二区三在线| 欧美老熟妇欲乱高清视频 | 免费人成视频x8x8入口| 初尝黑人嗷嗷叫中文字幕| 青青青爽国产在线视频| 日本最新一区二区三区免费看| 美女免费观看一区二区三区| 国产成人小视频| 无码人妻丰满熟妇啪啪7774| 色婷婷精品综合久久狠狠| 久久久国产熟女综合一区二区三区 | 亚洲视频精品一区二区三区| 刚出嫁新婚少妇很紧很爽| 国产精品兄妹在线观看麻豆| 国产思思99re99在线观看| 亚洲一二三四五区中文字幕| 中文字幕精品亚洲字幕| 亚洲中文字幕午夜精品| 久久久久久国产精品无码超碰动画| 婷婷九月丁香| 色综合久久加勒比高清88| 亚洲三区av在线播放| 狠狠躁天天躁无码中文字幕图| 99精品国产综合久久久久五月天| 日韩亚洲国产av自拍| 国内偷拍精品一区二区| 丰满少妇a级毛片| 暖暖免费 高清 日本社区在线观看| 中文字幕日本熟妇少妇| 97超碰精品成人国产| 肥臀熟女一区二区三区| 国产精品一区二区久久| 中文字幕人成乱码中文乱码| 亚洲av免费不卡在线观看| 亚洲av成人中文无码专区| 国产成人精品日本亚洲专区6| 久久婷婷综合激情亚洲狠狠| 国产亚洲一区二区三区| 亚洲男同gay在线观看| 国产天堂在线观看| 无码精品一区二区三区免费16 |