專利名稱:對散列序列矩陣的索引和查詢的制作方法
技術(shù)領(lǐng)域:
本申請涉及文檔比較,具體而言,通過對散列序列矩陣的索引和查詢來比較文檔的相似度。
背景技術(shù):
計算機(jī)已變得高度集成于工作、家庭、移動設(shè)備以及許多其他地方中。計算機(jī)可快速且有效地處理大量信息。被設(shè)計成在計算機(jī)系統(tǒng)上運(yùn)行的軟件應(yīng)用允許用戶執(zhí)行包括商業(yè)應(yīng)用、學(xué)校作業(yè)、娛樂等等在內(nèi)的各種各樣的功能。軟件應(yīng)用通常被設(shè)計成執(zhí)行特定任務(wù),諸如用于草擬文檔的文字處理器應(yīng)用或者用于發(fā)送、接收和組織電子郵件的電子郵件程序。在某些情況中,可設(shè)計軟件應(yīng)用來比較文檔、電子郵件或其它字符串的文本。在這樣的情況下,文檔可以被分成不同的字單元,這些字單元被轉(zhuǎn)換成散列值。隨后,將這些散列值與來自其它文檔的散列值進(jìn)行順序比較。通常,這樣的文檔比較程序直到比較的散列序列非常相似(例如95% +相似)才將文檔在操作上(performantly)標(biāo)識為相似或相同的。
發(fā)明內(nèi)容
在此所述的實(shí)施例旨在對索引矩陣中的散列值序列進(jìn)行索引和查詢。在一個實(shí)施例中,計算機(jī)系統(tǒng)訪問文檔以從該文檔中提取文本部分。計算機(jī)系統(tǒng)將散列算法應(yīng)用于提取的文本。提取的文本的散列值形成散列值的代表性序列。計算機(jī)系統(tǒng)還將散列值的序列的每個散列值插入到索引矩陣中,該索引矩陣被配置為存儲多個不同的散列值序列。在另一個實(shí)施例中,計算機(jī)系統(tǒng)訪問索引矩陣,在該索引矩陣中存儲有多個散列值序列。散列值序列表示來自各種文檔中的字構(gòu)造。計算機(jī)系統(tǒng)訪問選中的散列值序列, 該散列值序列對應(yīng)于查詢所要基于的選中的文檔。計算機(jī)系統(tǒng)確定選中的散列值序列的散列值在哪些地方與多個存儲的散列值序列的散列值相重疊。計算機(jī)系統(tǒng)還查詢索引矩陣以基于選中的散列值序列中有多少散列值與所述存儲的散列值序列的散列值相重疊來確定所述多個散列值序列與選中的散列值有多相似。提供本發(fā)明內(nèi)容以便以簡化形式介紹在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并非旨在標(biāo)識所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。另外的特征和優(yōu)點(diǎn)將在以下的描述中闡述,并且部分可從該描述中顯而易見,或者可以從此處的教示實(shí)踐中習(xí)得。本發(fā)明的各特征和優(yōu)點(diǎn)可以通過在所附的權(quán)利要求書中特別指出的手段和組合來實(shí)現(xiàn)和獲得。本發(fā)明的特征將從以下描述和所附權(quán)利要求書中變得完全顯而易見,或者可通過如下所述對本發(fā)明的實(shí)踐而獲知。
為了進(jìn)一步闡明本發(fā)明的各實(shí)施例的以上和其他優(yōu)點(diǎn)和特征,將參考附圖來呈現(xiàn)本發(fā)明的各實(shí)施例的更具體的描述??梢岳斫猓@些附圖只描繪本發(fā)明的典型實(shí)施例,因此將不被認(rèn)為是對其范圍的限制。本發(fā)明將通過使用附圖用附加特征和細(xì)節(jié)來描述和解釋, 附圖中圖1是本發(fā)明的實(shí)施例可以在其中操作的計算機(jī)體系結(jié)構(gòu),所述操作包括對索引矩陣中的散列值的序列進(jìn)行索引和查詢。圖2說明了用于對索引矩陣中的散列值的序列進(jìn)行索引的示例方法的流程圖。圖3說明了用于對索引矩陣進(jìn)行查詢以確定散列序列相似度的示例方法的流程4說明了在其中散列值序列在索引矩陣中被索引的本發(fā)明的實(shí)施例。
具體實(shí)施例方式在此所述的實(shí)施例旨在對索引矩陣中的散列值序列進(jìn)行索引和查詢。在一個實(shí)施例中,計算機(jī)系統(tǒng)訪問文檔以從該文檔中提取文本部分。計算機(jī)系統(tǒng)將散列算法應(yīng)用于所提取的文本。提取的文本的散列值形成散列值的代表序列。計算機(jī)系統(tǒng)還將散列值的序列的每個散列值插入到索引矩陣中,該索引矩陣被配置為存儲多個不同的散列值序列在另一個實(shí)施例中,計算機(jī)系統(tǒng)訪問索引矩陣,在該索引矩陣中存儲有多個散列值序列。散列值序列表示來自各種文檔中的字構(gòu)造。計算機(jī)系統(tǒng)訪問選中的散列值序列, 該散列值序列對應(yīng)于查詢所要基于的選中的文檔。計算機(jī)系統(tǒng)確定選中的散列值序列的散列值在哪些地方與多個存儲的散列值序列的散列值相重疊。計算機(jī)系統(tǒng)還查詢索引矩陣以基于選中的散列值序列中有多少散列值與所述存儲的散列值序列的散列值相重疊來確定所述多個散列值序列與選中的散列值有多相似。以下討論現(xiàn)涉及可以執(zhí)行的多種方法以及方法動作。應(yīng)當(dāng)注意,雖然這些方法動作可能是按一定次序討論的,或者是在流程圖中被描繪為是按照特定順序進(jìn)行的,然而并非必然需要特定的次序,除非特別聲明,或者是因?yàn)橐粋€動作依賴于另一動作在該動作被執(zhí)行之前完成而需要的。本發(fā)明的各實(shí)施例可包括或利用專用或通用計算機(jī),該專用或通用計算機(jī)包括諸如例如一個或多個處理器和系統(tǒng)存儲器等計算機(jī)硬件,如以下更詳細(xì)討論的。本發(fā)明范圍內(nèi)的各實(shí)施例還包括用于攜帶或存儲計算機(jī)可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理介質(zhì)和其他計算機(jī)可讀介質(zhì)。這些計算機(jī)可讀介質(zhì)可以是通用或?qū)S糜嬎銠C(jī)系統(tǒng)能夠訪問的任何可用介質(zhì)。存儲計算機(jī)可執(zhí)行指令的計算機(jī)可讀介質(zhì)是計算機(jī)存儲介質(zhì)。攜帶計算機(jī)可執(zhí)行指令的計算機(jī)可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實(shí)施例可包括至少兩種完全不同類型的計算機(jī)可讀介質(zhì)計算機(jī)存儲介質(zhì)和傳輸介質(zhì)。計算機(jī)存儲介質(zhì)包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲、磁盤存儲或其他磁存儲設(shè)備、或可用于存儲計算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜嬎銠C(jī)訪問的任何其他介質(zhì)?!熬W(wǎng)絡(luò)”被定義為允許在計算機(jī)系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個或多個數(shù)據(jù)鏈路。當(dāng)信息通過網(wǎng)絡(luò)或另一個通信連接(硬連線、無線、或者硬連線或無線的組合)傳輸或提供給計算機(jī)時,該計算機(jī)將該連接適當(dāng)?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用于攜帶計算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜嬎銠C(jī)訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應(yīng)被包括在計算機(jī)可讀介質(zhì)的范圍內(nèi)。此外,在到達(dá)各種計算機(jī)系統(tǒng)組件之后,計算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動傳輸?shù)接嬎銠C(jī)存儲介質(zhì)(或反之亦然)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收到的計算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如,“mc”) 內(nèi)的RAM中,然后最終被傳輸?shù)接嬎銠C(jī)系統(tǒng)RAM和/或計算機(jī)系統(tǒng)處的較不易失性的計算機(jī)存儲介質(zhì)。因而,應(yīng)當(dāng)理解,計算機(jī)存儲介質(zhì)可被包括在還利用(或甚至主要利用)傳輸介質(zhì)的計算機(jī)系統(tǒng)組件中。計算機(jī)可執(zhí)行指令包括,例如使通用計算機(jī)、專用計算機(jī)、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計算機(jī)可執(zhí)行指令可以是例如二進(jìn)制代碼、諸如匯編語言之類的中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述特征或動作。相反,上述特征和動作是作為實(shí)現(xiàn)權(quán)利要求的示例形式而公開的。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可在具有許多類型的計算機(jī)系統(tǒng)配置的網(wǎng)絡(luò)計算環(huán)境中實(shí)踐,這些計算機(jī)系統(tǒng)配置包括個人計算機(jī)、臺式計算機(jī)、膝上型計算機(jī)、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機(jī)、大型計算機(jī)、分布式系統(tǒng)(例如云計算、云服務(wù)等等)、移動電話、PDA、尋呼機(jī)、路由器、交換機(jī)等。本發(fā)明也可在其中通過網(wǎng)絡(luò)鏈接(或者通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路,或者通過硬連線和無線數(shù)據(jù)鏈路的組合)的本地和遠(yuǎn)程計算機(jī)系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實(shí)施。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲器存儲設(shè)備中。圖1示出了可在其中采用本發(fā)明的原理的計算機(jī)體系結(jié)構(gòu)100。計算機(jī)體系結(jié)構(gòu) 100包括文本提取模塊110??梢耘渲梦谋咎崛∧K來從文檔105提取文本106。所述文本可以是任意類型的格式,并且可以包括任意數(shù)目的字符和/或字符類型。文檔可以是存儲文本或字符序列的任意類型的數(shù)據(jù)結(jié)構(gòu)。由文本提取模塊提取(111)的文本可以被發(fā)送給字單元構(gòu)造模塊115??梢耘渲米謫卧獦?gòu)造模塊來從所提取的文本中構(gòu)造字單元116。字單元可以是文本的字、短語或其它字符序列。所述字可以是完整的字、部分字或單個字母或數(shù)字。該字單元可以被單獨(dú)發(fā)送給或成組發(fā)送給散列模塊120??梢耘渲蒙⒘心K120來為從字單元構(gòu)造模塊接收到的每個字單元計算散列值。 散列模塊可以使用任意類型的散列算法來計算散列值。在一些情況下,散列模塊在其接收到字單元時就計算每個字單元的散列值。在這種方式中,形成散列序列121。散列序列可以表示一系列的字,例如短語或句子。在將完整的文檔轉(zhuǎn)換為字單元并隨后轉(zhuǎn)換為散列值的情況下中,散列值序列121可以表示該完整的文檔。散列值序列可以存儲在索引矩陣125 中,并且可以由矩陣查詢模塊130來對其查詢。例如,在用戶想要確定一個文檔與另一個文檔有多相似的情況時,可以將這兩個文檔都轉(zhuǎn)換為字單元和散列值序列,并隨后基于散列值序列將它們進(jìn)行比較。矩陣查詢模塊130可以將查詢131發(fā)送給索引矩陣125以確定在選中文檔和存儲的文檔(例如存儲的散列值序列126)之間的相似度。索引矩陣(或另一個計算模塊)可以確定選中文檔和存儲的文檔之間的差異,并可以發(fā)布相似度指示127以指示這兩個文檔有多相似。下面,分別針對圖2和圖3的方法200和300,更詳細(xì)地解釋這些概念。在一些情況中,索引和查詢相似的散列序列可以被用于標(biāo)識復(fù)制的、近似復(fù)制或基于模板的文檔。在這樣的情況下,散列值序列可以被用作特定文檔的“指紋”。這個指紋可以被用于快速計算文檔之間的相似度。下面是非限制性的使用示例電子郵件消息的檢測和過濾(例如反垃圾郵件或定制郵件路由規(guī)則)、搜索應(yīng)用實(shí)現(xiàn)(包括在單獨(dú)的搜索引擎中或產(chǎn)品中的嵌入搜索特征中)、數(shù)據(jù)挖掘應(yīng)用實(shí)現(xiàn)和敏感信息的數(shù)據(jù)泄露防護(hù)(DLP)。許多其它的使用是可能的,并且上述示例并不是要限制所請求的發(fā)明的使用。如上所述,散列值序列可以被存儲在稠密矩陣中。該矩陣可以對散列值序列進(jìn)行索引,所述散列值序列可被查詢以確定復(fù)制的、近似復(fù)制的或基于模板的文檔。在一些情況下,可以通過在大的序列中為每個散列使用值的代表集來改進(jìn)安全性。例如,可以僅將散列值的一部分存儲在索引矩陣125中來取代包括每個字單元的整個散列值。b位Minwise散列算法可以在僅存儲散列值的8-12個的同時,提供安全且精確的指紋。通過對索引矩陣中特定單元中的某些試探(heuristics)進(jìn)行過濾,可以改進(jìn)性能??梢酝ㄟ^使用從散列模塊120導(dǎo)出的散列值121的序列來實(shí)現(xiàn)特定文檔(例如 105)的固定大小的表示。隨后,將該值121的序列用于確定兩個文檔是否是復(fù)制的、近似復(fù)制的或從模板導(dǎo)出的。例如,如果文檔1和文檔2的散列序列有80%近似(即指紋序列在至少80%次數(shù)上是相同的),那么,就確定這兩個文件是近似復(fù)制的。在一些情況下,文檔 1可以與巨大數(shù)目的文檔(例如100,000+或IMM+)相比較。在這種情況,可以基于一組散列值序列來索引并查詢文檔。在一些實(shí)施例中,索引大的散列值序列(即文檔指紋)可以包括下述步驟首先, 構(gòu)造尺寸為10 12的索引矩陣(該尺寸是可變且可定制的)。每個列對應(yīng)于12位的散列,因此,IOM個散列包括所述指紋。每個行可以對應(yīng)于12位散列的值。該散列可以是經(jīng)修改的64位散列(例如Md5導(dǎo)出的)的12個最低有效位。12位散列從MD5中丟棄或過濾了信息,因此,改進(jìn)了不可逆性。這允許為表示可能敏感信息的散列序列(指紋)創(chuàng)建索弓丨。隨后,用將被索引的各種指紋填充索引矩陣。在一些實(shí)施例中,查詢索引矩陣可以包括下述步驟考慮未知的指紋FpQuery 并創(chuàng)建名為FpMatchVector的具有等于索引的指紋數(shù)目的尺寸的“指紋匹配計數(shù)矢量”。 FpMatchVector中的每個值可以與索引的指紋相對應(yīng)。在一些情況下,將該矢量中的所有值初始化為零。對于指紋FpQuery的每個散列Fp (Squery) i,其中1024)跳到矩陣中對應(yīng)于(行,列)=Ρρ(5_(ρΘιτ)”υ的單元。對于該單元中的所有索引的指紋,如果某些探索不匹配散列序列(例如如果例如文件大小的相關(guān)聯(lián)的元數(shù)據(jù)太大或太小),則忽略下述步驟(否則,則執(zhí)行步驟)遞增FpMatchVector中的對應(yīng)于那些索引的指紋的計數(shù) (例如如果在該單元中是Fp7,則調(diào)用FpMatchVector [7]++)。隨后,在FpMatchVector中重復(fù)步驟并且標(biāo)識具有在預(yù)置閾值(例如80%的相似度)之上的相似度的所有指紋。這可以通過對FpMatchVector中給定位置執(zhí)行計數(shù)并設(shè)置散列值的序列的大小(例如在上述示例中為1024)來完成。另外地,相似度可以被用于計算可容度系數(shù),該可容度系數(shù)允許基于特定的模板的文檔檢測??紤]到以上描述的系統(tǒng)和體系結(jié)構(gòu),參考圖2和圖3的流程圖將更好地理解根據(jù)所公開的主題實(shí)現(xiàn)的方法。為了解釋簡明起見,這些方法被示出和描述為一系列框。然而, 應(yīng)該理解和了解,所要求保護(hù)的主題不受框的次序的限制,因?yàn)橐恍┛蚩砂床煌拇涡蜻M(jìn)行和/或與此處所描繪和描述的其他框同時進(jìn)行。此外,并非全部所示的框都是實(shí)現(xiàn)下面所述的方法所必需的。圖2說明了用于對索引矩陣中的散列值的序列進(jìn)行索引的方法200的流程圖。現(xiàn)在將頻繁參照圖1和圖4相應(yīng)的環(huán)境100和400的組件和數(shù)據(jù)來描述方法200。方法200包括用于訪問文檔以從文檔中提取至少一部分文本的動作(動作210)。 例如,文本提取模塊110可以訪問文檔105以從該文檔提取文本106。文本提取模塊可以同時(并行)或順序訪問任意數(shù)目的文檔。每個文檔可以來自不同的源或相同的源。例如, 可以從一個用戶或用戶組、從軟件應(yīng)用或從另一實(shí)體處接收文檔。文本提取模塊110可以包括字母、數(shù)字和/或其它符號的任意序列或塊。方法200包括從提取的文本部分中構(gòu)造一個或多個字單元的可選動作(動作220)。例如字單元構(gòu)造模塊115可以從提取的文本111中構(gòu)造一個或多個字單元 116。在一些情況下,構(gòu)造的字單元可以包括字對。這樣,如果提取的文本被讀為“Intent Application Al. This is a patent. ”(專利申請Al。這是一個專利),則構(gòu)造的字對將包括下述項(xiàng)“Patent Application”、“Application Al. ”、“Α1· This”、“This is”、“is a”、 "a patent.”。另外,除了上面列出的這些項(xiàng)之外,還可以使用更加復(fù)雜(或更加簡單)的字單元。上述示例僅僅說明了一種構(gòu)造字單元的方式,并不應(yīng)該被讀作是對如何形成字單元的限制。字單元可以包括實(shí)質(zhì)上任意數(shù)目的字、字母、數(shù)字或其它符號。字單元的構(gòu)造可以根據(jù)需要進(jìn)行改變或定制。在一些情況下,可以在沒有構(gòu)造任何字單元的情況下生成散列序列。例如,散列算法可以通過使用各種不涉及字對構(gòu)造的各種散列技術(shù)中的任意技術(shù)來創(chuàng)建對應(yīng)于文檔的散列值序列。這樣,字對的構(gòu)造是將文檔轉(zhuǎn)換為散列算法可以用于創(chuàng)建散列值序列的事物的一種方式示例。方法200還包括將散列算法應(yīng)用于每個構(gòu)造的字單元的動作,其中,構(gòu)造的字單元的散列值形成了散列值的代表性序列(動作230)。例如,散列模塊120可以將散列算法應(yīng)用于每個構(gòu)造的字單元116??梢愿鶕?jù)字單元的接收順序,將構(gòu)造的單元的散列值放置在序列中。這樣,這些散列值序列表示了文檔105的提取的文本。這樣,繼續(xù)上述示例,如果接收到這些字對(“PatentApp 1 icationApp 1 ication Al. ”、“Al. This,V‘This is”、“is a”、“a patent. ”),將它們?nèi)缦罗D(zhuǎn)換為散列值"Patent Application”將被轉(zhuǎn)換為hash. 1, "Application Al. ”將被轉(zhuǎn)換為hash. 2,以此類推,直到所有的字單元都被轉(zhuǎn)換為散列值。在一些實(shí)施例中,由散列模塊120應(yīng)用的散列算法可以將構(gòu)造的字單元116轉(zhuǎn)換為固定大小的散列數(shù)字序列(例如10 個散列數(shù)字)。所述固定大小隨不同的使用而改變。在一些情況下,散列數(shù)字的序列的大小可基于不同的因素,例如處理能力和總的分配的處理時間而改變。可以根據(jù)散列值在散列值的序列中的位置將字構(gòu)造散列值插入到索引矩陣的列中。應(yīng)該注意,至少在一些情況下,可以將對應(yīng)于選中文檔的散列值序列與矩陣中的其它序列的散列值進(jìn)行比較,而不需要將選中的文檔的散列值實(shí)際插入到矩陣中。這樣,如在圖4中所示,根據(jù)散列序列位置標(biāo)識符422將散列序列421插入到索引矩陣425中。位置標(biāo)識符指示字單元出現(xiàn)在文本中的位置。例如,繼續(xù)上述示例,被轉(zhuǎn)換為hash. 1 ^"Patent Application”將在行1、列1 (即位置426A)處出現(xiàn),而被轉(zhuǎn)換為hash. 2 的“Application Al”將在行1、列2處出現(xiàn),以此類推,直到將散列值的整個序列都插入到矩陣中。在一些情況下,索引矩陣425可以是IOM列寬和4096行長。這樣,在單元426A,示出位置1,1(行1、列1)。相應(yīng)地,單元426B示出位置1,1024(行1、列10M),而單元426C 示出位置4096,1 (行4096、列1),并且單元426D示出位置4096,1024 (行4096,列1024)。在一些情況下,根據(jù)散列值的實(shí)際值023)將散列序列421插入到索引矩陣的行中。這樣,可以基于其值,將散列值序列的每個散列值插入到矩陣中。如上所述,可以截短散列值以便僅將散列值的一部分存儲在索引矩陣中。存儲的該部分可以隨不同的客戶機(jī)而變化,并且可以依賴于處理能力和安全性問題而改變。這樣,存儲在矩陣中的實(shí)際部分可以依賴于實(shí)現(xiàn)而改變。轉(zhuǎn)回圖2,方法200包括將散列值的序列的每個散列值插入到索引矩陣中的動作, 其中配置所述矩陣來存儲多個不同的散列值序列(動作M0)。例如,如上所述,散列值421 的序列可以被插入到索引矩陣425中,索引矩陣存儲了多個不同的散列序列(不同的文檔的指紋)。在一些情況下,可以在插入到索引矩陣時丟棄該散列值的序列??梢詫⒍鄠€不同的散列值的序列插入到索引矩陣。一旦用不同的文檔指紋進(jìn)行填充,可以查詢索引矩陣以確定存儲的散列值序列和所述查詢所基于的選中的散列值序列有多相似。這樣,換句話說,用戶可以選擇一個將要與多個不同的文檔進(jìn)行比較的文檔。查詢可以包括將選中的散列值序列(用戶希望比較的 (即查詢所基于的文檔)文檔)插入索引序列中以確定選中的散列值序列的散列值在哪些地方與其它存儲的散列值序列的散列值相重疊。當(dāng)用戶選擇的文檔的散列值與其它存儲的文檔的散列值重疊時,那些重疊的區(qū)域指示匹配。每個重疊的散列指示了具有相同(或非常相似)的字單元的可能性。重疊的散列越多,用戶選擇的文檔與另一文檔匹配越高。這樣,選中的散列值序列(用戶選擇的文檔)可以被指示為具有與其它存儲的散列值序列的某種程度的相似度,這依賴于有多少選中的散列值序列的散列值與其它存儲的散列值序列的散列值相重疊。在一些情況下,可以使用探索來過濾已知與選中的散列值序列的散列值序列不重疊的散列值序列。在這種方式中,已知的不匹配的文檔的散列序列 (指紋)將不被比較,這樣,節(jié)省了處理能力。轉(zhuǎn)回圖3,圖3說明了用于查詢索引矩陣以確定散列序列相似度的方法300的流程圖?,F(xiàn)在將頻繁參照環(huán)境100的組件和數(shù)據(jù)來描述方法300。方法300包括訪問其上存儲有多個散列值序列的索引矩陣的動作(動作310),散列值序列表示來自一個或多個文檔的字構(gòu)造。例如,可以訪問存儲了散列值序列126的索引矩陣125。存儲的散列值序列對應(yīng)于形成不同文檔的字構(gòu)造。可以從所有類型和格式的文檔中取得所述字構(gòu)造,所述文檔包括具有嵌入到文檔中的或以其它方式被包含在文檔中的各種媒體類型的文檔。這樣,如在此所用的,文檔可以包括字處理文檔、電子表格文檔、演示文檔、網(wǎng)頁、專有應(yīng)用生成的文檔等等。方法300包括訪問選中的散列值序列的動作(動作320),該選中的散列值序列對應(yīng)于查詢所要基于的選中的文檔。例如,用戶或其它實(shí)體(例如軟件應(yīng)用)可以選擇一個查詢文檔,該查詢文檔將與其它文檔進(jìn)行比較以確定它與其它文檔有多相似??梢杂删仃嚥樵兡K130將查詢文檔131發(fā)送給索引矩陣125。
方法300包括用于將選中的散列值序列插入到索引矩陣以確定選中的散列值序列的散列值在哪些地方與多個存儲的散列值序列的散列值相重疊的可選動作(動作330)。 例如,索引矩陣125可以將查詢文檔的散列值序列插入到索引矩陣以確定查詢散列值序列的散列值在哪些地方與多個存儲的散列值序列126的散列值相重疊。可以根據(jù)散列值在散列值的序列中的位置將字構(gòu)造散列值插入到索引矩陣的列中。而且,根據(jù)散列值的實(shí)際值可以將字構(gòu)造散列值插入到索引矩陣的行中。然而,如上注意的,可以直接查詢索引矩陣以確定源文檔是否與索引矩陣中的存儲的文檔中的任意一個相匹配。在這種情況下,文檔之間的相似度可以被確定而無需將選中文檔的散列值序列插入到索引矩陣中。如上所述,無論在哪里查詢序列與矩陣中現(xiàn)有散列值重疊(即一單元共享查詢文檔在該單元處相同的散列值),那些單元可以被稱為匹配,并且可以由一單元遞增匹配指示符。匹配的單元越多,則查詢文檔越近似于該文檔。因?yàn)樯⒘兄档目倲?shù)已知(即在一些情況下所有的文檔被轉(zhuǎn)換成102虹4096尺寸),索引矩陣可以輸出以百分比(例如“X%,,近似)指示查詢文檔與存儲在矩陣中的每個其它文檔有多相似的相似度指示。方法300包括查詢索引矩陣以基于選中的散列值序列中有多少散列值與多個存儲的散列值序列的散列值相重疊來確定所述多個散列值序列與選中的散列值序列有多相似(動作340)。例如,矩陣查詢模塊130可以查詢索引矩陣125以基于選中的散列值序列中有多少散列值與多個存儲的散列值序列的散列值相重疊來確定所述多個散列值序列126 與選中的散列值序列有多相似。這樣,查詢文檔可以被指示為具有與其它存儲的散列值序列的某個程度的相似度(可能以百分比形式)。在一些情況下,為了改進(jìn)輸出,可以同時比較多個散列值。就是說,可以同時將多個源文檔和存儲的散列值序列進(jìn)行比較。而且,可以使用探索來過濾已知與選中的散列值序列(或選中的散列值序列組)的散列值序列不重疊的散列值序列。因此,提供了在索引矩陣中索引和存儲散列值的序列的方法、系統(tǒng)和計算機(jī)程序產(chǎn)品。而且,提供了查詢索引矩陣以確定散列序列的相似度的方法、系統(tǒng)和計算機(jī)程序產(chǎn)品??梢詫⒋_定的散列序列的相似度作為與源文檔相似的某個百分比來輸出。本發(fā)明可具體化為其它具體形式而不背離其精神或本質(zhì)特征。所描述的實(shí)施例在所有方面都應(yīng)被認(rèn)為僅是說明性而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書而非前述描述指示。落入權(quán)利要求書的等效方案的含義和范圍內(nèi)的所有改變被權(quán)利要求書的范圍所涵蓋。
權(quán)利要求
1.一種在包括多個計算系統(tǒng)的計算機(jī)聯(lián)網(wǎng)環(huán)境中在包括處理器和存儲器的計算機(jī)系統(tǒng)處的計算機(jī)實(shí)現(xiàn)的方法,所述方法用于對索引矩陣中的散列值的序列進(jìn)行索引,所述方法包括訪問文檔(105)以從所述文檔中提取文本(106)的至少一部分的動作;將散列算法(120)應(yīng)用到一個或多個構(gòu)造的字單元(116)的動作,其中,所述構(gòu)造的字單元的散列值形成散列值(121)的代表性序列;以及將散列值(121)的序列的每個散列值插入到索引矩陣(125)中的動作,其中配置所述矩陣來存儲多個不同的散列值序列(126)。
2.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括從所提取的文本部分中構(gòu)造一個或多個字單元的動作,其中,所述散列算法將構(gòu)造的字單元轉(zhuǎn)換為固定大小的散列數(shù)字的序列。
3.如權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括將表示其它文檔的多個散列值的序列插入到所述索引矩陣的動作。
4.如權(quán)利要求3所述的方法,其特征在于,進(jìn)一步包括查詢所述索引矩陣以確定所述多個散列值序列與所述查詢所基于的選中的散列值序列有多相似的動作。
5.如權(quán)利要求4所述的方法,其特征在于,其中,所述查詢包括將所述查詢所基于的選中的散列值序列插入到所述索引矩陣中以確定所述選中的散列值序列的 散列值在哪些地方與其它存儲的散列值序列的散列值相重疊。
6.如權(quán)利要求5所述的方法,其特征在于,其中所述選中的散列值序列被指示為具有與所述其它存儲的散列值序列的某種程度的相似度,這依賴于有多少所述選中的散列值序列的散列值與所述其它存儲的散列值序列的散列值相重疊。
7.一種用于實(shí)現(xiàn)查詢索引矩陣以確定散列序列的相似度的方法的計算機(jī)程序產(chǎn)品,所述計算機(jī)程序產(chǎn)品包括其上存儲有計算機(jī)可執(zhí)行指令的一個或多個計算機(jī)可讀存儲介質(zhì), 所述指令在由所述計算系統(tǒng)的一個或多個處理器執(zhí)行時使得所述計算系統(tǒng)執(zhí)行所述方法, 所述方法包括訪問其上存儲有多個散列值序列(126)的索引矩陣(125)的動作,所述散列值序列表示來自一個或多個文檔的字構(gòu)造(116);訪問選中的散列值序列(121)的動作,所述散列值序列對應(yīng)于查詢(131)所要基于的一個選中的文檔(105);確定選中的散列值序列(121)的散列值在哪些地方與所述多個存儲的散列值序列 (126)的散列值相重疊的動作;以及查詢所述索引矩陣(125)以基于所述選中的散列值序列中有多少散列值與所述多個存儲的散列值序列(126)的散列值相重疊來確定所述多個散列值序列與所述選中的散列值序列有多相似(127)的動作。
8.如權(quán)利要求14所述的計算機(jī)程序產(chǎn)品,其特征在于,其中所述選中的散列值序列被指示為具有與所述其它存儲的散列值序列的某種程度的相似度,這依賴于有多少所述選中的散列值序列的散列值與所述其它存儲的散列值序列的散列值相重疊。
9.如權(quán)利要求14所述的計算機(jī)程序產(chǎn)品,其特征在于,其中根據(jù)散列值在散列值的序列中的位置將字構(gòu)造散列值插入到所述索引矩陣的列中,并且其中,根據(jù)所述散列值的實(shí)際值將所述字構(gòu)造散列值插入到所述索引矩陣的行中。
10. 一種計算機(jī)系統(tǒng),包括 一個或多個處理器; 系統(tǒng)存儲器;其上存儲有計算機(jī)可執(zhí)行指令的一個或多個計算機(jī)可讀存儲介質(zhì),所述計算機(jī)可執(zhí)行指令在由所述一個或多個處理器執(zhí)行時使得所述計算系統(tǒng)執(zhí)行一種用于對索引矩陣中的散列值的序列進(jìn)行索引和查詢的方法,所述方法包括訪問文檔(105)以從所述文檔中提取文本(106)的至少一部分的動作; 從所提取的文本(111)的部分中構(gòu)造一個或多個字單元(116)的動作; 將散列算法(120)應(yīng)用到每個構(gòu)造的字單元(116)的動作,其中,所述構(gòu)造的字單元的散列值形成散列值(121)的代表性序列;以及將散列值(121)的序列的每個散列值插入到索引矩陣(125)中的動作,其中配置所述矩陣來存儲多個不同的散列值序列(126);以及查詢所述索引矩陣(125)以基于所述選中的散列值序列中有多少散列值與所述多個存儲的散列值序列(126)的散列值相重疊來確定所述多個散列值序列與所述選中的散列值序列有多相似(127)的動作。
全文摘要
在此所述的實(shí)施例旨在對索引矩陣中的散列值的序列進(jìn)行索引和查詢。計算機(jī)系統(tǒng)訪問文檔以從該文檔中提取文本部分。計算機(jī)系統(tǒng)將散列算法應(yīng)用于所提取的文本。提取的文本的散列值形成散列值的代表序列。計算機(jī)系統(tǒng)還將散列值的序列的每個散列值插入到索引矩陣中,該索引矩陣被配置為存儲多個不同的散列值序列計算機(jī)系統(tǒng)還查詢索引矩陣以基于選中的散列值序列中有多少散列值與所述存儲的散列值序列的散列值相重疊來確定所述多個散列值序列與選中的散列值序列有多相似。
文檔編號G06F17/30GK102541995SQ20111037297
公開日2012年7月4日 申請日期2011年11月9日 優(yōu)先權(quán)日2010年11月10日
發(fā)明者C·W·拉曼納, J·E·布魯爾, M·H·甘地 申請人:微軟公司