Oracle text譯為全文檢索技術(shù),是智能信息管理的關(guān)鍵技術(shù)之一,Oracle Text作為Oracle9i的一個(gè)組件,提供了強(qiáng)大的全文檢索功能,用Oracle9i做后臺(tái)數(shù)據(jù)庫(kù),就可以充分利用其全文檢索技術(shù),構(gòu)建復(fù)雜的大型文檔管理系統(tǒng)。本文主要介紹了Oracle Text的體系結(jié)構(gòu)及其使用。
中文名稱 | 全文檢索技術(shù) | 外文名稱 | Oracle text |
---|---|---|---|
性????質(zhì) | 后臺(tái)數(shù)據(jù)庫(kù) | 功????能 | 全文檢索 |
Oracle Text 索引文檔時(shí)所使用的主要邏輯步驟如下:
⑴數(shù)據(jù)存儲(chǔ)邏輯搜索表的所有行,并讀取列中的數(shù)據(jù)。通常,這只是列數(shù)據(jù),但有些數(shù)據(jù)存儲(chǔ)使用列數(shù)據(jù)作為文檔數(shù)據(jù)的指針。例如,URL_DATASTORE 將列數(shù)據(jù)作為 URL 使用。
⑵過(guò)濾器提取文檔數(shù)據(jù)并將其轉(zhuǎn)換為文本表示方式。存儲(chǔ)二進(jìn)制文檔 (如 Word 或 Acrobat 文件) 時(shí)需要這樣做。過(guò)濾器的輸出不必是純文本格式 -- 它可以是 XML 或 HTML 之類(lèi)的文本格式。
⑶分段器提取過(guò)濾器的輸出信息,并將其轉(zhuǎn)換為純文本。包括 XML 和 HTML 在內(nèi)的不同文本格式有不同的分段器。轉(zhuǎn)換為純文本涉及檢測(cè)重要文檔段標(biāo)記、移去不可見(jiàn)的信息和文本重新格式化。
⑷詞法分析器提取分段器中的純文本,并將其拆分為不連續(xù)的標(biāo)記。既存在空白字符分隔語(yǔ)言使用的詞法分析器,也存在分段復(fù)雜的亞洲語(yǔ)言使用的專(zhuān)門(mén)詞法分析器。
⑸索引引擎提取詞法分析器中的所有標(biāo)記、文檔段在分段器中的偏移量以及被稱為非索引字的低信息含量字列表,并構(gòu)建反向索引。倒排索引存儲(chǔ)標(biāo)記和含有這些標(biāo)記的文檔。
要實(shí)現(xiàn)文本的全文檢索首先必須把正確的文本加載到數(shù)據(jù)庫(kù)表中,默認(rèn)的建立索引行為要求將文檔裝載在文本列中,盡管可以用其它方式 (包括文件系統(tǒng)和 URL 形式)存儲(chǔ)文檔 (在"數(shù)據(jù)存儲(chǔ)"選項(xiàng)進(jìn)行設(shè)置)。默認(rèn)情況下,系統(tǒng)應(yīng)該將文檔裝載在文本列中。文本列可以是VARCHAR2、CLOB、BLOB、CHAR或BFILE。注意,只有在將Oracle7系統(tǒng)移植到Oracle8的情況下才支持用LONG和LONG RAW 這兩個(gè)相反的列類(lèi)型存儲(chǔ)文本。不能為列類(lèi)型NCLOB、DATE和NUMBER建立索引。
關(guān)于文檔格式,因?yàn)橄到y(tǒng)能為包括HTML、PDF、Microsoft Word和純文本在內(nèi)的大多數(shù)文檔格式建立索引,可以將其中的任何文檔類(lèi)型裝載到文本列中(在"過(guò)濾器"選項(xiàng)中設(shè)置)。有關(guān)所支持的文檔格式的詳細(xì)信息,可以參閱Oracle Text User's Guide and Reference 中的附錄"Supported Filter Formats"。
裝載方法主要有以下幾種:
⑴SQL INSERT 語(yǔ)句
⑵ctxload 可執(zhí)行文件
⑶SQL*Loader
⑷從 BFILE 中裝載 LOB 的 DBMS_LOB.LOADFROMFILE() PL/SQL 過(guò)程
⑸Oracle Call Interface
這里先給出一個(gè)簡(jiǎn)單示例說(shuō)利用Oracle Text實(shí)現(xiàn)全文檢索的方法與步驟,在后面在進(jìn)行具體的說(shuō)明。Orcale9i提供了Oracle Text Manager可以簡(jiǎn)化許多工作,所有在Oracle Text Manager中完成的工作,都可以在通過(guò)PL/SQL來(lái)實(shí)現(xiàn)。要使用Oracle Text,必須具有CTXAPP角色或者是CTXSYS用戶。Oracle Text為系統(tǒng)管理員提供CTXSYS用戶,為應(yīng)用程序開(kāi)發(fā)人員提供CTXAPP角色。
CTXSYS用戶可執(zhí)行以下任務(wù):啟動(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程序包。
使用Oracle Text的步驟:
⑴創(chuàng)建表來(lái)保存某些文檔。該示例使用一個(gè)主關(guān)鍵字列來(lái)標(biāo)識(shí)每個(gè)文檔,使用一個(gè)小的VARCHAR2列來(lái)保存每個(gè)文檔。
CREATE TABLE docs (id NUMBER PRIMARY KEY,text VARCHAR2(80));
⑵將兩個(gè)示例文檔置入該表:
INSERT INTO docs VALUES (1,'the first doc');
INSERT INTO docs VALUES (2,'the second doc');
COMMIT;
⑶使用Oracle Text Manager來(lái)創(chuàng)建和修改首選項(xiàng),首選項(xiàng)將與索引相關(guān)聯(lián)。
⑷使用Oracle Text Manager創(chuàng)建文本索引。另外,可以輸入以下使用默認(rèn)首選項(xiàng)的 SQL 語(yǔ)句:
CREATE INDEX doc_index ON docs(text) INDEXTYPE IS CTXSYS.CONTEXT;
⑸使用 CONTAINS 函數(shù),發(fā)出基于內(nèi)容的文檔查詢。例如:
SELECT id FROM docs WHERE CONTAINS (text,'first') > 0;
這將在文本列包含單詞 first (即文檔1) 的 docs 中查找所有行。語(yǔ)句中的>0部分是有效的Oracle SQL所必需的,Oracle SQL不支持函數(shù)的布爾返回值。
以上只是一個(gè)簡(jiǎn)單的示例,旨在給出使用Oracle Text建立全文索引的完整步驟,歸納起來(lái)如下:
⑴建表并裝載文本(包含帶有需要檢索的文本字段)
⑵配置索引
⑶建立索引
⑷發(fā)出查詢
⑸索引維護(hù):同步與優(yōu)化(將在后面介紹)
oracle 求PL/SQL經(jīng)典入門(mén)書(shū)籍
這幾本由淺入深地看: Oracle PL/SQL入門(mén) Oracle PL/SQL 實(shí)例精解(原書(shū)第4版)、 Oracle Database 11g PLSQL 程序設(shè)計(jì) 精通Oracle10gSQL和...
oracle zdlra 備份一體機(jī) 價(jià)格多少
可以把備份數(shù)據(jù)導(dǎo)出dmp備份:1 將數(shù)據(jù)庫(kù)TEST完全導(dǎo)出,用戶名system 密碼manager 導(dǎo)出到D:\daochu.dmp中exp system/manager@TEST file=...
我這有一篇關(guān)于SQL Server 2005 與Oracle 10g的比較的文章,是微軟工程師寫(xiě)的,相信會(huì)對(duì)你很有幫助。 =======================================...
Oracle一直致力于全文檢索技術(shù)的研究,當(dāng)Oracle9i Rlease2發(fā)布之時(shí),Oracle數(shù)據(jù)庫(kù)的全文檢索技術(shù)已經(jīng)非常完美,Oracle Text使Oracle9i具備了強(qiáng)大的文本檢索能力和智能化的文本管理能力。Oracle Text是Oracle9i采用的新名稱,在Oracle8/8i中它被稱作Oracle interMedia Text,在Oracle8以前它的名稱是Oracle ConText Cartridge。使用Oracle9i和Oracle Text,可以方便而有效地利用標(biāo)準(zhǔn)的SQL工具來(lái)構(gòu)建基于文本的新的開(kāi)發(fā)工具或?qū)ΜF(xiàn)有應(yīng)用程序進(jìn)行擴(kuò)展。應(yīng)用程序開(kāi)發(fā)人員可以在任何使用文本的Oracle數(shù)據(jù)庫(kù)應(yīng)用程序中充分利用Oracle Text搜索,應(yīng)用范圍可以是現(xiàn)有應(yīng)用程序中可搜索的注釋字段,也可是實(shí)現(xiàn)涉及多種文檔格式和復(fù)雜搜索標(biāo)準(zhǔn)的大型文檔管理系統(tǒng)。Oracle Text支持Oracle數(shù)據(jù)庫(kù)所支持的大多數(shù)語(yǔ)言的基本全文搜索功能。本文將介紹如何使用Oracle9i的全文檢索技術(shù)來(lái)為自己的應(yīng)用提供一個(gè)優(yōu)秀的解決方案。
文本裝入文本列后,就可以創(chuàng)建Oracle Text索引。文檔以許多不同方案、格式和語(yǔ)言存儲(chǔ)。因此,每個(gè) Oracle Text 索引有許多需要設(shè)置的選項(xiàng),以針對(duì)特定情況配置索引。創(chuàng)建索引時(shí),Oracle Text可使用若干個(gè)默認(rèn)值,但在大多數(shù)情況下要求用戶通過(guò)指定首選項(xiàng)來(lái)配置索引。
每個(gè)索引的許多選項(xiàng)組成功能組,稱為"類(lèi)&quo
每個(gè)類(lèi)集中體現(xiàn)配置的某一方面,可以認(rèn)為這些類(lèi)就是與文檔數(shù)據(jù)庫(kù)有關(guān)的一些問(wèn)題。例如:數(shù)據(jù)存儲(chǔ)、過(guò)濾器、詞法分析器、相關(guān)詞表、存儲(chǔ)等。
每個(gè)類(lèi)具有許多預(yù)定義的行為,稱之為對(duì)象。每個(gè)對(duì)象是類(lèi)問(wèn)題可能具有的答案,并且大多數(shù)對(duì)象都包含有屬性。通過(guò)屬性來(lái)定制對(duì)象,從而使對(duì)索引的配置更加多變以適應(yīng)于不同的應(yīng)用。
⑴存儲(chǔ)(Storage)類(lèi)
存儲(chǔ)類(lèi)指定構(gòu)成Oracle Text索引的數(shù)據(jù)庫(kù)表和索引的表空間參數(shù)和創(chuàng)建參數(shù)。它僅有一個(gè)基本對(duì)象:BASIC_STORAGE,其屬性包括:I_Index_Clause、I_Table_Clause、K_Table_Clause、N_Table_Clause、P_Table_Clause、R_Table_Clause。
⑵數(shù)據(jù)存儲(chǔ)(Datastore)類(lèi)
數(shù)據(jù)存儲(chǔ):關(guān)于列中存儲(chǔ)文本的位置和其他信息。默認(rèn)情況下,文本直接存儲(chǔ)到列中,表中的每行都表示一個(gè)單獨(dú)的完整文檔。其他數(shù)據(jù)存儲(chǔ)位置包括存儲(chǔ)在單獨(dú)文件中或以其 URL 標(biāo)識(shí)的 Web 頁(yè)上。七個(gè)基本對(duì)象包括:Default_Datastore、Detail_Datastore、Direct_Datastore、File_Datastore、Multi_Column_Datastore 、URL_Datastore、User_Datastore,。
⑶文檔段組(Section Group)類(lèi)
文檔段組是用于指定一組文檔段的對(duì)象。必須先定義文檔段,然后才能使用索引通過(guò) WITHIN 運(yùn)算符在文檔段內(nèi)進(jìn)行查詢。文檔段定義為文檔段組的一部分。包含七個(gè)基本對(duì)象:AUTO_SECTION_GROUP、BASIC_SECTION_GROUP、HTML_SECTION_GROUP、NEWS_SECTION_GROUP、NULL_SECTION_GROUP、XML_SECTION_GROUP、PATH_SECTION_GROUP。
⑷相關(guān)詞表(Wordlist)類(lèi)
相關(guān)詞表標(biāo)識(shí)用于索引的詞干和模糊匹配查詢選項(xiàng)的語(yǔ)言,只有一個(gè)基本對(duì)象BASIC_WORDLIST,其屬性有:Fuzzy_Match、Fuzzy_Numresults、Fuzzy_Score、Stemmer、Substring_Index、Wildcard_Maxterms、Prefix_Index、Prefix_Max_Length、Prefix_Min_Length。
⑸索引集(Index Set)
索引集是一個(gè)或多個(gè)Oracle 索引 (不是Oracle Text索引) 的集合,用于創(chuàng)建 CTXCAT類(lèi)型的Oracle Text索引,只有一個(gè)基本對(duì)象BASIC_INDEX_SET。
⑹詞法分析器(Lexer)類(lèi)
詞法分析器類(lèi)標(biāo)識(shí)文本使用的語(yǔ)言,還確定在文本中如何標(biāo)識(shí)標(biāo)記。默認(rèn)的詞法分析器是英語(yǔ)或其他西歐語(yǔ)言,用空格、標(biāo)準(zhǔn)標(biāo)點(diǎn)和非字母數(shù)字字符標(biāo)識(shí)標(biāo)記,同時(shí)禁用大小寫(xiě)。包含8個(gè)基本對(duì)象:BASIC_LEXER、CHINESE_LEXER、CHINESE_VGRAM_LEXER、JAPANESE_LEXER、JAPANESE_VGRAM_LEXER、KOREAN_LEXER、KOREAN__MORPH_ LEXER、MULTI_LEXER。
⑺過(guò)濾器(Filter)類(lèi)
過(guò)濾器確定如何過(guò)濾文本以建立索引??梢允褂眠^(guò)濾器對(duì)文字處理器處理的文檔、格式化的文檔、純文本和 HTML 文檔建立索引,包括5個(gè)基本對(duì)象:CHARSET_FILTER、INSO_FILTER INSO、NULL_FILTER、PROCEDURE_FILTER、USER_FILTER。
⑻非索引字表(Stoplist)類(lèi)
非索引字表類(lèi)是用以指定一組不編入索引的單詞 (稱為非索引字)。有兩個(gè)基本對(duì)象:BASIC_STOPLIST (一種語(yǔ)言中的所有非索引字) 、 MULTI_STOPLIST (包含多種語(yǔ)言中的非索引字的多語(yǔ)言非索引字表)。
通常,通過(guò)使用Oracle Text查詢應(yīng)用程序,用戶可查看查詢所返回的文檔。用戶從命中列表中選擇一個(gè)文檔,然后應(yīng)用程序以某種形式顯示該文檔。通過(guò)Oracle Text,可以用不同的方式再現(xiàn)文檔。例如,可以通過(guò)突出顯示查詢?cè)~來(lái)顯示文檔。突出顯示的查詢?cè)~可以是相關(guān)詞查詢中的詞,也可以是英文 ABOUT 查詢中的主題詞。
以下是關(guān)于輸出效果和用于每個(gè)輸出效果的過(guò)程的信息:
突出顯示的文檔,純文本格式版本(CTX_DOC.MARKUP)
突出顯示的文檔,HTML版本(CTX_DOC.MARKUP)
突出顯示純文本格式版本的偏移量信息(CTX_DOC.HIGHLIGHT)
突出顯示HTML 版本的偏移量信息(CTX_DOC.HIGHLIGHT)
純文本格式版本,無(wú)突出顯示(CTX_DOC.FILTER)
HTML版本文檔,無(wú)突出顯示(CTX_DOC.FILTER)
建立了索引,就可以使用 SELECT 語(yǔ)句中的 CONTAINS 運(yùn)算符發(fā)出文本查詢。使用 CONTAINS 可以進(jìn)行兩種查詢:單詞查詢和ABOUT查詢。
詞查詢是對(duì)輸入到 CONTAINS 運(yùn)算符中單引號(hào)間的精確單詞或短語(yǔ)的查詢。在以下示例中,我們將查找文本列中包含 oracle 一詞的所有文檔。每行的分值由使用標(biāo)簽 1 的 SCORE 運(yùn)算符選定:
SELECT SCORE⑴ title from news WHERE CONTAINS(text,'oracle',1) > 0;
在查詢表達(dá)式中,可以使用 AND 和 OR 等文本運(yùn)算符來(lái)獲取不同結(jié)果。還可以將結(jié)構(gòu)性謂詞添加到 WHERE 子句中??梢允褂?count(*)、CTX_QUERY.COUNT_HITS 或 CTX_QUERY.EXPLAIN 來(lái)計(jì)算查詢的命中 (匹配) 數(shù)目。
在所有語(yǔ)言中,ABOUT查詢?cè)黾恿四巢樵兯祷氐南嚓P(guān)文檔的數(shù)目。在英語(yǔ)中,ABOUT 查詢可以使用索引的主題詞組件,該組件在默認(rèn)情況下創(chuàng)建。這樣,運(yùn)算符將根據(jù)查詢的概念返回文檔,而不是僅依據(jù)所指定的精確單詞或短語(yǔ)。例如,以下查詢將查找文本列中關(guān)于主題 politics 的所有文檔,而不是僅包含 politics 一詞的文檔:
SELECT SCORE⑴ title from news WHERE CONTAINS(text,'about(politics)',1) > 0;
索引建好后,如果表中的數(shù)據(jù)發(fā)生變化,比如增加或修改了記錄,怎么辦?由于對(duì)表所發(fā)生的任何DML語(yǔ)句,都不會(huì)自動(dòng)修改索引,因此,必須定時(shí)同步(sync)和優(yōu)化(optimize)索引,以正確反映數(shù)據(jù)的變化。
在索引建好后,可以在該用戶下查到Oracle自動(dòng)產(chǎn)生了以下幾個(gè)表:(假設(shè)索引名為myindex):
DR$myindex$I,DR$myindex$K,DR$myindex$R,DR$myindex$N
其中以I表最重要,可以查詢一下該表:
select token_text,token_count from DR$ myindex $I where rownum<=20;
查詢結(jié)果在此省略??梢钥吹?,該表中保存的其實(shí)就是Oracle 分析你的文檔后,生成的term記錄
在這里,包括term出現(xiàn)的位置、次數(shù)、hash值等。當(dāng)文檔的內(nèi)容改變后,可以想見(jiàn)這個(gè)I表的內(nèi)容也應(yīng)該相應(yīng)改變,才能保證Oracle在做全文檢索時(shí)正確檢索到內(nèi)容(因?yàn)樗^全文檢索,其實(shí)核心就是查詢這個(gè)表)。那么如何維護(hù)該表的內(nèi)容,不能每次數(shù)據(jù)改變都重新建立索引,這就要用到sync 和 optimize了。
同步(sync):將新的term 保存到I表;
優(yōu)化(optimize):清除I表的垃圾,主要是將已經(jīng)被刪除的term從I表刪除。
Oracle提供了一個(gè)所謂的ctx server來(lái)做這個(gè)同步和優(yōu)化的工作,只需要在后臺(tái)運(yùn)行這個(gè)進(jìn)程,它會(huì)監(jiān)視數(shù)據(jù)的變化,及時(shí)進(jìn)行同步。另外,也可以用以下的job來(lái)完成(該job要建在和表同一個(gè)用戶下):
create or replace procedure sync
is
begin
execute immediate
'alter index myindex rebuild online' ||
' parameters (''sync'')' ;
execute immediate
'alter index myindex rebuild online' ||
' parameters (''optimize full maxtime unlimited'')' ;
end sync;
/
Set ServerOutput on
declare
v_job number;
begin
Dbms_Job.Submit
(
job => v_job,
what => 'sync;',
next_date => sysdate,/* default */
interval => 'sysdate + 1/720' /* = 1 day / (24 hrs * 30 min) = 2 mins */
);
Dbms_Job.Run (v_job);
Dbms_Output.Put_Line ('Submitted as job # ' || to_char (v_job));
end;
/
job的SYSDATE + (1/720)是指每隔2分鐘同步一次。具體的時(shí)間間隔,可以根據(jù)自己的應(yīng)用的需要而定。
格式:pdf
大小:318KB
頁(yè)數(shù): 1頁(yè)
評(píng)分: 4.4
記者湯銘 辭舊迎新之際,從Oracle公司傳來(lái)兩個(gè)消息。12月19日,中國(guó)印鈔造幣總公司與Oracle中國(guó)公司在北京舉行合作簽約儀式,正式啟動(dòng)造幣總公司ERP三期工程。同時(shí)中國(guó)海洋石油有限公司與Oracle中國(guó)公司也在日前合作簽約實(shí)施能源行業(yè)ERP解決方案。 印鈔造幣是國(guó)家的特種行業(yè),特種行業(yè)的每一舉一動(dòng)都牽動(dòng)國(guó)家經(jīng)濟(jì)的脈搏。在國(guó)際化及產(chǎn)業(yè)結(jié)構(gòu)調(diào)整成為必然趨勢(shì)之時(shí),特種行業(yè)如何而對(duì)新環(huán)境?如何在多元化的領(lǐng)域達(dá)到實(shí)現(xiàn)專(zhuān)業(yè)化經(jīng)
格式:pdf
大?。?span id="bbr957h" class="single-tag-height">318KB
頁(yè)數(shù): 1頁(yè)
評(píng)分: 4.7
隨著中國(guó)銀行業(yè)逐漸與國(guó)際接軌和國(guó)內(nèi)銀行的陸續(xù)上市,公司治理、風(fēng)險(xiǎn)管理和法規(guī)遵從(以下簡(jiǎn)稱GRC)已成為國(guó)內(nèi)銀行必須遵循和解決的問(wèn)題,銀監(jiān)會(huì)要求國(guó)內(nèi)銀行在2010年必須要開(kāi)始實(shí)施巴塞爾新協(xié)議,2013年為最后的期限。這就意味著國(guó)內(nèi)銀行只有僅僅3年的準(zhǔn)備時(shí)間,國(guó)內(nèi)銀行將面臨著全方位地提高風(fēng)險(xiǎn)管理能力和法規(guī)遵從能力。
CTI技術(shù)使電信和計(jì)算機(jī)相互融合,克服了傳統(tǒng)電信和計(jì)算機(jī)服務(wù)相對(duì)單一的缺點(diǎn),將兩者完美結(jié)合了起來(lái)。其應(yīng)用領(lǐng)域非常廣泛,任何需要語(yǔ)音、數(shù)據(jù)通信,特別是那些希望把計(jì)算機(jī)網(wǎng)與通信網(wǎng)結(jié)合起來(lái)完成語(yǔ)音數(shù)據(jù)信息交換的系統(tǒng)都會(huì)用到CTI技術(shù)。
TTS即語(yǔ)音合成技術(shù)(Text To Speech),它涉及聲學(xué)、語(yǔ)言學(xué)、數(shù)學(xué)信號(hào)處理技術(shù)、多媒體技術(shù)等多個(gè)學(xué)科技術(shù),是中文信息處理領(lǐng)域的一項(xiàng)前沿技術(shù),實(shí)現(xiàn)把計(jì)算機(jī)中任意出現(xiàn)的文字轉(zhuǎn)換成自然流暢的語(yǔ)音輸出。
TTS在CTI系統(tǒng)中可以應(yīng)用在IVR(交互式語(yǔ)音應(yīng)答)服務(wù)器上,以提供語(yǔ)音交互式平臺(tái),為用戶電話來(lái)訪提供語(yǔ)音提示,引導(dǎo)用戶選擇服務(wù)內(nèi)容和輸入電話事務(wù)所需的數(shù)據(jù),并接受用戶在電話撥號(hào)鍵盤(pán)上輸入的信息,實(shí)現(xiàn)對(duì)計(jì)算機(jī)數(shù)據(jù)庫(kù)等信息資料的交互式訪問(wèn)。
在IVR中應(yīng)用TTS可以自動(dòng)將文本信息轉(zhuǎn)換為語(yǔ)音文件,或者實(shí)時(shí)地將文本信息合成語(yǔ)音并通過(guò)電話發(fā)布。實(shí)現(xiàn)文本與語(yǔ)音自動(dòng)雙向轉(zhuǎn)換,以達(dá)到人與系統(tǒng)的自動(dòng)交互,隨時(shí)隨地為客戶服務(wù)。維護(hù)人員不必再人工錄音,只須將電子文檔引入系統(tǒng)中,系統(tǒng)可以自動(dòng)將電子文檔轉(zhuǎn)換為語(yǔ)音信息播放給客戶。數(shù)據(jù)庫(kù)中存放的大量數(shù)據(jù),無(wú)需事先進(jìn)行錄音,能夠隨時(shí)根據(jù)查詢條件查出并合成語(yǔ)音進(jìn)行播報(bào),從而大大減少了座席人員的工作負(fù)擔(dān)。
那么應(yīng)如何將TTS功能附加到CTI應(yīng)用中呢?某些比較先進(jìn)的交換平臺(tái),已經(jīng)在交換機(jī)的內(nèi)部實(shí)現(xiàn)了TTS的功能,并作為標(biāo)準(zhǔn)接口的一部分對(duì)外提供,業(yè)務(wù)開(kāi)發(fā)商只需要簡(jiǎn)單的調(diào)用他們即可以在業(yè)務(wù)中使用該功能。
對(duì)于未實(shí)現(xiàn)TTS功能的PBX,就需要業(yè)務(wù)開(kāi)發(fā)商自己去選擇合適的平臺(tái),在此基礎(chǔ)上進(jìn)行二次開(kāi)發(fā),即調(diào)用所選TTS平臺(tái)提供的標(biāo)準(zhǔn)接口,實(shí)現(xiàn)語(yǔ)音合成功能。
目前CTI已經(jīng)成為全球發(fā)展最為迅猛的產(chǎn)業(yè)之一,每年以50%的速度增長(zhǎng),CTI如同計(jì)算機(jī)產(chǎn)業(yè)一樣是一個(gè)金字塔形的產(chǎn)業(yè)鏈,從上到下會(huì)以至少20倍的幅度增值。TTS作為一種誘人的新技術(shù),如果能很好的嵌入到增值業(yè)務(wù)的應(yīng)用中去,必將形成一個(gè)更好的應(yīng)用前景。
杭州音通軟件有限公司是由國(guó)家教育部和浙江省人民政府聯(lián)辦并依托浙江大學(xué)而成立的高新技術(shù)公司,音通公司主要致力于計(jì)算機(jī)語(yǔ)音技術(shù)的研發(fā)并逐步開(kāi)拓語(yǔ)音識(shí)別、語(yǔ)音流媒體傳輸?shù)绕渌Z(yǔ)音領(lǐng)域的研究。其核心技術(shù)(Intone_TTS)是具有自主知識(shí)產(chǎn)權(quán)的中文語(yǔ)音合成技術(shù),在由浙江省科技廳組織的鑒定中被專(zhuān)家一致鑒定為國(guó)內(nèi)領(lǐng)先地位,并已申請(qǐng)多項(xiàng)國(guó)家專(zhuān)利。
Intone_TTS是一套把文本信息轉(zhuǎn)換為語(yǔ)音信息的開(kāi)發(fā)工具包,為系統(tǒng)集成商、軟件開(kāi)發(fā)商提供了完備的接口函數(shù)和編程示例,使用戶能夠靈活的進(jìn)行調(diào)用,并集成到其它應(yīng)用系統(tǒng)中。接口需要語(yǔ)音合成運(yùn)行庫(kù)的支持,適合多種開(kāi)發(fā)環(huán)境。開(kāi)發(fā)者可以根據(jù)具體的應(yīng)用場(chǎng)合進(jìn)行選擇。
它能夠?qū)λ械臐h字、英文、阿拉伯?dāng)?shù)字進(jìn)行語(yǔ)音合成;
支持繁體字及多音字的編輯;
合成效果:自然、平滑;
規(guī)范的函數(shù)調(diào)用接口,同時(shí)支持微軟SAPI的調(diào)用;支持同步調(diào)用和異步調(diào)用方式;
支持PCM Wave,uLaw/aLaw Wave,ADPCM,Dialogic Vox等多種語(yǔ)音格式;
支持GB2312碼(簡(jiǎn)體中文)、BIG5碼(繁體)、UNICODE碼;
支持多路通道同時(shí)合成;
支持Dialogic、東進(jìn)、三匯等主流語(yǔ)音板卡;
TTS就是Text To Speech,文本轉(zhuǎn)語(yǔ)音,文本朗讀,差不多是一個(gè)意思。在語(yǔ)音系統(tǒng)開(kāi)發(fā)中經(jīng)常要用到。
目前市場(chǎng)上的TTS很多,實(shí)現(xiàn)方式也各式各樣,有的很昂貴,如科大訊飛,據(jù)說(shuō)當(dāng)初得到863計(jì)劃的資助,有很高的技術(shù);有的相對(duì)便宜,如捷通華聲, InfoTalk;也有免費(fèi)的,如微軟的TTS產(chǎn)品。
相對(duì)于ASR(Automatic Speech Recognition,自動(dòng)語(yǔ)音識(shí)別)來(lái)說(shuō),實(shí)現(xiàn)一個(gè)TTS產(chǎn)品所需要的技術(shù)難度不算大,在我看來(lái)也就是個(gè)力氣活。
要是讓我們來(lái)做一個(gè)能夠把漢語(yǔ)句子朗讀出來(lái)的TTS,我們會(huì)怎么做呢?
有一種最簡(jiǎn)單的TTS,就是把每個(gè)字都念出來(lái),你會(huì)問(wèn),豈不要錄制6千多個(gè)漢字的語(yǔ)音?幸運(yùn)的是,漢語(yǔ)的音節(jié)很少,很多同音字。我們最多只是需要錄制: 聲母數(shù)×韻母數(shù)×4,(其實(shí)不是每個(gè)讀音都有4聲),這樣算來(lái),最多只需要錄制幾百個(gè)語(yǔ)音就可以了。
在合成的時(shí)候需要一張漢字對(duì)應(yīng)拼音的對(duì)照表,漢字拼音輸入法也依賴這張表,可以在網(wǎng)上找到,不過(guò)通常沒(méi)有4聲音調(diào),大不了自己加上,呵呵,要不怎么說(shuō)是力氣活呢。
這樣做出來(lái)的TTS效果也還可以,特別是朗讀一些沒(méi)有特別含義的如姓名,家庭住址,股票代碼等漢語(yǔ)句子,聽(tīng)起來(lái)足夠清晰。這要?dú)w功于我們偉大的母語(yǔ)通常都是單音節(jié),從古代的時(shí)候開(kāi)始,每個(gè)漢字就有一個(gè)詞,表達(dá)一個(gè)意思。而且漢字不同于英語(yǔ),英語(yǔ)里面很多連讀,音調(diào)節(jié)奏變化很大,漢字就簡(jiǎn)單多了。
當(dāng)然,你仍然要處理一些細(xì)節(jié),比如多音字,把"銀行"讀成"yin xing"就不對(duì)了;再比如,標(biāo)點(diǎn)符號(hào)的處理,數(shù)字、字母的處理,這些問(wèn)題對(duì)于寫(xiě)過(guò)很多程序的你,當(dāng)然不難了。
國(guó)內(nèi)的一些語(yǔ)音板卡帶的TTS,不管是賣(mài)錢(qián)的還是免費(fèi)的,大體都是這樣做出來(lái)的,也就是這樣的效果。
如果要把TTS的效果弄好一點(diǎn),再來(lái)點(diǎn)力氣活,把基本的詞錄制成語(yǔ)音,如常見(jiàn)的兩字詞,四字成語(yǔ)等,再做個(gè)詞庫(kù)和語(yǔ)音庫(kù)的對(duì)照表,每次需要合成時(shí)到詞庫(kù)里面找。這樣以詞為單位,比以字為單位,效果自然是好多了。當(dāng)然,這里面還是有個(gè)技術(shù),就是分詞的技術(shù),要把復(fù)雜的句子斷成合理的詞序列,也有點(diǎn)技術(shù)。這也要怪新文化那些先驅(qū)們,當(dāng)初倡導(dǎo)白話文,引進(jìn)西文的橫排格式、標(biāo)點(diǎn)符號(hào)的時(shí)候,沒(méi)有引進(jìn)西文中的空格分詞。不過(guò)即使分詞算法那么不高效,不那么準(zhǔn)確,也問(wèn)題不大,如前面所說(shuō),漢字是單音節(jié)詞,把聲音合起來(lái),大體上不會(huì)有錯(cuò)。
當(dāng)然,科大訊飛的力氣活又干的多了些,據(jù)說(shuō)已經(jīng)進(jìn)化到以常用句子為單位來(lái)錄音了,大家可以想像,這要耗費(fèi)更多的力氣,換來(lái)更好的效果。
至于增加一些銜接處的"詞料",弄一些修飾性的音調(diào),我認(rèn)為是無(wú)關(guān)緊要的,對(duì)整體的效果改進(jìn)不是太大。
市面上商品化TTS一般還支持粵語(yǔ),請(qǐng)個(gè)粵語(yǔ)播音員錄音,把上面的力氣活重做一遍就是了。
再說(shuō)句題外話,很多人覺(jué)得錄音最好找電臺(tái)、電視臺(tái)的播音員,其實(shí)找個(gè)你周?chē)呐聛?lái)錄制,只要吐字清晰就可以了。在某種情況下,尋常聲音比字正腔圓的新聞聯(lián)播來(lái)得可愛(ài)。
再來(lái)說(shuō)說(shuō)文本的標(biāo)識(shí),對(duì)于復(fù)雜文本,某些內(nèi)容程序沒(méi)有辦法處理,需要標(biāo)識(shí)出來(lái)。比如,單純的數(shù)字"128",是應(yīng)該念成"一百二十八"還是"一二八"?解決辦法通常是加入XML標(biāo)注,如微軟的TTS:"<context ID = "number_cardinal">128</context>"念成"一百二十八","<context ID = "number_digit">128</context>"將念成"一二八"。TTS引擎可以去解釋這些標(biāo)注。遺憾的是,語(yǔ)音XML標(biāo)注并沒(méi)有形成大家都完全認(rèn)可的標(biāo)準(zhǔn),基本上是各自一套。
再說(shuō)說(shuō)TTS應(yīng)用編程,微軟的TTS編程接口叫SAPI,是COM接口,開(kāi)發(fā)起來(lái)還是有點(diǎn)麻煩,還好MSDN的網(wǎng)站上資料很全面。微軟的TTS雖然免費(fèi),但其中文角色目前是個(gè)男聲,聲音略嫌混濁,感覺(jué)不爽。
國(guó)內(nèi)一般的廠家提供API調(diào)用接口,相對(duì)比較簡(jiǎn)單,可以方便地嵌入應(yīng)用程序中去。
商品化的TTS還有個(gè)并發(fā)許可限制,就是限制同時(shí)合成的并發(fā)線程數(shù),我覺(jué)得這個(gè)限制用處不大。無(wú)論哪種TTS,都可以將文本文件轉(zhuǎn)換成語(yǔ)音文件,供語(yǔ)音卡播放。大部分應(yīng)用句子比較短小,一般不會(huì)超過(guò)100個(gè)漢字,合成的時(shí)間是非常短的,弄個(gè)線程專(zhuān)門(mén)負(fù)責(zé)合成,其它應(yīng)用向該線程請(qǐng)求就是了,萬(wàn)一句子很長(zhǎng),把它分解成多個(gè)短句子就是了,播放的速度總是比合成的速度慢。
也很多應(yīng)用是脫機(jī)合成,沒(méi)有實(shí)時(shí)性要求,就更不必買(mǎi)多個(gè)許可了。
更多情況下,我們甚至沒(méi)有必要購(gòu)買(mǎi)TTS,比如語(yǔ)音開(kāi)發(fā)中常見(jiàn)的費(fèi)用催繳,撥通后播放:"尊敬的客戶,您本月的費(fèi)用是:212元",前面部分對(duì)所有客戶都一樣,錄一個(gè)語(yǔ)音文件就是了,而數(shù)字的合成是很簡(jiǎn)單的,你只要錄制好10個(gè)數(shù)字語(yǔ)音,再加上十,百,千,萬(wàn),再加上金錢(qián)的單位"元"。
包括中文語(yǔ)音處理和語(yǔ)音合成,利用中文韻律等相關(guān)知識(shí)對(duì)中文語(yǔ)句進(jìn)行分詞、詞性判斷、注音、數(shù)字符號(hào)轉(zhuǎn)換,語(yǔ)音合成通過(guò)查詢中文語(yǔ)音庫(kù)得到語(yǔ)音。目前中文TTS系統(tǒng),比較著名的有:IBM,Microsoft,F(xiàn)ujitsu,科大訊飛,捷通華聲等研究的系統(tǒng)。目前比較關(guān)鍵的就是中文韻律處理、符號(hào)數(shù)字、多音字、構(gòu)詞方面有較多的問(wèn)題,需要不斷研究,使得中文語(yǔ)音合成的自然化程度較高。