瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          對Lucene PhraseQuery的slop的理解(轉載)

          Posted on 2011-02-25 13:51 瘋狂 閱讀(1926) 評論(0)  編輯  收藏 所屬分類: java apache項目lucene
          文章來自:http://myzhangjl.blog.sohu.com/95911870.html
          這幾天看Lucene,看到檢索那塊,被PhraseQuery折騰了一陣,那本《Lucene In Action》里的代碼版本太舊了,也不知是翻譯的問題還是我的理解問題,總之在看PhraseQuery的設置slop時費了半天勁,不過,總算是搞明白了,發個帖子來分享一下:

              所謂PhraseQuery,就是通過短語來檢索,比如我想查“big car”這個短語,那么如果待匹配的document的指定項里包含了"big car"這個短語,這個document就算匹配成功。可如果待匹配的句子里包含的是“big black car”,那么就無法匹配成功了,如果也想讓這個匹配,就需要設定slop,先給出slop的概念:slop是指兩個項的位置之間允許的最大間隔距離,下面我舉例來解釋:

             我的待匹配的句子是:the quick brown fox jumped over the lazy dog.

             例1: 如果我想用“quick fox”來匹配出上面的句子,我發現原句里是quick [brown] fox,就是說和我的“quick fox”中間相差了一個單詞的距離,所以,我這里把slop設為1,表示quickfox這兩項之間最大可以允許有一個單詞的間隔,這樣所有“quick [***] fox”就都可以被匹配出來了。

             例2:如果我想用“fox quick”來匹配出上面的句子,這也是可以的,不過比例1要麻煩,我們需要看把“fox quick”怎么移動能形成“quick [***] fox”,如下表所示,把fox向右移動3次即可:

             fox quick      
          1    fox|quick      
          2    quick fox   
          3    quick    fox

              例3:如果我想用“lazy jumped quick”該如何匹配上面的句子呢?這個比例2還要麻煩,我們要考慮3個單詞,不管多少個單詞,slop表示的是間隔的最大距離,詳細起見,我們分別來看每種組合:(我的待匹配的句子是:the quick brown fox jumped over the lazy dog.)

          • lazy jumped:原句是jumped [over] [the] lazy,就是說它們兩個之間間隔了2個詞,如下所示:需要把lazy向右移動4位

           

             lazy jumped         
          1    lazy|jumped         
          2    jumped lazy      
          3    jumped    lazy   
          4    jumped     lazy 

           

          •   lazy jumped quick:我們主要看lazyquick,但是由于jumped是在中間,所以移動的時候還是要把jumped考慮在內,原句里lazyquick的關系是:quick [brown] [fox] [jumped] [over] [the] lazy ,quick lazy中間間隔了5個詞,所以如下圖所示,把lazy向右移動8次
              lazy

          jumped

          quick               

          1

            

          lazy|jumped

          quick

            

            

            

            

            

           

          2

            

          jumped

          lazy|quick

            

            

            

            

            

           

           3 

            

          jumped

          quick

           lazy 

            

            

            

            

           

          4

            

          jumped

          quick

            

          lazy 

            

            

            

           

           5 

            

          jumped

          quick

            

            

          lazy 

            

            

           

          6

            

          jumped

          quick

            

            

            

          lazy 

            

           

          7

            

          jumped

          quick

            

            

            

            

          lazy 

           

          8

            

          jumped

          quick

                         lazy 

           

          •  最后是jumped qucik,這里不詳細畫表格了,大家可以自己試試,應該是把jumped向右移動4次。

             綜合以上3種情況,所以我們需要把slop設為8才令“lazy jumped quick”可以匹配到原句。

          主站蜘蛛池模板: 梅河口市| 和龙市| 汝南县| 清河县| 连山| 车致| 桐庐县| 乐陵市| 东安县| 天祝| 屏东市| 呼玛县| 新民市| 珲春市| 含山县| 句容市| 冀州市| 海兴县| 永仁县| 郓城县| 池州市| 蒲城县| 溆浦县| 焉耆| 白银市| 泰安市| 武乡县| 凌云县| 阳高县| 临高县| 武功县| 彰武县| 东至县| 内乡县| 丰都县| 宝兴县| 都江堰市| 甘德县| 舒兰市| 古交市| 屯留县|