優化跟打器詞語標記動態顯示並解決二字疊詞衝突

2021-09-29 13:48:54 字數 1901 閱讀 3477

在看文章前可以先看原詞語提示演算法。

原跟打詞語提示演算法思想

在這個演算法中,因為回塑退避的規則,導致在打某些長詞中嵌有短詞的時候,在將第乙個字拆單後也不再顯示短詞,例:「不知道」是被標記的,當你將「不」字打出後,雖然「知道」也是詞,但卻不會動態標記,這次優化動態詞語提示就是使得你在拆單長詞時,其中內嵌的短詞也能得到顯示。

在前文章最後提到的演算法缺陷。因為是根據同樣的長度的詞語放在乙個list中,並規避已組詞的位置,由於只考慮到詞條長度而沒有考慮編碼長度組成的原因,會導致由「上身」與「身體」組成的疊詞「上身體」,雖然提示「上」「身體」會更短,但卻也是按照順序來標記詞語。這就是這次所要解決的問題「二字疊詞衝突」。

思路:1、使用不同型別的詞,我建立6種型別詞(全碼,二簡,三簡及其次選詞)。各自建乙個hashmap,用於放詞在文章的始位下標和末位下標。使用乙個list放入詞語佔位下標(即該下標在之前的遍歷中已檢測到有詞覆蓋到)。

2、遍歷文章時,因為是詞條長度長的先加入鍵值,所以判斷嵌入情況,來決定是否put,改變規避的規則。

當短詞始位不在已有詞下標而末位在已有詞下標時,就會進行規避處理。

當短詞完全嵌入長詞,不規避,執行put。

3、顯示詞語提示時,使用變數i遞增來遍歷文章,每個下標提取6個hashmap的值,若6個都為null,則為單字不顯色,若其他5個值為null,則顯示不為null對應的顏色,若多個不為null,則選擇取出值最大的對應顏色來顯示。然後將下標跳到取出的值(最大值)。

動態詞提只是將原回塑規避所有已覆蓋詞語下標,改變成完全嵌入不覆蓋,再將始位重複詞條進行對比長度,最長的顯示,然後將遍歷下標跳到取出值,規避嵌入詞。

當組成短句中任意二相鄰字能組詞時,就會出現疊詞衝突。在實際應用中,只需要解決二字詞衝突即可。(能力有限)

看下圖二短句,按原演算法,會根據順序來標詞「上身」,「體」和「我有」,「很多」,「糖」。

可以發現,只有符合「任意二相鄰字能組詞」與「組成短語字數為奇」才有必要進行處理衝突。

而當組成短語字數為奇時,必會拆單乙個字。而例子中只會出現如下拆單情況。

很顯示,當長度為5的短語中,拆單字只會存在偶數下標對應的字。(0,2,4)

所以,只要找到這個拆單字。讓演算法在遍歷到拆單字的下標時,就不進行任何put執行直接contiune。就可以實現避免衝突。

1、當該漢字能與下一漢字組詞時,臨時跳到下乙個漢字下標再判斷該漢字是否再能與下乙個漢字組詞。

2、當往下遍歷無法組詞時,將所有覆蓋下標的單字編碼與組詞編碼加入臨時編碼hashmap。

3、根據覆蓋下標的個數,進行所有偶數拆單情況編碼長度相加,得出最短編碼時拆單字所在的下標。(該下標必定大於外部遍歷下標)記錄該下標。

4、因為記錄下標必定大於已遍歷下標,當往下遍歷時,如果下標小於這個記錄下標,不需要再進行判斷疊詞衝突。而當遍歷到該下標時執行contiune。不進行任何處理。

5、迴圈該規則。

添雨跟打器儲存文章進度功能 by老隨風

添雨跟打器儲存文章進度功能 by老隨風 添雨跟打器儲存文章進度功能 1 開啟跟打器,按f2開啟發文介面 2 點選 自定義文章 找到路徑下自己想長期練習用的文章,選擇傳送字數後點選 開啟發文 然後出現發文介面如下圖,點選儲存配置的序列為1 3 重複步驟2一遍,把步驟2裡的文章重新傳送,點選儲存配置的序...

達夢跟mysql效能 資料庫優化 例項優化

從網上去搜資料庫優化基本都是從sql層次進行優化的,很少有提及到資料庫本身的例項優化。就算有也都是基於某個特定資料庫的例項優化,本文涵蓋目前市面上所有主流資料庫的例項優化 oralce mysql postgres 達夢 按照文章的配置能夠將你資料庫效能用到80 或以上。資料庫優化方 這部分為理論知...

生成器跟迭代器

import time deftest name print 033 31 m s已經準備好了,test 033 0m name while true baozi yield print 033 31 m第 s包子來了,s吃了 033 0m baozi,name def test1 args c1 ...