跟打器詞語(yǔ)標(biāo)記算法與理論編碼

源于在開(kāi)發(fā)了拖拉機(jī)跟打器之后檀头,就有人問(wèn)過(guò)轰异,跟打器的詞語(yǔ)標(biāo)記是怎么算出來(lái)的,找了個(gè)時(shí)間寫(xiě)下這篇文章暑始,整篇文章建立在java的基礎(chǔ)上搭独。
該文章中只提思路給打算自己創(chuàng)造跟打器或者對(duì)詞語(yǔ)提示有興趣的讀者,不涉及到主要源碼廊镜。

拖拉機(jī)跟打器詞語(yǔ)標(biāo)記算法

1)對(duì)碼表按行讀取牙肝,并以tab鍵為分隔提取出中文詞條和英文編碼,命名為嗤朴,ch和bm(扣腳命名莫嫌棄)
2)將碼表按照詞條長(zhǎng)度分類進(jìn)入不同的HashMap中配椭,并用ArrayList將多個(gè)HashMap<String,String>串起來(lái)。
3)運(yùn)算第一次循環(huán)雹姊,將獲取的文章遍歷股缸,并從長(zhǎng)度最長(zhǎng)開(kāi)始匹配詞條,大概就是如下圖吱雏,如果到某個(gè)位置與詞語(yǔ)\color{red}{完全匹配}敦姻,則將該詞語(yǔ)\color{red}{占用}下標(biāo)記錄,并從步驟2中存入的hashmap提取出該詞語(yǔ)的編碼長(zhǎng)度歧杏,再將該文擁有的詞按\color{red}{編碼長(zhǎng)度}進(jìn)行分類镰惦。
靈魂抽象畫(huà)師
假設(shè),第一次循環(huán)中獲取匹配詞語(yǔ)的占用位置如下圖(紅色)犬绒,當(dāng)在以后的回塑循環(huán)中(綠色)旺入,就要進(jìn)行回避這些位置的匹配。并將詞語(yǔ)對(duì)應(yīng)編碼長(zhǎng)度放入對(duì)應(yīng)的分類凯力,往后以此類推眨业。
回塑時(shí)避讓占用位置

遍歷避讓占用位置
4)當(dāng)你將所有長(zhǎng)度的可能詞條都遍歷了一遍,我現(xiàn)在設(shè)定的是最長(zhǎng)詞條為13,即只遍歷文章13遍(越到后面其實(shí)回避做的更多)沮协。而存入HashMap中龄捡,使匹配消耗資源不至于過(guò)大。走完13遍之后慷暂,我們就可以根據(jù)我們之前以編碼長(zhǎng)度來(lái)分類的占用位置來(lái)進(jìn)行標(biāo)記顏色聘殖。

那么可以得知晨雳,我們一共創(chuàng)建了
用于存儲(chǔ)碼表關(guān)系的1個(gè)List中和對(duì)應(yīng)最長(zhǎng)詞條長(zhǎng)度n個(gè)Map
用于記錄標(biāo)色的對(duì)應(yīng)目標(biāo)文章中的最長(zhǎng)詞條編碼長(zhǎng)度m個(gè)List
(在實(shí)際操作中創(chuàng)建的可能比預(yù)想的更多,看每個(gè)人的思路)
對(duì)于非首選的其他奸腺,次選餐禁,三選,四選突照“锓牵可以識(shí)別編碼的最后一位
這大概只講思路不詳細(xì)深入,希望讀者自己多加研究讹蘑。

理論編碼(類似極速賽碼)

對(duì)于理論編碼末盔,只是在詞語(yǔ)標(biāo)記的基礎(chǔ)上增加了一些對(duì)編碼的操作,其實(shí)也非常簡(jiǎn)單座慰。說(shuō)說(shuō)我的做法

1)在詞語(yǔ)標(biāo)記的基礎(chǔ)上陨舱,再創(chuàng)建一個(gè)HashMap<int,String>,命名為bianma版仔,在詞語(yǔ)標(biāo)記步驟3與步驟4的遍歷中游盲,匹配到詞語(yǔ)的占用位置后,將占用的首位放入key蛮粮,對(duì)應(yīng)的編碼放入value益缎。
2)等所有的遍歷做完,做一個(gè)循環(huán)for(i從0到目標(biāo)文章.length-1)然想,for內(nèi)執(zhí)行链峭,得出的showstr就是整篇文章的理論編碼
for(int i=0;i<c.length;i++){
    if(Tips.bianma.containsKey(i)){
        showstr.append(Tips.bianma.get(i));
    }
}

算法缺點(diǎn)

在面對(duì)長(zhǎng)詞對(duì)短詞的場(chǎng)合下,可以達(dá)到最佳的詞語(yǔ)提示
例如:怎么樣
這個(gè)時(shí)候就會(huì)標(biāo)記“怎么樣”又沾,并不會(huì)單獨(dú)標(biāo)記“怎么”弊仪。

但在某些特定的同編碼長(zhǎng)度組合,有可能并不是最佳標(biāo)記與最短碼長(zhǎng)打法杖刷。
例如:上身體
先不說(shuō)這個(gè)詭異的詞励饵,但是這個(gè)組合在我的詞庫(kù)中是有兩個(gè)詞的
“上身”,“身體”

而“上身”編碼為“uhuf”滑燃,“身體”編碼為“ut”役听,這個(gè)時(shí)候,標(biāo)記會(huì)標(biāo)記“上身”的四碼詞顏色表窘,并不是標(biāo)記“身體”的二簡(jiǎn)顏色典予,最終獲得的理論編碼為“uhufti_”而不是理想的“uh_ut_”

算法復(fù)雜測(cè)試

在進(jìn)行壓力測(cè)試,導(dǎo)入了10w字的文章大概載了30秒乐严。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘤袖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子昂验,更是在濱河造成了極大的恐慌捂敌,老刑警劉巖艾扮,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異占婉,居然都是意外死亡泡嘴,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)逆济,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)酌予,“玉大人,你說(shuō)我怎么就攤上這事奖慌∨壮妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵升薯,是天一觀的道長(zhǎng)莱褒。 經(jīng)常有香客問(wèn)我击困,道長(zhǎng)涎劈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任阅茶,我火速辦了婚禮蛛枚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脸哀。我一直安慰自己蹦浦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布撞蜂。 她就那樣靜靜地躺著盲镶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝌诡。 梳的紋絲不亂的頭發(fā)上溉贿,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音浦旱,去河邊找鬼宇色。 笑死,一個(gè)胖子當(dāng)著我的面吹牛颁湖,可吹牛的內(nèi)容都是我干的宣蠕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼甥捺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抢蚀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起镰禾,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤思币,失蹤者是張志新(化名)和其女友劉穎鹿响,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谷饿,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惶我,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了博投。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绸贡。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖毅哗,靈堂內(nèi)的尸體忽然破棺而出听怕,到底是詐尸還是另有隱情,我是刑警寧澤虑绵,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布尿瞭,位于F島的核電站,受9級(jí)特大地震影響翅睛,放射性物質(zhì)發(fā)生泄漏声搁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一捕发、第九天 我趴在偏房一處隱蔽的房頂上張望疏旨。 院中可真熱鬧,春花似錦扎酷、人聲如沸檐涝。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谁榜。三九已至,卻和暖如春凡纳,著一層夾襖步出監(jiān)牢的瞬間窃植,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工惫企, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撕瞧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓狞尔,卻偏偏與公主長(zhǎng)得像丛版,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子偏序,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容