拼音匹配演算法
Ⅰ 如何模糊查找出拼音一樣或字形相近的漢字
這個應該是做出不難做好難。
這要看你的資料庫裡面要存儲著大量的拼音與漢字的相關信息。這樣數據量也是很大滴,所以需要很好的匹配演算法才是王道。
至於顯示這倒是很簡單。採用非同步,採用匹配演算法從資料庫中查找。
Ⅱ 比特信安數據脫敏系統亮點及特色
1.1 利用了大數據脫敏
結合四川省科技廳「海量數據信息挖掘脫敏技術研究及應用「項目,首次創新性地提出採用大數據平台技術實現海量數據的脫敏,結合智能匹配演算法對大數據內容進行選擇性脫敏的專利技術有效的解決了當前傳統的脫敏技術和產品(包括靜態數據脫敏和動態數據脫敏中使用的替換和加密)均不能解決的海量數據的敏感數據快速智能識別的問題。
1.2 FPE格式保留加密
在實際應用中,對資料庫中的信用卡號、身份證號等敏感數據進行加密非常必要,然而使用傳統分組密碼通常會擴展數據,使數據長度和類型發生變化,需要修改資料庫結構或應用程序來適應這些變化,成本非常高。
FPE通過克隆原始數據進行掩碼轉換,輸出一個與原數據格式、關聯一模一樣的數據,用於解決從生產環境的數據向測試環境(或者開發環境)導入時可能產生的數據內容安全問題。FPE技術在大數據領域作用非常大,比如美國Voltage 公司已將FPE 技術應用到其安全產品SecureData 中。
1.3 智能匹配演算法對大數據內容進行選擇性脫敏技術
常規手段對其進行脫敏保護時也會遇到不少難題,比如:使用單一的脫敏演算法對大數據進行整體脫敏保護,優點是策略簡單,直接將脫敏演算法平移到大數據脫敏系統中即可。缺點是單一的脫敏演算法對所有的海量數據進行脫敏處理,導致脫敏粒度較粗,不能有針對性的滿足系統的脫敏需求。
通過智能匹配演算法(比如近義詞搜尋、詞語向量相似度、縮寫識別、拼音匹配等智能搜尋演算法)對大數據內容進行選擇性脫敏處理,能智能、有效實現海量數據脫敏處理。
1.4 採用大數據保險箱專用硬體實現海量數據的高效脫敏處理
整個海量數據脫敏處理系統基於大數據平台技術,通過採用硬體級的大數據安全保險箱,通過採用sqoop/Impal技術實現海量數據的高效脫敏
1.5 支持動靜態脫敏
除靜態脫敏,比特信安脫敏系統可在通訊層面上,通過代理部署方式,對業務系統資料庫中敏感數據進行透明的、實時的脫敏。產品依據用戶的角色、職責和其他IT定義身份特徵,動態的對生產資料庫返回的數據進行專門的屏蔽、加密、隱藏和審計,可確保不同級別的用戶按照其身份特徵恰如其分的訪問敏感數據,並且不需要對生產資料庫中的數據進行任何改變。
動態數據脫敏同樣支持同義替換、部分遮蔽、混合脫敏、確定性脫敏及可逆脫敏,產品使用者可根據不同用戶身份特徵,指定對應的數據脫敏演算法。
Ⅲ 如何實現拼音與漢字的互相轉換,拼音漢字轉換器彝
基於詞庫的漢字轉拼音
詞庫中既要包含每個字的拼音,也要包含常用單詞/短語的讀音。有些字是多音字,所以至少要保存其最常用的讀音,不常用的讀音多出現在單詞短語里。
你好世界盃
我們的詞庫是這樣子的:
你:nǐ
好:hǎo,hào
世:shì
界:jiè
杯:bēi
世界:shì,jiè
你好:nǐ,hǎo
苦盡甘來:kǔ,jìn,gān,lái
詞庫中最長的詞苦盡甘來包含4個字。所以你好世界盃從4個字開始匹配:
判斷你好世界是否在詞庫中,不在;
判斷你好世是否在詞庫中,不在;
判斷你好是否在詞庫中,在,得到nǐ,hǎo;
判斷世界盃是否在詞庫中,不在;
判斷世界是否在詞庫中,在,得到shì,jiè;
判斷杯是否在詞庫中,在,得到bēi;
於是你好世界盃被轉換為nǐ,hǎo,shì,jiè,bēi。
基於詞庫和分詞工具的漢字轉拼音
純粹的基於詞庫的方法在實際的使用中會遇到問題,例如提出了解決方案這句話中了解會被當作一個單詞,所以會得到錯誤的結果:
tí,chū,liǎo,jiě,jué,fāng,àn
更好的方法是先進行分詞得到:
提出
了
解決
方案
然後基於詞庫對每個結果分別處理。
基於HMM的拼音轉漢字
這里的拼音一般不帶聲調。
將漢字作為隱藏狀態,拼音作為觀測值,使用viterbi演算法可以將多個拼音轉換成合理的漢字。例如給出 ti,chu,le,jie,jue,fang,an ,viterbi演算法會認為 提出了解決方案 是最合理的狀態序列。
HMM需要三個分布,分別是:
初始時各個狀態的概率分布
各個狀態互相轉換的概率分布
狀態到觀測值的概率分布
這個3個分布就是三個矩陣,根據一些文本庫統計出來即可。
viterbi演算法基於動態規劃,
基於詞庫的拼音轉漢字
原則:
詞的權重大於字的權重;
轉換中匹配的詞越多,權重越小。
詞庫的格式是:
拼音:單詞:權重
例如:
ni:你:0.15 ni:泥:0.12 a:啊:0.18 hao:好:0.14 nihao:你好:0.6
假如輸入是 ni,hao,a ,我們計算一下各種組合的權重:
組合 權重
你,好,啊 0.15×0.14×0.18 = 0.00378
泥,好,啊 0.12×0.14×0.18 = 0.003024
你好,啊 0.6×0.18 = 0.108
可以看出, 你好,啊 是最好的結果。
實際實現中需要用到 動態規劃 , 和求有向無環圖中兩點之間最短距離類似。
Ⅳ 求判斷字元串是否是拼音的成熟演算法
如果您是做輸入法引擎的話,不能這么做的。任意的用戶字母串都是拼音串。
例如:hello可以拆解為 he『l』l『o四段,您通過拼音輸入法輸入的話是可以完成輸入的。
所以要做的話應該採用自動機原理,或者樹結構來存儲以任意字元開頭的全部合法拼音組合。
例如 a開頭的字元有 a、ai、ao、an、ang,那麼以a開頭的樹的形狀如下,+表示葉子結點,即若遇到此葉子節點則序列此時結束為合法序列。
a
i o n +
+ + + g
若給您一個字串是以a開頭的,則從此樹的根結點開始查找,例如序列為anaang
則起始查到an下一個字元為a所以已經無法再向下查找了,此時an即為一個拼音段,
接著下一個序列又是以a開頭的所以繼續在此樹中查找,可以查到a此時a即為一個拼音段,
接下來重復這個過程,得到ang所以anaang的序列就被劃分為了an'a'ang序列。
您只需要為26首字母建立樹即可完成所有序列的匹配。
Ⅳ 微軟拼音輸入法的編碼規則
微軟拼音輸入法是中國第三代漢字編碼輸入法.中文的輸入法是從1974年8月開始基礎工作,這個工程項目又叫「748工程」,其主要成果之一是《漢字頻度表》,首先為漢字信息處理提供了重要的基礎數據。經過對《漢字頻度表》和其它字表的統計分析,國家標准總局頒布了漢字信息處理領域的第一個國家標准《信息交換用漢字編碼字元集·基本集》(GB2312-80)。這是一個在中國的漢字信息處理歷史上劃時代的、具有深遠影響的標准。
1981年,武漢大學等公布了在《新華字典》字集范圍內的字根頻度統計結果。1984年,國家文字改革委員會與武漢大學公布了《辭海》字集范圍內漢字筆畫、部件、結構的動態統計分析結果。
1985年,國家文字改革委員會與山西大學公布了人命姓氏用字的抽樣統計分析結果。
1986年,北京航空學院、新華社利用計算機技術分別公布了基於大型語料庫的新的漢字使用頻度統計和流通頻度統計1985年後,北京師范大學、上海交通大學、北京語言學院等分別使用各具特色的自動分詞技術公布了基於大型語料庫的現代漢語詞語使用頻度統計北京大學計算機語言研究所還建立了以漢語語法為中心的「現代漢語語法信息詞典」 內容全面、翔實、使用方便的漢語語料庫、字詞屬性庫對推動漢字編碼鍵盤輸入技術的發展起到了重大作用。
九十年代後公布的與漢字鍵盤輸入系統有關的國家標准有GB13000.1《信息技術多八位編碼字元(UCS)》、GB18030 《信息技術 信息交換用漢字編碼字元集基本集的擴充》、GB18031 《信息技術 數字鍵盤漢字輸入通用要求》、GB15834 《標點符號用法》和即將公布的有GB/T18220-2000《信息技術 通用鍵盤漢字輸入通用要求》。語委頒布的規范有GF3001 《信息處理 GB13000.1字元漢字部件規范》、GF3002 《GB13000.1字元集漢字筆順規范》、GF3003 《信息處理用漢語拼音方案表示規范通用鍵盤》。
下面是從第一代輸入法到微軟輸入法的一些介紹:
第一代漢字編碼輸入法
電子工業部第六所於1983年正式公布了我國第一個中文磁碟操作系統CC-DOS,這在我國中文信息處理歷史上具有劃時代的意義。CC-DOS是在PC-DOS的基礎上擴充、修改而成。在廣泛使用的CC-DOS 2.1版中,有簡拼、首尾碼、快速碼和區位碼輸入法,已經涵蓋了包括音碼、形碼、音形碼和數字碼這些主要類型的輸入法,對我國計算機應用的普及起到了開路先鋒的作用。
當時使用得最廣泛的輸入法是簡拼和首尾碼。簡拼是純音碼,使用的是介於全拼和雙拼之間的一種拼音方法,對三個及三個字母以上的韻母進行了壓縮。首尾碼是一種純形碼,包含97個部件,分為52類;部件到鍵盤字母的映射沒有太多的規律可循,記憶量很大;編碼時只取字首和字尾各一個部件,對於未列出的變形部件需要輸入者自己去猜測其應歸屬的鍵位。這兩種方法都不支持聯想,也不支持片語,都有很多重碼。因此,在輸入時選擇、翻頁操作很頻繁,眼睛需要不斷地掃描提示行以便在眾多的重碼中找尋所需的字,輸得又累又慢,更不可能實現盲打。
快速碼是通過壓縮拼音加碼方法實現的,可以在一定的程度上離散重碼。由於快速碼的加碼方法沒有規律可循,因此沒有得到真正的應用。區位碼需要完全要靠死記6763個漢字和符號的數字編碼來輸入,因此除了用於輸入當時還沒有其它辦法輸入的標點符號外,基本上沒有人實際使用。
另一個早期的漢字編碼輸入法是電報碼。電報碼為4位等長碼方案,使用的碼字從0000到9999,可以代表一萬個字元(包括漢字、字母、符號)。電報碼沒有重碼,但編碼的規律性不強,十分難記。因此,它完全是為了郵電部門那些已經熟悉電報碼的人的需要而移植進計算機的,對一般的漢字輸入者沒有什麼意義。
1986年,聯想集團在推出聯想漢卡的同時推出了聯想式漢字環境,首先使用了聯想方法來加快漢字的輸入。那時還沒有片語輸入方法,聯想技術讓人耳目一新。漢字輸入過程由原來的編碼->翻頁->選擇->編碼...變成了編碼->選擇->選擇...,因此稍後的很多輸入法都採用了這種技術。不過,按照現代漢字編碼輸入技術的標准來看,聯想技術仍然存在兩個致命的弱點。一個弱點是,如果後續要輸入的字與前面已輸入的字不能構成片語的話,則聯想就會失敗。另一個弱點是,聯想選擇時人機交互過於頻繁,雖然平均碼長縮短了,但是實際的輸入速度反而會下降。
總之,第一代漢字編碼輸入法的特點是:在DOS環境下,以單字為單位進行輸入,在屏幕底部提供專門的提示行顯示數量眾多的重碼字,翻頁、選擇操作頻繁;用數字鍵選擇重碼字,用ALT+數字鍵可重復選擇出現在提示行中的重碼字;連極為常用的標點符號的輸入都需要使用區位碼,很不方便;聯想技術的採用使輸入效率有所改善,但其作用是相當有限的;各種輸入法間的切換(包括切換到英文)都是通過復合功能鍵ALT+Fn(F1-F12)來進行的;支持全形和半形方式,但不支持中文標點方式;不支持片語輸入,更不支持自定義片語。
第二代漢字編碼輸入法
1986年,四通公司與日本三井物業合作,推出了四通MS-2400中文電子打字機,宣告了中國專業電子打字時代的到來。隨著四通打字機的廣泛使用,首先捆綁在四通打字機上的五筆字型輸入法流傳開來,後來捆綁到四通打字機上的由劉衛民發明的雙音輸入法也在當時得到比較廣泛的使用。
五筆字型是最典型的純形碼部件類方案。在五筆字型中,一般將部件稱為字根。五筆字型採用了130個基本字根。基本字根按起筆分為五類,對應通用鍵盤上的五個區。每類又細分為五組,每組對應一個鍵盤字母。在一個漢字中,字根間的關系被歸納為「單、散、連、交」四種。在漢字拆分時,遵循「取大優先,兼顧直觀,能連不交,能散不連」的原則。五筆字型將漢字被分為鍵名漢字、成字字根漢字和鍵外漢字三種,分別服從不同的編碼規則。另外,字的編碼還有一、二、三級簡碼,其形成方法是取相應全碼的前一、二、三個字母。五筆字型將片語也分為二字詞、三字詞和多字詞三種。二字詞按順序取各字的前兩個字根來編碼。三字詞按順序取頭兩個字的第一個字根和末字的前二個字根來編碼。多字詞按順序取第一、二、三、末字的第一個字根來編碼。
五筆字型以非常復雜的編碼規則換來了在GB2312-80字元集內較低的重碼率。當採用強制簡碼時,還可進一步將低重碼率。片語編碼被放進全碼字的剩餘編碼空間中,實現了字詞混合編碼。只要收錄的片語量不大,發生重碼的可能性是比較小的。一般的五筆字型不具備自造詞的功能。五筆字型擁有的這些特點,正好適應了職業打字的需要,成為它在職業打字時代非常流行的重要原因之一。
雖然五筆字型在市場上取得了巨大的成功,但它存在的問題也是不容忽視的。首先,五筆字型是非常難學的,而且容易遺忘。它除了有非常復雜的編碼規則而外,還有很多例外需要記憶。五筆字型打字員在打字時對一些常見字出現「卡殼」的現象是很普遍的事情。這時就需要臨時換用拼音輸入法。其次,五筆字型的擴展性差。當字元集從GB2312-80到GBK和GB18030過渡時,當片語量增大時,五筆字型在碼長為4的碼位上會出現大量的重碼,使其喪失重碼率低的優勢。五筆字型採用的是4碼無重碼自動上屏的策略,4碼重碼增多就迫使打字員的視線更多地離開稿件來觀察提示行以確認自己的輸入,從而降低錄入速度。最後,五筆字型最致命的弱點是規范性差。張孝存等就此提出了言辭激烈的批評:「五筆字型違反語言文字規范。它對漢字的拆分具有相當大的隨意性,對國民基礎文化素質具有不可忽視的負面影響。它對規范的漢字教育的沖擊同其應用范圍的擴大成正比[20]。」
雙音輸入法是一種比較巧妙的純音碼 [23][25]。雙音輸入法最大的特點就是「以詞定字、反向聯想」,以緩解純音碼方式下單字重碼過多的問題。因為二字詞的數量很多,所以一般情況下總可以找到某個二字詞,它的第一個字就是你想要輸入的字。如果該二字詞處於提示行的第一候選位置,則可以省略選擇鍵;否則需要用數字鍵進行選擇。如果整個二字詞都是你需要的,你可以加一個空格鍵輸入第二個字。也就是說,如果採用雙拼的話,利用「以詞定字」技術可以使得常用字輸入時的平均擊鍵數為2.5,而且基本上避免了傳統拼音+聯想方式下過多地掃視提示行和翻頁、選擇的毛病。在雙音輸入法中,對於三字詞和四字詞,取各字的聲母作為編碼來輸入,必要時加空格結束。對於不認識的字,可以打入「\\」調用「手寫模擬」。雖然可以自定義片語,但它不支持在線造詞。造詞時需要用外部文本編輯器按照它定義的格式輸入編碼和對應的片語。
雙音輸入法是拼音漢字輸入歷史上的一大進步,在當時受到了許多非職業打字員的歡迎。但是,它也存在一些比較嚴重的不足,以至於現在幾乎沒有人再使用它了。首先,雖然在輸入效率上它較傳統的拼音有很大的提升,但是它與後來的語句級拼音輸入法如智能ABC相比,還有相當的差距。另外,「以詞定字」時很多字可以採用多個詞來確定,而有的字難以找到詞來確定,用戶常常感到不知所措。雖然雙音輸入法中提供了很多其它的方法來解決單字的錄入問題。例如,鄧、郭、姚等姓氏用字的輸入就有6條輔助規則。要記住這些方法並判斷何時採用何種方法可不是一件容易的事情。由於只能離線造詞,所以片語的自定義也很不方便。
第三代漢字編碼輸入法
到了九十年代末,隨著微機價格的進一步降低、存儲處理能力的進一步增強、Windows圖形操作系統的流行和國際互聯網的興起,用戶界面變得非常友好,微機大面積地進入中國的普通百姓家庭,進入了中小學教育中,真正實現了微機在中國的大普及。
微機的大普及使得打字成為每個人的基本技能,就像會寫漢字一樣;需要別人打字就像需要別人代筆一樣,實際上是文盲的標志。這樣便造就了一個龐大的非職業打字員用戶群體。打字員作為一個職業正在快速消失。一般用戶在打字時的操作方式是「想打」,與職業打字員的「盲打」方式完全不同。「盲打」要求操作者盡量少看屏幕,輸入法提供的反饋信息只有在操作員不能「盲打」時才偶爾派上用場;而「想打」時操作者始終是看著屏幕的,輸入法所提供反饋的方式和反饋信息量的大小都會對操作者的輸入活動產生巨大影響。Windows圖形操作系統為人機界面的豐富化提供了前提條件,可以滿足反饋信息多樣化的需求。
現代微機強大的存儲處理能力為新型的存儲密集型和處理密集型輸入法的誕生提供了物質基礎。輸入法程序不再局限於DOS時代64KB的駐留內存中。千兆級的運算速度使得復雜的智能演算法得以投入運行。硬碟容量不僅從兆級擴大到千兆級,訪問硬碟的速度也比DOS時代大大提高。將巨型的詞庫存儲在硬碟上並進行快速搜索已不成問題。
計算機教育日益廣泛地在中小學開展後,學生們從小就開始學習打字了。漢字編碼與語言文字教育的關系問題被尖銳地提了出來。起碼的要求是,漢字編碼不能與語言文字知識相沖突。理想的情況是,把漢字編碼輸入與語言文字知識的學習結合起來,起到相互促進的作用。
在上述背景下,第三代漢字編碼輸入法應運而生,其指導思想是:規范、易學、易用並且盡量保持輸入速度。這一時期,智能化拼音輸入法的研究高潮迭起,也出現了以筆畫或筆對為輸入單位的純形碼,還出現了以聲母和筆畫(或筆對)為基礎的音形碼[29]-[48]。
(1) 智能化拼音輸入法
智能化拼音輸入法按其實現原理可以分為四種:基於理解的、基於語用統計的、基於模板匹配的和基於上下文關聯的。
智能ABC是目前Windows操作系統上使用得最為廣泛的准語句級拼音輸入法,因為它是以片語和短語為單位而不是以全句為單位進行轉換的。智能ABC最大的特色是能夠非常方便地自定義片語和調整重碼字詞的順序。用戶只需按自己的想法進行輸入,輸入時可以不進行手工分詞,系統會從前到後逐個進行自動分詞。在沒有片語時,系統自動按單字方式顯示重碼字供用戶選擇;一旦用戶選定並組成新詞後,系統就可以記住它。在系統分詞不正確或系統提供的詞不是用戶需要的詞時,用戶也可以加以修改,系統也能記住用戶所作的修改。通過較長時間的使用後,如果用戶沒有發生變化,系統逐步適應該用戶的使用習慣,使用戶的輸入過程變得自如起來。
智能ABC也有很多值得改進的地方。首先,在輸入時可以隨意使用全拼、簡拼、混拼,輸入者可以在任何時候進行音字轉換,過多的方式讓用戶不知哪種是最好的。看似非常靈活,但卻實際上是把優化輸入的任務交給了用戶。但大多數用戶不是這方面的專家,不可能很好地完成這項任務,從而導致用戶走很多彎路或形成不好的、低效的輸入習慣。其次,音字轉換的准確率不高,句內修改很頻繁,導致輸入速度不理想,即使使用雙拼也沒有自然碼的效率高。
微軟拼音是真正意義上的語句級音字轉換智能輸入法,是微軟自然語言處理技術多年科研成果的結晶。微軟拼音採用拼音作為漢字的錄入方式,用戶不需要經過專門的學習和培訓,就可以方便使用並熟練掌握這種漢字輸入技術。微軟拼音採用基於語句的整句轉換方式,用戶連續輸入整句話的拼音,不必人工分詞、挑選候選詞語,這樣既保證了用戶的思維流暢,又大大提高了輸入的效率。微軟拼音提供的人機界面非常具有特色。組字窗口可以嵌入正在輸入的文本的插入游標處,減少用戶在輸入時視線的移動頻率,使得輸入法的易用性得到了很大提高。逐鍵變換並提示轉換結果,使得用戶不必自己做何時進行轉換的決策。用戶可以輸入的編碼長度沒有限制,當超過系統的長度上限或遇到句號時系統會自動進行轉換,以便用戶能繼續不間斷地輸入。由於考慮的上下文較廣,微軟拼音能夠達到很高的轉換准確率。微軟拼音在默認情況下拒絕用戶輸入簡拼和混拼,可以引導用戶養成良好的輸入習慣。
微軟拼音也存在一些問題。首先,在編碼輸入出錯或轉換不正確時進行句內編輯的操作很繁瑣和低效。其次,逐鍵變換時往往會把已經轉換正確的內容又修改錯了,用戶不得不隨時監視輸入內容的正確性,當已轉換的內容較多時是非常勞心的。另外,微軟拼音沒有提供方法加速單字的錄入,也沒提供方法來輸入不認識的字,是不完備的輸入法。
基於筆畫(或筆對)和/或聲母的輸入法
採用筆畫、聲母這兩個最簡單的漢字特徵信息來進行編碼,可以極大地提高輸入法的易學性[12]。但是,漢字的筆畫一般歸為五種。筆畫種類太少,勢必增加編碼的長度,從而影響輸入速度。於是,如何縮短碼長、提高錄入效率成了這類輸入法成功與否的關鍵問題。
福建雙筆碼軟體開發有限公司研製的雙筆碼是一種基於筆畫的純形碼。為了克服筆畫種類過少的問題,雙筆碼引入了一種新的筆畫類型「叉」,從而將筆畫種類擴大為六種,取碼時按順序每取兩筆構成一個筆對,共可形成36種不同的筆對,並在鍵盤上相應的鍵位區內選擇鍵位輸入。另外,雙筆碼還規定病字旁、「口」、提手旁和「日」應作為一個整體取碼。根據漢字不同構造的組合形狀,雙筆碼把漢字劃為三類基本字型即左右型、上下型和綜合型。不論哪種類型的漢字,均按四碼進行編碼。雙筆碼片語的輸入方法為:二字詞輸入每個字的頭兩碼;三字詞輸入前兩個字的頭一碼和末字打頭兩碼,四字及四字以上詞輸入一、二、三、末字的頭一碼。
雙筆碼的優點是:與傳統的部件類輸入法相比,記憶量減少了許多;採用筆對和36鍵編碼後平均碼長也相當短;如果不按筆對而按單筆畫輸入,就可以非常容易地向數字鍵盤移植雙筆碼。但是雙筆碼的缺點也非常明顯:作為基於筆畫的輸入法,它的取碼和編碼規則復雜,例外也不少,學習難度仍然很大;採用了上排數字鍵進行編碼,擊打不方便,且與常用數字的輸入相沖突,影響了實際輸入速度。
陳勁松先生發明的二筆輸入法是目前使用得比較廣泛的輸入法之一。它是一種基於聲母和筆畫的輸入法,也可以單純基於筆畫進行輸入。二筆輸入法的30個編碼字元在通用鍵盤上分布於六個區,即五個雙筆畫區和一個單筆畫區。區內再根據雙筆畫的第二筆或根據單筆畫,按橫、豎、撇、點、折的順序定位。但10個設定偏旁部首的鍵位需要記憶。二筆輸入法將漢字按字形結構分為獨體字和合體字。輸入漢字時,第一碼取漢字拼音首字母,從第二碼起取筆畫,最多取四碼,不足四碼應全取,不能取雙筆畫時就取單筆畫。獨體字不必拆分;第一碼取拼音首字母,第二碼起按筆順取筆畫的代碼,最多取四碼。合體字拆分成兩半,按漢字筆順規則,先寫的部分定為前半,後寫部分為後半;第一碼取取拼音首字母,第二碼取前半的第一、二筆,第三碼取後半的第一、二筆,第四碼取後半的第三、四筆。二筆輸入法片語的編碼規則為:二字詞取每個字的前二碼,三字詞取第一字的前二碼和最後兩個字的第一碼,四字及四字以上詞取前三字和最後一字的第一碼。
二筆輸入法的優點是:編碼規則比雙筆碼更加簡單,使用的編碼字元也僅有30個;通過使用聲母和筆畫兩種漢字特徵信息編碼,區分同碼字詞的能力得到了增強,取得了較高的輸入效率;對於不認識的字還可以按全形方式輸入;如果不按筆對而按單筆畫輸入,也可以非常容易地向數字鍵盤移植。但是二筆輸入法也還存在問題:由於使用了筆對和設定部首,並需區分獨體字和合體字進行不同的編碼,因而學習難度和使用難度仍然較大。
數字鍵盤編碼輸入法
迄今為止,全國手機擁有量已超過3億,手機簡訊息的產值超過50億人民幣。手機擁有量已經超過PC機用戶,用手機輸入漢字的人群遠遠超過用通用大鍵盤輸入漢字的人群。
目前,美國特捷公司的T9拼音和T9筆畫輸入法、加拿大字源公司的字能筆畫輸入法和Motorola公司的iTap輸入法壟斷了中國大陸和港台的手機輸入法市場。但是,國外的手機數字鍵盤輸入法很不盡人意。以筆畫輸入為例,iTap用9個筆畫,字能用8個筆畫,T9用5個筆畫。相同的一個筆畫,不同的手機可以放在不同的位置上,輸入速度也不理想。
為了打破外國手機輸入法壟斷中國手機市場和手機輸入法不規范的尷尬局面。由中國中文信息學會等主辦,由黃金碼出版社(香港)有限公司等單位承辦,於2004年11月21日,在人民大會堂舉行了為期三天的中國首屆手機中文輸入大賽暨漢字數字碼輸入技術應用高峰論壇。在32支參賽隊伍中,有23支參加模擬手機漢字數字碼輸入比賽,9支參加手機中文輸入比賽。除了已參賽的數字編碼方案外,比較引人注意的還有王永民先生的五筆數碼[49]、鄭岩松先生的左右數碼[50]等。以下僅對當前使用得最為廣泛的T9拼音、T9筆畫和首屆手機中文輸入大賽中獲得冠軍的黃金碼、大眾數字碼進行介紹。
T9拼音本質上採用的是一種全拼單字加聯想的早期通用鍵盤輸入技術。其最重要的創新是可以根據手機鍵盤上按鍵的組合情況判斷是否能組合成合法的普通話音節,從而避免了傳統上通過多次按鍵來輸入一個拼音字母的弊端。但是,當按鍵組合適合多個合法的普通話音節,而且默認選擇的普通話音節又不是用戶所需要的時,用戶還是得進行手動選擇。另外,全拼的拼式過長、需要按1鍵進入選擇狀態和聯想造成的過度人機交互都使得T9拼音的輸入效率很低,而且全拼對普通話不好的人難度很大。
T9筆畫採用目前多數輸入法對筆畫的歸類方法將漢字筆畫歸為橫、豎、撇、點、折五類,分別用1、2、3、4、5表示。錄漢字時,按筆順進行輸入,逐鍵提示,每屏數個,高頻優先,最長可輸入12個筆畫,並支持聯想。由於分別使用五個鍵表示五種筆畫,因此不需要像T9拼音一樣對組合情況進行智能判斷,內部處理邏輯很簡單。T9筆畫充分利用了豐富的筆畫信息和不等長碼的短碼位,並可以直接鍵選重碼字,所以它的實際輸入效率比T9拼音還高。
大眾數字碼[51]用10個數字對字詞進行編碼。除了用1、2、3、4、5分別表示橫、豎、撇、點、折五種筆畫外,還用6、7、8、9、0分別表示交、插、八、小、口五類部件。單字按筆順取第一、二、三、四、末五個代碼、不足時按實際碼長,片語的碼長為6位。大眾數字碼使用了相當多的筆畫組合作為部件,但由於歸類清晰,記憶起來比很多同類的輸入法要容易些,加上精心的編碼規則降低了重碼率,使得它在比賽中脫穎而出。不過,應當看到它使用的部件相當多,編碼規則也並不簡單,學習難度還是相當大的。
黃金碼用9個數字對字詞進行編碼。除了用1、2、3、4、5分別表示橫、豎、撇、點、折五種筆畫外,還用6、7、8、9分別表示「口」、「十」、「八」、「亠」四類部件。編碼時分字首和字尾,也區分獨體字與合體字的不同。在提示行不為空時,0、*和#用做選擇鍵。黃金碼最大的特色是,在輸入時若用於編碼的數字與已輸入的編碼一起不能構成另外的字詞編碼時,該數字鍵就可以用於選擇同碼字詞,這樣就大大地增加了輸入法的鍵選能力,縮短了動態平均碼長;結合高頻先見的不等長碼的使用,在輸入時基本上不用翻頁,進一步提高了輸入效率。不過,字首與字尾的區分沒有標准可循,常常因人而異;動態地使用剩餘編碼鍵選擇重碼字詞也造成選擇鍵位置變化太大,加重了人機交互的負擔。
以上是我從事電腦工作以來接觸的幾種我熟悉的輸入法,不知道對你能否有所幫助.
其實就是一個簡單的演算法問題,我給你寫出演算法來,補代碼就簡單多了。
看你問題的描述,就是給定一個數,給出對應的拼音。但是要按習慣讀出來,對吧。其實不難,抓住主要的,數:0~9對應的拼音,還有就是讀出位數來,個,十,百等。所以就簡單多了
先要有0~9對應的拼音。
再要有位數的拼音:(個就可以不要了),十,百,千。。。。。。
有幾個注意點:1>給一個數,拆除他的個,十,百,等。就是利用 x/y和x%y,這個相信,是個編程的人都會。(有個這個就可以確定 』百『,『十』,等了。),
2>這個是一個細節的處理問題。102讀作 1百0二,1002讀1千零二,100002,10201等。就是一個數這么讀的問題,就不多說了,小學的,都懂。
代碼其實很簡單了吧。
Ⅶ 通訊錄拼音搜索模糊匹配的演算法問題
我用java寫了個簡單的,你可以多測試下:
publicstaticvoidmain(String[]args){
String[]name={"wang","hai","bao"};
String[]tests={"whb","WaHB","wangHB","HB","wh","whbo","whba"};
for(Stringstring:tests){
System.out.println(string+":"+match(name,string));
}
}
publicstaticbooleanmatch(String[]source,Stringinput){
if(source==null||source.length==0||input==null||input.length()==0){
returnfalse;
}
Stringtemp;
//統一轉小寫
input=input.toLowerCase();
for(inti=0;i<source.length;i++){
temp=source[i].toLowerCase();
if(temp==null||temp.length()==0){
returnfalse;
}
//最後一步特殊處理
if(i==source.length-1){
if(temp.startsWith(input)){
returntrue;
}
}
//輸入的字元完全匹配到
if(input.startsWith(temp)){
//匹配到後生成新的字元串
input=input.substring(0,input.indexOf(temp));
//System.out.println("temp:"+temp+" 匹配到後input:"+input);
}
//首字母匹配到
elseif(temp.startsWith(input.substring(0,1))){
input=input.substring(1);
//System.out.println("temp:"+temp+" 匹配到後input:"+input);
}else{
returnfalse;
}
//表示匹配結束
if(input.length()==0){
returntrue;
}
}
returnfalse;
}
Ⅷ 求一漢字拼音匹配演算法
這可是大活
cxsj 可能是 程序設計,還可能是 持續時間
Ⅸ 漢字可以通過演算法獲取拼音,那如何英文有辦法通過單詞獲取音標嗎
漢字獲取拼音是有一個碼有的,也就是詞庫,任何輸入法都要有一個詞,每次用戶輸入的法,都把當前的字每到詞庫裡面匹配一下,然後就知道會有哪些可能的組合。如果想要音標,就要把每個單字的音拼弄出來做成一個音標文件,然後程序運行的時候去那個文件裡面查。
Ⅹ 拼音分詞演算法 C語言
#include <stdio.h>
#define M_JUZI 200
// 樹圖的鏈表驗證結構
// 用圖的鏈式存儲來構造樹,子樹均記錄串的靜態位置(索引)
typedef struct ST_FenCi{
int LeiBie; // 連什麼類別?1 : 韻母,2 : 聲母
int SuoYin; // 聲母後的韻母索引 或者 詞語中韻母後一個字的聲母索引
struct ST_FenCi *pN; // 兄弟
} FenCi;
typedef struct ST_Ci{
int SuoYin; // 在原始串內的子串(字)索引
int Chang; // 子串長度
} Ci; // 記錄結果的結構
typedef struct ST_ShengMu {
char Pin[3]; // 聲母字元串
FenCi *pLian; // 分詞樹的子樹
} ShengMu; // 用來定義聲母的靜態集合
typedef struct ST_YunMu {
char Yin[5]; // 韻母字元串,區別於聲母
FenCi *pLian; // 分詞樹的子樹
} YunMu; // 用來定義韻母的靜態集合
// 聲母開字頭
ShengMu smJiHe[29] = {{""},{"b"},{"c"},{"d"},{""},{"f"},{"g"},
{"h"},{""},{"j"},{"k"},{"l"},{"m"},{"n"},
{""},{"p"},{"q"},{"r"},{"s"},{"t"},{""},
{""},{"w"},{"x"},{"y"},{"z"},{"ch"},{"sh"},{"zh"}};
// 韻母收字尾
YunMu ymJiHe[24] = {{"a"},{"o"},{"e"},{"i"},{"u"},{"v"},
{"ai"},{"ei"},{"ui"},{"ao"},{"ou"},
{"iu"},{"ie"},{"ue"},
{"er"},
{"an"},{"en"},{"in"},{"un"},{"vn"},
{"ang"},{"eng"},{"ing"},{"ong"}};
// 關於分字樹,完全可以按照「現代漢語詞典」的音節表來構造
// 某分字子樹的構造
void InitFenZiShu0() {
}
int main() {
char JuZi[M_JUZI];
//scanf("%s",JuZi);
// 演算法1. 首字哈希查找,鏈表連字,鏈表連詞
// 如果需要查找的表有限,可以用if ,else,也可以用哈希查找
// 待解決的問題:
// 1.1. 聲母頭與聲母尾的混淆,兩個字頭之間至少相差三個位置
// 1.2. 韻母尾與聲母頭的混淆,上下文,回退
// 1.3. 超前搜索,首先,如果韻母可以擴展到更長的另一個韻母,
// 1.3.1 從韻母收字的時候,
// 不僅要嘗試韻母的"擴展",而且要判斷擴展後新韻母的後綴,
// 如果這個後綴為聲母頭,那麼在聲母頭的後面是否有合適的韻母構成一個新字?
// 如果有,就需要記錄這種可能,而且做好提前收尾的准備
// 如果沒有,理所當然要把新的韻母繼續"擴展"
// 這樣的韻母比如:e->er, a->an->ang, e->en->eng, i->in->ing, u->un,
// 這樣的聲母比如:e, r, g
// 1.3.2 從聲母找字的時候,
// 如果後面找不到聲母頭鏈表裡所有的韻母,就可以擴展匹配更長的聲母
// 演算法2. 漸進地找到所有聲母點,上下文分析,修正,分析到結構,顯示
// 演算法2.1 對原文的每個字,逐個匹配已知聲母
// 演算法2.2 已知聲母,在一定范圍里搜集在原文里出現的每個聲母點
getchar(); // enter
return 1;
}