原創(chuàng)|其它|編輯:郝浩|2009-10-16 13:27:23.000|閱讀 453 次
概述:在現(xiàn)在這樣一個全球化環(huán)境中,因為在不同的語言中有很多不同的語法規(guī)則,所以以前很多簡單的任務(wù)現(xiàn)在都變得很困難。你可以將一門特定的語言分成一組語法規(guī)則和針對這些規(guī)則的異常(以及一個基本詞語),從而將這些任務(wù)一般化。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在現(xiàn)在這樣一個全球化環(huán)境中,因為在不同的語言中有很多不同的語法規(guī)則,所以以前很多簡單的任務(wù)現(xiàn)在都變得很困難。你可以將一門特定的語言分成一組語法規(guī)則和針對這些規(guī)則的異常(以及一個基本詞語),從而將這些任務(wù)一般化。在一些編程語言(比如 Perl 和 Java)中,有一些公共域(domain)模塊可以用來對文本完成語言轉(zhuǎn)換。
下面給出一個稍微簡單一點兒的例子,假設(shè)我們要將一個數(shù)字轉(zhuǎn)換成其拼寫版本(例如需要填寫支票和法律合同)。這個訣竅在 Oracle 出現(xiàn)的早期已經(jīng)有了,一般都以如下方式使用:
selectto_char(to_date(12345,'J'),'Jsp') from dual;
Twelve Thousand Three Hundred Forty-Five
TO_DATE 函數(shù)使用 Julian 日期格式將數(shù)字轉(zhuǎn)換成一個日期。然后,TO_CHAR 接受一個日期參數(shù)并再次將其格式化為一個表示 Julian 日期的拼寫數(shù)字版本的字符串。但是這個決竅有一些限制。
首先,在 Oracle 中 Julian 日期的最大有效值是9999年,所以日期的最大值只能取到5373484,而最小值是1或4712BC.而且,因為沒有第“零”年,所以如果不額外使用一個 DECODE 或 CASE 語句就不可能生成文本“零”。第三個大的限制是它會忽略掉你的 NLS 設(shè)置。不管你使用的是哪種語言,數(shù)字總是以美國英語拼寫出。一些簡單的操作也存在這樣的問題,比如拼寫出天。例如,嘗試生成西班牙語短語“Cinco de Mayo”:
alter session set nls_language = 'SPANISH';
select to_char(to_date('0505','MMDD'),'Ddspth Month') from dual;
Fifth Mayo
在為大多數(shù)語言生成數(shù)字時涉及的語法實際上相當(dāng)簡單。主體工作包括收集所有不同的語法規(guī)則并建立起足夠的規(guī)則來生成正確的語法模式。(現(xiàn)在我將回避涉及到匹配數(shù)字和性別的問題。)
首先,我將創(chuàng)建兩個表:第一個表保存基本的單詞和異常,第二個表保存用于生成文本的一些簡單的模板模式。如果在第一個表中有數(shù)字,那么我的語言函數(shù)就返回那個文本。對于其它每個數(shù)字,我將試圖在一系列模式中匹配它,并應(yīng)用一個模板來生成正確的文本。
create table numwords(lang varchar2(2),num integer,word varchar2(30),constraint numwords_pk primary key (lang,num));
create table numrules(lang varchar2(2),seq integer,p1 integer,p2 integer,temp0 varchar2(30),temp varchar2(30),constraint numrules_pk primary key (lang,seq));
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:IT專家網(wǎng)