本發(fā)明涉及空間數(shù)據(jù)庫的索引與查詢技術(shù),是一種用于處理路網(wǎng)下地理社交關(guān)鍵字反最近鄰查詢的方法。
背景技術(shù):
空間數(shù)據(jù)是指地理信息系統(tǒng)在計(jì)算機(jī)物理存儲介質(zhì)上存儲的與應(yīng)用相關(guān)的地理空間數(shù)據(jù)的總和,其目的是為了存儲、管理和檢索各種地理空間數(shù)據(jù)。其中,路網(wǎng)空間數(shù)據(jù)作為空間數(shù)據(jù)庫的重要組成部分,得到了越來越多的關(guān)注。為了快速、有效地訪問路網(wǎng)空間數(shù)據(jù),專家學(xué)者們提出了許多路網(wǎng)空間數(shù)據(jù)索引方法。目前,g樹索引方法是最有效的路網(wǎng)空間數(shù)據(jù)索引方法。它將路網(wǎng)劃分成多個子圖,并預(yù)先計(jì)算各邊界點(diǎn)的路網(wǎng)距離,從而達(dá)到降低最短路徑計(jì)算代價(jià)的目的。
反最近鄰查詢由于其在決策支持和發(fā)現(xiàn)潛在用戶等方面的重要應(yīng)用而受到了學(xué)術(shù)界的廣泛關(guān)注。在反最近鄰查詢的相關(guān)研究中,路網(wǎng)下空間關(guān)鍵字反最近鄰查詢被人們用來發(fā)現(xiàn)興趣集。其中,興趣集是指對某個興趣點(diǎn)感興趣的一群人。然而,路網(wǎng)下空間關(guān)鍵字反最近鄰查詢只考慮了文本和空間信息,并查找那些最有可能成為潛在用戶的人群。
隨著社交網(wǎng)絡(luò)的發(fā)展,社交網(wǎng)絡(luò)數(shù)據(jù)的體量越來越大。在社交網(wǎng)絡(luò)中,有社交聯(lián)系的用戶可能具有相似的興趣愛好,因而這類數(shù)據(jù)可以為預(yù)測和推薦提供支持。基于此,人們研究了地理社交關(guān)鍵字查詢。給定一個地理社交關(guān)鍵字查詢和提交該查詢的用戶,此查詢返回空間距離最近,文本相似性最高的興趣點(diǎn),并且該用戶的朋友訪問該興趣點(diǎn)的次數(shù)最多。
目前,針對路網(wǎng)下空間關(guān)鍵字反最近鄰查詢和地理社交關(guān)鍵字查詢已有成熟的解決方案。但是在某些應(yīng)用場景中,反最近鄰查詢不僅要考慮空間和文本信息,而且也要考慮用戶之間的社交信息以及用戶對興趣點(diǎn)的簽到信息。然而,現(xiàn)有的查詢處理方法還不能有效地解決上述查詢問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明克服了現(xiàn)有技術(shù)不能有效地處理路網(wǎng)下地理社交關(guān)鍵字反最近鄰查詢問題,提供了一種路網(wǎng)下地理社交關(guān)鍵字反最近鄰查詢處理方法。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案步驟如下:一種路網(wǎng)下地理社交關(guān)鍵字反最近鄰查詢處理方法,該方法包括如下步驟:
步驟(1):收集用戶與興趣點(diǎn),對其構(gòu)建gim樹索引結(jié)構(gòu);
步驟(2):計(jì)算每個gim樹索引結(jié)構(gòu)的節(jié)點(diǎn)的地理社交關(guān)鍵字的最小相似性計(jì)數(shù)表與最大相似性計(jì)數(shù)表;
步驟(3):利用剪枝算法對步驟(1)收集到的用戶與興趣點(diǎn)進(jìn)行過濾;
步驟(4):根據(jù)步驟(3)中過濾的結(jié)果,通過精煉算法剔除不符合要求的用戶,以得到最終結(jié)果集合。
進(jìn)一步的,所述的步驟(1)中g(shù)im樹索引結(jié)構(gòu)的構(gòu)建步驟如下:將整個路網(wǎng)劃分成多個子圖,并將屬于多個子圖的路網(wǎng)節(jié)點(diǎn)定義為邊界點(diǎn);預(yù)先計(jì)算所有邊界點(diǎn)之間的路網(wǎng)距離;每個gim樹索引結(jié)構(gòu)節(jié)點(diǎn)包含一個路網(wǎng)子圖、一個交并倒排文件和兩個矩陣;交并倒排文件描述的是用戶與興趣點(diǎn)之間的文本信息;兩個矩陣為用戶簽到矩陣和用戶社交關(guān)系矩陣,用戶簽到矩陣存儲用戶對各興趣點(diǎn)的簽到次數(shù),用戶社交關(guān)系矩陣存儲用戶之間的社交關(guān)系。
進(jìn)一步的,所述的步驟(2)中最小相似性計(jì)數(shù)表與最大相似性計(jì)數(shù)表的計(jì)算方法如下:
給定一組用戶和一組興趣點(diǎn),利用步驟(1)中用戶簽到矩陣和用戶社交關(guān)系矩陣這兩個矩陣相乘計(jì)算用戶和興趣點(diǎn)之間地理社交關(guān)鍵字相似性的最小值和最大值;利用上述最小值和最大值構(gòu)建用戶的最小相似性計(jì)數(shù)表和最大相似性計(jì)數(shù)表。
進(jìn)一步的,所述的步驟(3)中剪枝算法具體如下:
給定一個查詢點(diǎn),根據(jù)步驟(2)的計(jì)算方法,得到查詢點(diǎn)與用戶相似性的最小值和最大值,再結(jié)合步驟(2)得到的最小相似性計(jì)數(shù)表和最大相似性計(jì)數(shù)表對用戶進(jìn)行剪枝,其中:
1)若查詢點(diǎn)與用戶集合相似性的最大值比最小相似性計(jì)數(shù)表的下界值小,則丟棄這組用戶。
2)若查詢點(diǎn)與用戶集合相似性的最小值比最大相似性計(jì)數(shù)表的上界值大,將這組用戶插入到最終結(jié)果集合。
進(jìn)一步的,所述的步驟(3)中的過濾過程如下:
1)初始化一個用戶隊(duì)列和一個興趣點(diǎn)隊(duì)列,將gim樹索引根節(jié)點(diǎn)的用戶數(shù)據(jù)集合放入到用戶隊(duì)列中,將興趣點(diǎn)數(shù)據(jù)集合放入到興趣點(diǎn)隊(duì)列中;
2)初始化一個候選用戶集合和一個最終結(jié)果集合,并分別保存當(dāng)前訪問過的gim樹索引節(jié)點(diǎn)中未被剪枝的用戶和被確認(rèn)為最終結(jié)果的用戶;
3)若用戶隊(duì)列為空,返回候選用戶集合和最終結(jié)果集合;否則取出用戶隊(duì)列的第一個元素,并對該元素在gim樹索引結(jié)構(gòu)中的子節(jié)點(diǎn)利用步驟(3)中的剪枝算法進(jìn)行剪枝,如果能滿足條件,那么將其插入到最終結(jié)果集合;若未被剪枝,則將其插入到候選用戶集合。
進(jìn)一步的,所述的步驟(4)中的精煉算法具體步驟如下:
1)取出步驟(3)中候選用戶集合的每一個用戶;
2)以空間距離順序找出該用戶的路網(wǎng)下地理社交關(guān)鍵字查詢結(jié)果集合;
3)若查詢點(diǎn)在上述結(jié)果集合中,則將該用戶插入到最終結(jié)果集合;否則丟棄該用戶;
4)返回最終結(jié)果集合。
本發(fā)明具有的有益效果是:本發(fā)明充分利用了空間數(shù)據(jù)庫中現(xiàn)有的索引技術(shù),反最近鄰查詢以及空間關(guān)鍵字查詢技術(shù),將路網(wǎng)劃分成多個子網(wǎng),并預(yù)先計(jì)算子網(wǎng)間的最短路徑距離,從而降低最短路徑計(jì)算代價(jià);設(shè)計(jì)了最小和最大計(jì)數(shù)表的索引結(jié)構(gòu),并對子網(wǎng)進(jìn)行剪枝;設(shè)計(jì)了高效的裁剪算法,從而大大降低了i/o次數(shù)和cpu計(jì)算時(shí)間;提出利用矩陣計(jì)算社交相似性的方法,降低了計(jì)算代價(jià);提出了一種分支界限算法,從而避免了對索引結(jié)構(gòu)的重復(fù)訪問,提升了查詢的效率。
附圖說明
圖1是本發(fā)明的實(shí)施步驟流程圖。
具體實(shí)施方式
現(xiàn)結(jié)合附圖和具體實(shí)施對本發(fā)明的技術(shù)方案作進(jìn)一步說明:
如圖1所示,本發(fā)明具體實(shí)施過程和工作原理如下:
步驟(1):收集用戶與興趣點(diǎn),對其構(gòu)建gim樹索引結(jié)構(gòu);
步驟(2):計(jì)算每個gim樹索引結(jié)構(gòu)的節(jié)點(diǎn)的地理社交關(guān)鍵字的最小相似性計(jì)數(shù)表與最大相似性計(jì)數(shù)表;
步驟(3):利用剪枝算法對步驟(1)收集到的用戶與興趣點(diǎn)進(jìn)行過濾;
步驟(4):根據(jù)步驟(3)中過濾的結(jié)果,通過精煉算法剔除不符合要求的用戶,以得到最終結(jié)果集合。
進(jìn)一步的,所述步驟(1)中每一個興趣點(diǎn)的信息包括位置信息,文本信息和簽到信息,其中位置信息是一個地理坐標(biāo),文本信息是一組關(guān)鍵字,簽到信息是一組記錄,每條記錄包括某用戶在何時(shí)到達(dá)過該興趣點(diǎn);用戶信息包括位置信息,文本信息和社交信息,其中位置信息是用戶的當(dāng)前位置,文本信息是一組關(guān)鍵字,社交信息是用戶間的朋友關(guān)系。所有信息都存儲于gim樹索引結(jié)構(gòu)中。gim樹索引結(jié)構(gòu)的構(gòu)建步驟如下:將整個路網(wǎng)劃分成多個子圖,并將屬于多個子圖的路網(wǎng)節(jié)點(diǎn)定義為邊界點(diǎn);預(yù)先計(jì)算所有邊界點(diǎn)之間的路網(wǎng)距離,以加速最短路徑距離的計(jì)算;每個gim樹索引結(jié)構(gòu)節(jié)點(diǎn)包含一個路網(wǎng)子圖、一個交并倒排文件和兩個矩陣;交并倒排文件描述的是用戶與興趣點(diǎn)之間的文本信息;兩個矩陣為用戶簽到矩陣和用戶社交關(guān)系矩陣,用戶簽到矩陣存儲用戶對各興趣點(diǎn)的簽到次數(shù),用戶社交關(guān)系矩陣存儲用戶之間的社交關(guān)系。
進(jìn)一步的,所述步驟(2)中最小相似性計(jì)數(shù)表與最大相似性計(jì)數(shù)表的計(jì)算方法如下:給定一組用戶和一組興趣點(diǎn),利用步驟(1)中的用戶簽到矩陣和用戶社交關(guān)系矩陣這兩個矩陣相乘計(jì)算用戶和興趣點(diǎn)之間地理社交關(guān)鍵字相似性的最小值和最大值;利用上述最小值和最大值構(gòu)建用戶的最小相似性計(jì)數(shù)表和最大相似性計(jì)數(shù)表。其中,為了提高社交距離計(jì)算的速度,本發(fā)明提出了一種基于矩陣的計(jì)算方法,該方法利用用戶社交關(guān)系矩陣和用戶簽到矩陣相乘來得到一組用戶與一組興趣點(diǎn)之間的社交相似性。
例如:給定2個gim樹節(jié)點(diǎn)n1與n2,分別取出節(jié)點(diǎn)n1中的用戶集合u1和節(jié)點(diǎn)n2中的興趣點(diǎn)集合o2;分別計(jì)算u1與o2的文本相似性,空間相似性以及社交相似性的最小值和最大值;針對用戶集合u1,利用u1與興趣點(diǎn)集合相似性的最小值構(gòu)建最小相似性計(jì)數(shù)表,計(jì)數(shù)表中的每一個元素包含:一組興趣點(diǎn)oi,oi中興趣點(diǎn)的個數(shù)|oi|,以及u1與oi的最小相似性值;類似地,利用u1與興趣點(diǎn)集合相似性的最大值構(gòu)建最大相似性計(jì)數(shù)表,計(jì)數(shù)表中的每一個元素包含:一組興趣點(diǎn)oi,oi中興趣點(diǎn)的個數(shù)|oi|,以及u1與oi的最大相似性值。
進(jìn)一步的,步驟(3)中剪枝算法具體如下:
給定一個查詢點(diǎn),根據(jù)步驟(2)的計(jì)算方法,得到查詢點(diǎn)與用戶相似性的最小值和最大值,再結(jié)合步驟(2)得到的最小相似性計(jì)數(shù)表和最大相似性計(jì)數(shù)表對用戶進(jìn)行剪枝,其中:
1)若查詢點(diǎn)與用戶集合相似性的最大值比最小相似性計(jì)數(shù)表的下界值小,則丟棄這組用戶。
2)若查詢點(diǎn)與用戶集合相似性的最小值比最大相似性計(jì)數(shù)表的上界值大,將這組用戶插入到最終結(jié)果集合。
進(jìn)一步的,所述的步驟(3)中的過濾過程如下:
1)初始化一個用戶隊(duì)列和一個興趣點(diǎn)隊(duì)列,將gim樹索引根節(jié)點(diǎn)的用戶數(shù)據(jù)集合放入到用戶隊(duì)列中,將興趣點(diǎn)數(shù)據(jù)集合放入到興趣點(diǎn)隊(duì)列中;
2)初始化一個候選用戶集合和一個最終結(jié)果集合,并分別保存當(dāng)前訪問過的gim樹索引節(jié)點(diǎn)中未被剪枝的用戶和被確認(rèn)為最終結(jié)果的用戶;
3)若用戶隊(duì)列為空,返回候選用戶集合和最終結(jié)果集合;否則取出用戶隊(duì)列的第一個元素,并對該元素在gim樹索引結(jié)構(gòu)中的子節(jié)點(diǎn)利用步驟(3)中的剪枝算法進(jìn)行剪枝,如果能滿足條件,那么將其插入到最終結(jié)果集合;若未被剪枝,則將其插入到候選用戶集合。
進(jìn)一步的,所述的步驟(4)中的精煉算法具體步驟如下:
1)取出步驟(3)中候選用戶集合的每一個用戶;
2)以空間距離順序找出該用戶的路網(wǎng)下地理社交關(guān)鍵字查詢結(jié)果集合;
3)若查詢點(diǎn)在上述結(jié)果集合中,則將該用戶插入到最終結(jié)果集合;否則丟棄該用戶;
4)返回最終結(jié)果集合。