一切皆可抽象

          大而無形 庖丁解牛 厚積薄發 滌慮玄覽
             ::  ::  ::  ::  :: 管理

          【原創】關于網站關鍵詞鏈接的算法

          Posted on 2005-09-06 10:46 鋒出磨礪 閱讀(291) 評論(0)  編輯  收藏 所屬分類: java算法

          可能大家都碰到過類似的問題  比如 “我國信息化工程發展迅速。”這句話中,出現了信息化 和 化工嵌套的關鍵詞,那么在加鏈接的時候如何處理?當然不可能兩個都加,只能加一個的情況下,只能通過給文檔定義類型,根據類型進行關鍵詞的類型指派。我這里實現了根據關鍵詞的順序進行替換,誰早先換誰。呵呵

          關鍵詞實體
          public class mainkey {

            private String name = "";
            private String url = "";

            public mainkey(String temp_name ,String temp_url) {
                name = temp_name;
                url  = temp_url;
            }

            public void setName(String temp_name)
            {
               name = temp_name;
            }
           
          // 
           
            public String getName()
            {
               return name;
            }

            public void setUrl(String temp_url)
            {
               url = temp_url;
            }
            public String getUrl()
            {
              return url;
            }
           

          }
          內容位置匹配
          public class station {

           

            private int starti;
            private int endi;
            private int length;
            private mainkey key;
            private int typei;

            public station(int starti,int endi,int length,mainkey key) {
              this.starti = starti;
              this.endi = endi;
              this.length = length;
              this.key = key;
              this.typei = 1;
            }

            public void setStarti(int temp)
            {
              starti = temp;
            }
            public int getStarti()
            {
              return starti;
            }

            public void setEndi(int temp)
            {
               endi = temp;
            }
            public int getEndi()
            {
              return endi;
            }

            public void setLength(int temp)
            {
              length = temp;
            }
            public int getLength()
            {
              return length;
            }

            public void setKey(mainkey key)
            {
              this.key = key;
            }
            public mainkey getKey()
            {
              return key;
            }

            public void setTypei(int temp)
            {
              typei = temp;
            }
            public int getTypei()
            {
              return typei;
            }

          }

          具體替換

          public class change {
            public change() {
            }

            public static void main(String args[])
            {
               change ch = new change();
               System.out.println(ch.changeStr("我國信息化工程發展迅速,電子化程度很高,國家大力提倡信息化。"));
            }

            public String changeStr(String cs)
            {
              //key
              java.util.ArrayList keylist = new java.util.ArrayList();
              keylist.add(new mainkey("電子","dianzi"));
              keylist.add(new mainkey("信息化","xinxihua"));
              keylist.add(new mainkey("國家","guojia"));
              keylist.add(new mainkey("化工","huagong"));

              //station
              java.util.ArrayList stationlist = new java.util.ArrayList();
              int keyi = 0;
              for (int i=0;i<keylist.size();i++)
              {
                mainkey tempkey = (mainkey)keylist.get(i);
                int length = tempkey.getName().length();
                int starti = cs.indexOf(tempkey.getName());
                int endi = starti+length-1;
                station tempstation = null;
                if (starti  >0)
                {
                 tempstation = new station(starti,endi,length,tempkey);
                 stationlist.add(tempstation);
                }

              }

              //change
              this.BubbleSort(stationlist);

              //開始比較

              for (int i=0;i<stationlist.size()-1;i++)
              {
                if ((((station)stationlist.get(i)).getStarti())<=(((station)stationlist.get(i+1)).getEndi()))
                {
                  ((station)stationlist.get(i)).setTypei(0);
                }
              }

              //
              //開始替換
              for (int i=0;i<stationlist.size();i++)
              {
                 station ss = ((station)stationlist.get(i));
                 if (ss.getTypei() == 1)
                 {
                   mainkey key = ss.getKey();
                   cs = cs.replaceAll(key.getName(),"<"+key.getUrl()+">"+key.getName()+"</"+key.getUrl()+">");
                 }
              }
              return cs;
            }

             void BubbleSort(java.util.ArrayList changelist)
             { //R(l..n)是待排序的文件,采用自下向上掃描,對R做冒泡排序
               int i,j;
               int n = changelist.size()-1;
               boolean exchange; //交換標志
               for(i=0;i<n;i++){ //最多做n-1趟排序
                 exchange=false; //本趟排序開始前,交換標志應為假
                 for(j=n-1;j>=i;j--) //對當前無序區R[i..n]自下向上掃描
                  if(((station)changelist.get(j+1)).getStarti()>((station)changelist.get(j)).getStarti()){//交換記錄
                    Object tempstation = changelist.get(j+1);
                    changelist.set(j+1,changelist.get(j));
                    changelist.set(j,tempstation);
                    exchange=true; //發生了交換,故將交換標志置為真
                   }
                 if(!exchange) //本趟排序未發生交換,提前終止算法
                       return;
               } //endfor(外循環)
             }
          }

          主站蜘蛛池模板: 巨鹿县| 含山县| 漳州市| 武胜县| 疏勒县| 布拖县| 什邡市| 嘉祥县| 海南省| 栾川县| 临西县| 五莲县| 施甸县| 漾濞| 丹阳市| 沙坪坝区| 依兰县| 潜山县| 吴江市| 宜春市| 博白县| 衡阳市| 临沂市| 铅山县| 凤阳县| 台北市| 天水市| 永吉县| 石河子市| 师宗县| 绥芬河市| 寻乌县| 玉龙| 屏南县| 赣州市| 伽师县| 东至县| 灵山县| 杂多县| 衡水市| 远安县|