當(dāng)前位置:
首頁 >
算法之智能搜索(下)
發(fā)布時(shí)間:2025/3/18
27
豆豆
生活随笔
收集整理的這篇文章主要介紹了
算法之智能搜索(下)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
以下內(nèi)容,并未得到實(shí)質(zhì)檢測(cè)。因?yàn)楣P者沒有用到相關(guān)的需求,只是一時(shí)興起,按照自己的思路探究了一下。并未考慮什么付費(fèi)排名,詞語優(yōu)先級(jí),搜索量排名,時(shí)效性等等的因素。娛樂一下唄,可能會(huì)被真正做過此類搜索的大神笑話,擔(dān)待自己瞎想的。
二、簡(jiǎn)單算法分詞匹配:
/**簡(jiǎn)單算法之* 拆分用戶輸入框輸入的語句,進(jìn)行最大化匹配查詢* @param str:用戶輸入的查詢內(nèi)容* Red_Ant 20181124*/ public static final String PUTUATION = "。,、':∶;?‘’“”〝〞?ˇ﹕︰﹔﹖﹑·¨….?;!′?!~—ˉ|‖"〃`@﹫??﹏﹋﹌︴々﹟#﹩$﹠&﹪%*﹡﹢﹦﹤‐ ̄ˉ―﹨??﹍﹎+=<--__-\\ˇ~﹉﹊()〈〉??﹛﹜『』〖〗[]《》〔〕{}「」【】︵︷︿︹︽_﹁﹃︻︶︸﹀︺︾ˉ﹂﹄︼"; public static List<String> dealInputStr(String str) {/*我們輸入內(nèi)容進(jìn)行查詢之后,總會(huì)有一些優(yōu)先顯示在最前面(付費(fèi)排名的除外)* 假設(shè),查出的最終結(jié)果是String類型的*///1、創(chuàng)建存儲(chǔ)最終結(jié)果的集合List<String> resultLst = new ArrayList<String>();//2、優(yōu)先級(jí)最高的就是,把用戶輸入的內(nèi)容看做一個(gè)整體查出的內(nèi)容List<String> strLst = selectStrFromDataBase(str);//從相應(yīng)的庫中查詢,內(nèi)容。方法不同,此處略!if(strLst.size() > 0) {resultLst.addAll(strLst);}//3、接著我們利用,用戶輸入中的標(biāo)點(diǎn),將輸入語句分割成不同的str【以常用標(biāo)點(diǎn)為例】//筆者又想到,標(biāo)點(diǎn)也有許多區(qū)別,和優(yōu)先之分。算啦,不做深究了。String[] strs = str.split("");int strsLength = strs.length;List<Integer> num = new ArrayList<Integer>();for (int i = 0; i < strsLength; i++) {if(PUTUATION.contains(strs[i])) {num.add(i);}}//將輸入語句,按照標(biāo)點(diǎn)的位置進(jìn)行分詞int j = 0;//存儲(chǔ)截取字符串位置/*用于存儲(chǔ),標(biāo)點(diǎn)分詞之后的結(jié)果* 然后依照此結(jié)果進(jìn)行細(xì)胞分詞*/String ss;List<String> pttstrLst = new ArrayList<String>();for (int i = 0; i < num.size(); i++) {if(i == num.size()-1) {ss = str.substring(j);}else {ss = str.substring(j, num.get(i));}pttstrLst.add(ss);strLst = selectStrFromDataBase(ss);if(strLst.size() > 0) {resultLst.addAll(strLst);}j = num.get(i) + 1;}/*4、將標(biāo)點(diǎn)分詞后的結(jié)果進(jìn)行細(xì)胞分詞* 利用字符字?jǐn)?shù)逐步-1,的左右相鄰截取方式,將分詞后的內(nèi)容,分別匹配細(xì)胞詞庫* 每減少一n字,或有n+1種可能,直到只剩兩個(gè)字為止。*/String ss1;for (int i = 0; i < pttstrLst.size(); i++) {//jugeWord(String str),查詢數(shù)據(jù)庫的方法略!ss = pttstrLst.get(i);int len = ss.length() - 2;int s = 0;int strlen = ss.length();while (len > 1) {int len1 = strlen - 2;while (len1 < strlen-1) {ss1 = ss.substring(s, len1);if(!jugeWord(ss1)) {strLst = selectStrFromDataBase(ss1);if(strLst.size() > 0) {resultLst.addAll(strLst);}}s++;len1++;}len--;}}return resultLst; }【注意】
以上方法并未在真實(shí)場(chǎng)景中的應(yīng)用,還有許多未考慮的因素,筆者想若此方法行的通的話,還有許多值得考慮和優(yōu)化的地方。
轉(zhuǎn)載于:https://blog.51cto.com/13479739/2321591
總結(jié)
以上是生活随笔為你收集整理的算法之智能搜索(下)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php使用CURL不依赖COOKIEJA
- 下一篇: JVM技术周报第2期