本申請(qǐng)涉及數(shù)據(jù)處理領(lǐng)域,具體而言,涉及一種文本聚類方法和裝置。
背景技術(shù):
在處理來(lái)自各種資源的文章時(shí),通常需要對(duì)這些文章進(jìn)行去重或統(tǒng)計(jì)相似文章的相關(guān)信息。SimHash算法以其高性能被廣泛使用于相似文章聚類中,但現(xiàn)有的SimHash聚類算法并不完全適用于來(lái)源相對(duì)復(fù)雜的文章,因?yàn)椴煌膩?lái)源可能會(huì)對(duì)這些文章進(jìn)行細(xì)微的修改,例如,修改標(biāo)題、添加副標(biāo)題、添加空白字符與一些無(wú)關(guān)內(nèi)容等。現(xiàn)有方案完全根據(jù)SimHash算法進(jìn)行相似文章聚類,準(zhǔn)確率不是較高。此外,由于文章的改動(dòng)使得原本內(nèi)容上相似的文章被誤判為不相似,某些不相似的文章由于SimHash算法的碰撞被誤判為相似。
針對(duì)相關(guān)技術(shù)中相似文章聚類準(zhǔn)確性較低的問(wèn)題,目前尚未提出有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)的主要目的在于提供一種文本聚類方法和裝置,以解決相關(guān)技術(shù)中相似文章聚類準(zhǔn)確性較低問(wèn)題。
為了實(shí)現(xiàn)上述目的,根據(jù)本申請(qǐng)的一個(gè)方面,提供了一種文本聚類方法。該方法包括:通過(guò)第一預(yù)設(shè)算法對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類,其中,第一預(yù)設(shè)算法為低于第一預(yù)設(shè)位數(shù)的SimHash算法,通過(guò)第一預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第一預(yù)設(shè)算法判定為不相似的文本屬于不同類別;以及通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類,其中,第二預(yù)設(shè)算法不同于第一預(yù)設(shè)算法,通過(guò)第二預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第二預(yù)設(shè)算法判定為不相似的文本屬于不同類別。
進(jìn)一步地,通過(guò)第一預(yù)設(shè)算法對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類包括:計(jì)算多個(gè)文本的SimHash值,得到多個(gè)SimHash值;分別將多個(gè)SimHash值中每個(gè)SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組;以及根據(jù)分組后的多個(gè)SimHash值對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類。
進(jìn)一步地,多個(gè)SimHash值包括第一SimHash值和第二SimHash值,第一SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組后得到第一分組集合,第二SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組后得到第二分組集合,根據(jù)分組后的多個(gè)SimHash值對(duì)多個(gè)文本進(jìn)行第一 級(jí)聚類包括:判斷第一分組集合和第二分組集合中是否存在對(duì)應(yīng)相同的組別;在判斷出第一分組集合與第二分組集合中存在對(duì)應(yīng)相同的組別時(shí),則初步判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為同一類別;以及在判斷出第一分組集合與第二分組集合中不存在對(duì)應(yīng)相同的組別時(shí),則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本不相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為不同類別。
進(jìn)一步地,在判斷出第一分組集合與第二分組集合中存在對(duì)應(yīng)相同的組別時(shí),則初步判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為同一類別之后,該方法還包括:計(jì)算第一SimHash值和第二SimHash值的海明距離;判斷第一SimHash值和第二SimHash值的海明距離是否小于第一預(yù)設(shè)值;在判斷出第一SimHash值和第二SimHash值的海明距離小于第一預(yù)設(shè)值時(shí),則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似;以及在判斷出第一SimHash值和第二SimHash值的海明距離不小于第一預(yù)設(shè)值時(shí),則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本不相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為不同類別。
進(jìn)一步地,第二預(yù)設(shè)算法為文本取樣聚類算法,第一級(jí)聚類得到的類別中包括第一類別,第一類別中的文本包括第一文本和第二文本,通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類包括:分別對(duì)第一文本和第二文本進(jìn)行分塊,得到第一內(nèi)容塊集合和第二內(nèi)容塊集合,其中,第一內(nèi)容塊集合為第一文本分塊后得到的內(nèi)容塊集合,第二內(nèi)容塊集合為第二文本分塊后得到的內(nèi)容塊集合;分別從第一內(nèi)容塊集合中各個(gè)內(nèi)容塊和第二內(nèi)容塊集合中各個(gè)內(nèi)容塊中獲取第一預(yù)設(shè)數(shù)量的字符,得到第三內(nèi)容塊集合和第四內(nèi)容塊集合,其中,第三內(nèi)容塊集合為從第一內(nèi)容塊集合的各個(gè)內(nèi)容塊中獲取的第一預(yù)設(shè)數(shù)量的字符組成的內(nèi)容塊集合,第四內(nèi)容塊集合為從第二內(nèi)容塊集合的各個(gè)內(nèi)容塊中獲取的第一預(yù)設(shè)數(shù)量的字符組成的內(nèi)容塊集合;判斷第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同內(nèi)容塊的數(shù)量是否大于第二預(yù)設(shè)值;在判斷出第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同內(nèi)容塊的數(shù)量大于第二預(yù)設(shè)值時(shí),則判定第一文本和第二文本為相似文本,并將第一文本和第二文本劃分為同一類別;以及在判斷出第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同的內(nèi)容塊的數(shù)量不大于第二預(yù)設(shè)值時(shí),則判定第一文本和第二文本為不相似文本,并將第一文本和第二文本劃分為不同類別。
進(jìn)一步地,第二預(yù)設(shè)算法包括多個(gè)聚類算法,通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類包括:對(duì)第一級(jí)聚類得到的各個(gè)類別中的 文本依次采用多個(gè)聚類算法中每個(gè)聚類算法進(jìn)行聚類。
進(jìn)一步地,第二預(yù)設(shè)算法包括如下至少一種聚類算法:文本取樣聚類算法、文本長(zhǎng)度差聚類算法、文本相似度聚類算法。
為了實(shí)現(xiàn)上述目的,根據(jù)本申請(qǐng)的另一方面,提供了一種文本聚類裝置。該裝置包括:第一聚類單元,用于通過(guò)第一預(yù)設(shè)算法對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類,其中,第一預(yù)設(shè)算法為低于第一預(yù)設(shè)位數(shù)的SimHash算法,通過(guò)第一預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第一預(yù)設(shè)算法判定為不相似的文本屬于不同類別;以及第二聚類單元,用于通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類,其中,第二預(yù)設(shè)算法不同于第一預(yù)設(shè)算法,通過(guò)第二預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第二預(yù)設(shè)算法判定為不相似的文本屬于不同類別。
進(jìn)一步地,第一聚類單元包括:計(jì)算模塊,用于計(jì)算多個(gè)文本的SimHash值,得到多個(gè)SimHash值;分組模塊,用于分別將多個(gè)SimHash值中每個(gè)SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組;以及第一聚類模塊,用于根據(jù)分組后的多個(gè)SimHash值對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類。
進(jìn)一步地,多個(gè)SimHash值包括第一SimHash值和第二SimHash值,第一SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組后得到第一分組集合,第二SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組后得到第二分組集合,第一聚類模塊包括:判斷子模塊,用于判斷第一分組集合和第二分組集合中是否存在對(duì)應(yīng)相同的組別;第一分組子模塊,用于在判斷出第一分組集合與第二分組集合中存在對(duì)應(yīng)相同的組別時(shí),則初步判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為同一類別;以及第二分組子模塊,用于在判斷出第一分組集合與第二分組集合中不存在對(duì)應(yīng)相同的組別時(shí),則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本不相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為不同類別。
本申請(qǐng)通過(guò)第一預(yù)設(shè)算法對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類,其中,第一預(yù)設(shè)算法為低于第一預(yù)設(shè)位數(shù)的SimHash算法,通過(guò)第一預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第一預(yù)設(shè)算法判定為不相似的文本屬于不同類別;以及通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類,其中,第二預(yù)設(shè)算法不同于第一預(yù)設(shè)算法,通過(guò)第二預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第二預(yù)設(shè)算法判定為不相似的文本屬于不同類別,本申請(qǐng)通過(guò)降低SimHash位數(shù),放寬判定文本相似的條件,從而可以避免將一些經(jīng)過(guò)細(xì)微修改的文本判定為不相似,并通過(guò)第二預(yù)設(shè)算法對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本再次進(jìn)行聚類,從而可以提高相似文本聚類的準(zhǔn)確性,解決了相關(guān)技術(shù)中相似文章聚類準(zhǔn)確性較低問(wèn)題,進(jìn)而達(dá)到了提高相似 文章聚類準(zhǔn)確性的效果。
附圖說(shuō)明
構(gòu)成本申請(qǐng)的一部分的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1是根據(jù)本申請(qǐng)第一實(shí)施例的文本聚類方法的流程圖;
圖2是根據(jù)本申請(qǐng)第二實(shí)施例的文本聚類方法的流程圖;以及
圖3是根據(jù)本申請(qǐng)實(shí)施例的文本聚類裝置的示意圖。
具體實(shí)施方式
需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。下面將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本申請(qǐng)。
為了使本技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)方案,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分的實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。
需要說(shuō)明的是,本申請(qǐng)的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本申請(qǐng)的實(shí)施例。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
為了便于描述,以下對(duì)本申請(qǐng)實(shí)施例涉及地一些術(shù)語(yǔ)或概念進(jìn)行說(shuō)明:
SimHash算法:一種相似文本聚類算法,對(duì)每個(gè)文本計(jì)算SimHash值,SimHash值差異小的兩個(gè)文本判定為相似文本。
海明距離:兩個(gè)二進(jìn)制串中不同位的數(shù)量。
哈希算法:是指將任意長(zhǎng)度的輸入映射為固定長(zhǎng)度的輸出,該輸出即稱為哈希值。
編輯距離:是指兩個(gè)字符串之間,由一個(gè)轉(zhuǎn)成另一個(gè)所需的最少編輯操作次數(shù), 其中,允許的編輯操作包括將一個(gè)字符替換成另一個(gè)字符、插入一個(gè)字符和刪除一個(gè)字符。
TF-IDF算法:一種相似文本判定算法,通過(guò)計(jì)算文本關(guān)鍵詞與詞頻來(lái)計(jì)算兩個(gè)文本相似度的方法。
根據(jù)本申請(qǐng)實(shí)施例,提供了一種文本聚類方法。圖1是根據(jù)本申請(qǐng)第一實(shí)施例的文本聚類方法的流程圖,如圖1所示,該方法包括如下的步驟S102至步驟S104:
步驟S102,通過(guò)第一預(yù)設(shè)算法對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類,其中,第一預(yù)設(shè)算法為低于第一預(yù)設(shè)位數(shù)的SimHash算法,通過(guò)第一預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第一預(yù)設(shè)算法判定為不相似的文本屬于不同類別。
本申請(qǐng)實(shí)施例的第一預(yù)設(shè)位數(shù)可以根據(jù)實(shí)際情況進(jìn)行設(shè)置。由于在進(jìn)行文本聚類時(shí)比較通用的SimHash算法是計(jì)算64位長(zhǎng)度的SimHash值,當(dāng)兩個(gè)文本的SimHash值的海明距離在3以內(nèi)時(shí),則判定兩個(gè)文本相似,但是通過(guò)64位長(zhǎng)度的SimHash值進(jìn)行相似文本判定容易使一些相似的文本被誤判為不相似,因此,本申請(qǐng)實(shí)施例為了減少將一些相似的文本被誤判為不相似,可以將第一預(yù)設(shè)位數(shù)設(shè)置為64位,即第一預(yù)設(shè)算法為低于64位的SimHash算法(也即計(jì)算低于64位長(zhǎng)度的SimHash值,例如,計(jì)算32位長(zhǎng)度的SimHash值或是16位長(zhǎng)度的SimHash值),通過(guò)低于64位長(zhǎng)度的SimHash值進(jìn)行相似文本判定,放寬了相似文本判定的條件,可以減少將一些相似的文本被誤判為不相似。
具體地,以下以第一預(yù)設(shè)算法為32位的SimHash算法為例對(duì)本申請(qǐng)實(shí)施例進(jìn)行說(shuō)明。分別計(jì)算各個(gè)文本的32位長(zhǎng)度的SimHash值,并分別計(jì)算任意兩個(gè)文本的32位長(zhǎng)度的SimHash值的海明距離,如果兩個(gè)文本對(duì)應(yīng)的海明距離大于閾值(例如,3或是4等),則判定這兩個(gè)文本不相似,并將這兩個(gè)文本劃分為不同的類別,如果這兩個(gè)文本對(duì)應(yīng)的海明距離不大于閾值,則判定這兩個(gè)文本相似,并將這兩個(gè)文本劃分為同一類別。
優(yōu)選地,為了提高相似文本聚類的速度,通過(guò)第一預(yù)設(shè)算法對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類包括:計(jì)算多個(gè)文本的SimHash值,得到多個(gè)SimHash值;分別將多個(gè)SimHash值中每個(gè)SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組;以及根據(jù)分組后的多個(gè)SimHash值對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類。
本申請(qǐng)實(shí)施例在計(jì)算得到各個(gè)文本的SimHash值之后,按照第二預(yù)設(shè)位數(shù)對(duì)各個(gè)SimHash值進(jìn)行分組,其中,第二預(yù)設(shè)位數(shù)可以根據(jù)SimHash值的長(zhǎng)度進(jìn)行設(shè)置,例如,32位長(zhǎng)度的SimHash值,則可以將第二預(yù)設(shè)位數(shù)設(shè)為8,即每8位作為一組,每個(gè)SimHash值分成4組,也可以將第二預(yù)設(shè)位數(shù)設(shè)為16,即每16位作為一組,每個(gè) SimHash值分成2組。具體地,本申請(qǐng)實(shí)施例的第二預(yù)設(shè)位數(shù)優(yōu)選為8,第一預(yù)設(shè)算法優(yōu)選為32位SimHash算法。
優(yōu)選地,多個(gè)SimHash值包括第一SimHash值和第二SimHash值,第一SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組后得到第一分組集合,第二SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組后得到第二分組集合,根據(jù)分組后的多個(gè)SimHash值對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類包括:判斷第一分組集合和第二分組集合中是否存在對(duì)應(yīng)相同的組別;在判斷出第一分組集合與第二分組集合中存在對(duì)應(yīng)相同的組別時(shí),則初步判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為同一類別;以及在判斷出第一分組集合與第二分組集合中不存在對(duì)應(yīng)相同的組別時(shí),則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本不相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為不同類別。
本申請(qǐng)實(shí)施例在按照第二預(yù)設(shè)位數(shù)分別將第一SimHash值和第二SimHash值進(jìn)行分組得到第一分組集合和第二分組集合后,判斷第一分組集合和第二分組集合中是否存在對(duì)應(yīng)相同的組別。
例如,第一SimHash值依次按照每8位一組分成四組,即組11至組14,其中,第1至8位為組11,第9至16位為組12,第17至24位為組13,第25至32位為組14,同樣地,第二SimHash值依次按照每8位一組分成四組,即組21至組24,其中,第1至8位為組21,第9至16位為組22,第17至24位為組23,第25至32位為組24,則組11與組21對(duì)應(yīng)、組12與組22對(duì)應(yīng)、組13與組23對(duì)應(yīng)以及組14與組24對(duì)應(yīng)。
如果第一SimHash值和第二SimHash值中存在對(duì)應(yīng)相同的組別,即組11與組21、組12與組22、組13與組23以及組14與組24中至少存在一對(duì)組別相同時(shí),則初步判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為同一類別,如果第一SimHash值和第二SimHash值中對(duì)應(yīng)地組別均不相同,即組11與組21、組12與組22、組13與組23以及組14與組24均不相同,則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本不相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為不同類別。
需要說(shuō)明的是,在本申請(qǐng)實(shí)施例中,對(duì)多個(gè)SimHash值中任意兩個(gè)SimHash值分別執(zhí)行上述操作,以分別判定多個(gè)SimHash值中任意兩個(gè)SimHash值對(duì)應(yīng)的文本是否相似,從而實(shí)現(xiàn)多個(gè)文本的聚類,例如,當(dāng)前存在10個(gè)文本,對(duì)應(yīng)計(jì)算得到10個(gè)SimHash值,分別對(duì)這10個(gè)SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組,得到10個(gè)分組 集合,即分組集合1至分組集合10,每次從上述10個(gè)分組集合中取兩個(gè)分組集合進(jìn)行比較以判定這兩個(gè)分組集合對(duì)應(yīng)的文本是否相似,并把判定為相似的文本劃分為同一類別,把判定為不相似的文本劃分為不同類別;重復(fù)執(zhí)行上述步驟直至完成上述10個(gè)分組集合中任意兩個(gè)分組集合的判定,以完成對(duì)上述10個(gè)文本的聚類。
優(yōu)選地,在判斷出第一分組集合與第二分組集合中存在對(duì)應(yīng)相同的組別時(shí),則初步判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為同一類別之后,該方法還包括:計(jì)算第一SimHash值和第二SimHash值的海明距離;判斷第一SimHash值和第二SimHash值的海明距離是否小于第一預(yù)設(shè)值;在判斷出第一SimHash值和第二SimHash值的海明距離小于第一預(yù)設(shè)值時(shí),則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似;以及在判斷出第一SimHash值和第二SimHash值的海明距離不小于第一預(yù)設(shè)值時(shí),則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本不相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為不同類別。
本申請(qǐng)實(shí)施例在初步判定兩個(gè)文本相似之后,可以繼續(xù)根據(jù)兩個(gè)文本對(duì)應(yīng)的SimHash值的海明距離來(lái)進(jìn)一步判定這兩個(gè)文本是否相似。具體地,還是以第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本為例進(jìn)行說(shuō)明:計(jì)算第一SimHash值和第二SimHash值的海明距離,并與第一預(yù)設(shè)值進(jìn)行比較,其中,第一預(yù)設(shè)值可以根據(jù)實(shí)際情況進(jìn)行設(shè)置,例如,設(shè)為3或是4等,如果第一SimHash值和第二SimHash值的海明距離小于第一預(yù)設(shè)值,則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似,如果第一SimHash值和第二SimHash值的海明距離不小于第一預(yù)設(shè)值,則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本不相似。
本申請(qǐng)實(shí)施例通過(guò)上述步驟將多個(gè)文本進(jìn)行聚類,得到多個(gè)類別,其中,判定為相似的文本屬于同一類別,判定為不相似的文本屬于不同類別。
步驟S104,通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類,其中,第二預(yù)設(shè)算法不同于第一預(yù)設(shè)算法,通過(guò)第二預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第二預(yù)設(shè)算法判定為不相似的文本屬于不同類別。
本申請(qǐng)實(shí)施例通過(guò)第一預(yù)設(shè)算法將多個(gè)文本進(jìn)行初步聚類之后,進(jìn)一步通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類。優(yōu)選地,由于在第一級(jí)聚類得到的類別中可能存在部分類別中僅包含一個(gè)文本,本申請(qǐng)實(shí)施例可以先從第一級(jí)聚類得到的類別中剔除掉那些僅包含一個(gè)文本的類別再進(jìn)行第二級(jí)聚類。
可選地,第二預(yù)設(shè)算法可以包括如下至少一種聚類算法:文本取樣聚類算法、文 本長(zhǎng)度差聚類算法、文本相似度聚類算法。
本申請(qǐng)實(shí)施例的文本取樣聚類算法是指對(duì)對(duì)文本中句子進(jìn)行取樣后基于樣本進(jìn)行相似文本判定;文本長(zhǎng)度差聚類算法是指計(jì)算任意兩個(gè)文本的長(zhǎng)度差并判斷該長(zhǎng)度差是否小于某個(gè)閾值來(lái)判定文本是否相似,例如,兩個(gè)文本的長(zhǎng)度差小于某個(gè)閾值,則判定這兩個(gè)文本相似,并將這兩個(gè)劃分為同一類別,兩個(gè)文本的長(zhǎng)度差不小于某個(gè)閾值,則判定這兩個(gè)文本不相似,并將這兩個(gè)劃分為不同類別;文本相似度聚類算法是指計(jì)算任意兩個(gè)文本的相似度并基于相似度判定文本是否相似,例如,兩個(gè)文本的相似度大于某個(gè)閾值,則判定這兩個(gè)文本相似,并將這兩個(gè)劃分為同一類別,兩個(gè)文本的相似度不大于某個(gè)閾值,則判定這兩個(gè)文本不相似,并將這兩個(gè)劃分為不同類別。
優(yōu)選地,第二預(yù)設(shè)算法為文本取樣聚類算法,第一級(jí)聚類得到的類別中包括第一類別,第一類別中的文本包括第一文本和第二文本,通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類包括:分別對(duì)第一文本和第二文本進(jìn)行分塊,得到第一內(nèi)容塊集合和第二內(nèi)容塊集合,其中,第一內(nèi)容塊集合為第一文本分塊后得到的內(nèi)容塊集合,第二內(nèi)容塊集合為第二文本分塊后得到的內(nèi)容塊集合;分別從第一內(nèi)容塊集合中各個(gè)內(nèi)容塊和第二內(nèi)容塊集合中各個(gè)內(nèi)容塊中獲取第一預(yù)設(shè)數(shù)量的字符,得到第三內(nèi)容塊集合和第四內(nèi)容塊集合,其中,第三內(nèi)容塊集合為從第一內(nèi)容塊集合的各個(gè)內(nèi)容塊中獲取的第一預(yù)設(shè)數(shù)量的字符組成的內(nèi)容塊集合,第四內(nèi)容塊集合為從第二內(nèi)容塊集合的各個(gè)內(nèi)容塊中獲取的第一預(yù)設(shè)數(shù)量的字符組成的內(nèi)容塊集合;判斷第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同內(nèi)容塊的數(shù)量是否大于第二預(yù)設(shè)值;在判斷出第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同內(nèi)容塊的數(shù)量大于第二預(yù)設(shè)值時(shí),則判定第一文本和第二文本為相似文本,并將第一文本和第二文本劃分為同一類別;以及在判斷出第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同的內(nèi)容塊的數(shù)量不大于第二預(yù)設(shè)值時(shí),則判定第一文本和第二文本為不相似文本,并將第一文本和第二文本劃分為不同類別。
本申請(qǐng)實(shí)施例的第一類別為第一級(jí)聚類得到的類別中任意一個(gè)類別,且該類別中文本數(shù)不小于2,第一文本和第二文本為第一類別中任意兩個(gè)文本。以下本申請(qǐng)實(shí)施例以第一類別中的第一文本和第二文本為例說(shuō)明通過(guò)文本取樣聚類算法進(jìn)行相似文本判定的過(guò)程:
具體地,可以按照斷句符(例如,逗號(hào)、句號(hào)、分號(hào)等)對(duì)第一文本和第二文本進(jìn)行分塊,例如,按照斷句符分別將第一文本和第二文本劃分成多個(gè)句子。優(yōu)選地,在對(duì)第一文本和第二文本劃分成多個(gè)內(nèi)容塊后,可以去除每個(gè)內(nèi)容塊內(nèi)的無(wú)效字符(例如,引號(hào)、空格等),并基于去除了無(wú)效字符的內(nèi)容塊得到第一內(nèi)容塊集合和第二內(nèi)容塊集合。優(yōu)選地,為了提高相似文本判定結(jié)果的準(zhǔn)確性,在分別對(duì)第一文本和第二文 本進(jìn)行分塊,得到第一內(nèi)容塊集合和第二內(nèi)容塊集合之前,本申請(qǐng)實(shí)施例還可以分別對(duì)第一文本和第二文本進(jìn)行全角字符轉(zhuǎn)為半角字符、將繁體字字轉(zhuǎn)換為簡(jiǎn)體字等處理,從而可以避免相同文本內(nèi)容因?yàn)楦袷讲煌慌卸椴幌嗤谋緝?nèi)容。
本申請(qǐng)實(shí)施例的第一預(yù)設(shè)數(shù)量可以根據(jù)文本句子特點(diǎn)進(jìn)行設(shè)置,例如,如果多數(shù)文本的句子均較長(zhǎng),則可以將第一預(yù)設(shè)數(shù)量設(shè)置的大一些,例如,設(shè)置第一預(yù)設(shè)數(shù)量為20,如果多數(shù)文本的句子均較短,則可以將第一預(yù)設(shè)數(shù)量設(shè)置的小一些,例如,設(shè)置第一預(yù)設(shè)數(shù)量為10。具體地,本申請(qǐng)實(shí)施例通過(guò)分別從第一內(nèi)容塊集合中各個(gè)內(nèi)容塊中取第一預(yù)設(shè)數(shù)量的字符,得到第三內(nèi)容塊集合,通過(guò)分別從第二內(nèi)容塊集合中各個(gè)內(nèi)容塊中取第一預(yù)設(shè)數(shù)量的字符,得到第四內(nèi)容塊集合??蛇x地,可以取各個(gè)內(nèi)容塊中前第一預(yù)設(shè)數(shù)量的字符組成各個(gè)新的內(nèi)容塊,并將同一文本對(duì)應(yīng)的所有新的內(nèi)容塊組成一個(gè)新的內(nèi)容塊集合(即上述第三內(nèi)容塊集合和第四內(nèi)容塊集合),例如,取內(nèi)容塊1中前10個(gè)字符組成新的內(nèi)容塊1,取內(nèi)容塊2中前10個(gè)字符組成新的內(nèi)容塊2,以此類推。本申請(qǐng)實(shí)施例通過(guò)對(duì)步驟S102得到內(nèi)容塊進(jìn)行采樣,從而可以減少那些細(xì)微修改對(duì)相似文本判定的影響。
在得到第三內(nèi)容塊集合和第四內(nèi)容塊集合之后,可以通過(guò)計(jì)算第三內(nèi)容塊集合和第四內(nèi)容塊集合中各個(gè)內(nèi)容塊的哈希值、SimHash值、編輯距離等來(lái)判斷第三內(nèi)容塊集合中的內(nèi)容塊是否與第四內(nèi)容塊集合中的內(nèi)容塊相同。
在計(jì)算得到第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同內(nèi)容塊的數(shù)量之后,即可以判斷第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同內(nèi)容塊的數(shù)量是否大于第二預(yù)設(shè)值。具體地,本申請(qǐng)實(shí)施例的第二預(yù)設(shè)值可以根據(jù)文本長(zhǎng)度自適應(yīng)進(jìn)行調(diào)整,例如,如果文本長(zhǎng)度較長(zhǎng)(即文本字符數(shù))(例如,文本長(zhǎng)度大于2000),則預(yù)設(shè)值可以取大一些,如果文本長(zhǎng)度較短(例如,文本長(zhǎng)度小于500),則預(yù)設(shè)值可以取小一些。具體地,在判斷出第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同內(nèi)容塊的數(shù)量大于第二預(yù)設(shè)值時(shí),則判定第一文本和第二文本相似,并將第一文本和第二文本劃分為同一類別,在判斷出第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同的內(nèi)容塊的數(shù)量不大于第二預(yù)設(shè)值時(shí),則判定第一文本和第二文本為不相似文本,并將第一文本和第二文本劃分為不同類別。
本申請(qǐng)實(shí)施例通過(guò)第一預(yù)設(shè)算法對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類,其中,第一預(yù)設(shè)算法為低于第一預(yù)設(shè)位數(shù)的SimHash算法,通過(guò)第一預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第一預(yù)設(shè)算法判定為不相似的文本屬于不同類別;以及通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類,其中,第二預(yù)設(shè)算法不同于第一預(yù)設(shè)算法,通過(guò)第二預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第二預(yù)設(shè)算法判定為不相似的文本屬于不同類別,本申請(qǐng)通過(guò)降低SimHash位數(shù),放寬判定文本相似的條件,從而可以避免將一些經(jīng)過(guò)細(xì)微修改的文本判定為不相似,并通過(guò) 第二預(yù)設(shè)算法對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本再次進(jìn)行聚類,從而可以提高相似文本聚類的準(zhǔn)確性,解決了相關(guān)技術(shù)中相似文章聚類準(zhǔn)確性較低問(wèn)題,進(jìn)而達(dá)到了提高相似文章聚類準(zhǔn)確性的效果。
優(yōu)選地,第二預(yù)設(shè)算法可以包括多個(gè)聚類算法,通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類包括:對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本依次采用多個(gè)聚類算法中每個(gè)聚類算法進(jìn)行聚類。
例如,第二預(yù)設(shè)算法包括文本取樣聚類算法和文本長(zhǎng)度差聚類算法,則可以先根據(jù)文本取樣聚類算法對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行聚類,并根據(jù)文本長(zhǎng)度差聚類算法分別對(duì)通過(guò)文本取樣聚類算法得到的各個(gè)類別中的文本再次進(jìn)行聚類。第二預(yù)設(shè)算法包含兩個(gè)以上的聚類算法時(shí),同樣按照上述方法進(jìn)行聚類,即在前一個(gè)執(zhí)行的聚類算法的聚類結(jié)果上執(zhí)行后續(xù)的聚類算法進(jìn)行聚類。優(yōu)選地,為了提高聚類速度,可以先對(duì)第二預(yù)設(shè)算法包含的多個(gè)聚類算法按照運(yùn)算速度進(jìn)行排序,運(yùn)算速度快的聚類算法先執(zhí)行,運(yùn)算速度慢的聚類算法后執(zhí)行,從而大部分不相似的文本在到達(dá)運(yùn)算速度很慢的聚類算法前就已經(jīng)被過(guò)濾掉,只有很少一部分文章執(zhí)行排在最后的那些運(yùn)算速度很慢的聚類算法,從而可以將總體判定時(shí)間大大減小。
圖2是根據(jù)本申請(qǐng)第二實(shí)施例的文本聚類方法的流程圖。如圖2所示,該方法包括如下步驟:
步驟S202,列舉除SimHash算法之外的多種相似文本聚類算法。
例如,文本取樣聚類算法、文本長(zhǎng)度差聚類算法、文本相似度聚類算法等。
步驟S204,將上述多種文本聚類算法按照運(yùn)算速度進(jìn)行排序,形成多級(jí)判定。
步驟S206,通過(guò)SimHash算法對(duì)文本進(jìn)行初步聚類。
本申請(qǐng)實(shí)施例通過(guò)計(jì)算所有文本的SimHash值,并根據(jù)所有文本的SimHash值對(duì)所有文本進(jìn)行聚類。
具體地,本申請(qǐng)實(shí)施例可以采用32位SimHash算法,即計(jì)算各個(gè)文本32位SimHash值,當(dāng)兩個(gè)文本的SimHash值的差異的位數(shù)(即海明距離)在3位或3位以內(nèi)時(shí),初步判定兩個(gè)文本相似。具體地,計(jì)算各個(gè)文本的SimHash值的步驟可以如下:
步驟S11,通過(guò)分詞或切分文本,得到n個(gè)特征。
各個(gè)特征即文本分詞或切分后得到的各個(gè)內(nèi)容塊。
步驟S12,計(jì)算各個(gè)特征的哈希值,得到該文本的特征值Fture[n]。
各個(gè)特征值即各個(gè)特征的哈希值,分別計(jì)算n個(gè)特征的哈希值,得到n個(gè)特征值,即Fture[n],其中,F(xiàn)ture[n]為包含n個(gè)元素的數(shù)組,每個(gè)元素均為一個(gè)特征值。
步驟S13,對(duì)各個(gè)特征都賦予權(quán)重1,或通過(guò)TF-IDF等算法計(jì)算每個(gè)特征的權(quán)重,得到權(quán)重Wght[n]。
對(duì)n個(gè)特征均賦予權(quán)重,得到n個(gè)權(quán)重,即Wght[n],其中,Wght[n]為包含n個(gè)元素的數(shù)組,每個(gè)元素均為一個(gè)權(quán)重。
步驟S14,記錄n個(gè)整數(shù)序列Flag[m],m為要計(jì)算的SimHash值的長(zhǎng)度,整數(shù)序列中各個(gè)元素的初始值都為0。
上述Flag[m]為包含m個(gè)元素的數(shù)組,每個(gè)元素均為一個(gè)整數(shù),每個(gè)元素的初始值均為0,上述m為要計(jì)算的SimHash值的長(zhǎng)度,例如,計(jì)算32位長(zhǎng)度的SimHash值,則m取32。
步驟S15,對(duì)每一個(gè)特征值Fture[x]的每個(gè)二進(jìn)制位FtureBit[i],若該位為0,則Flag[i]減去Wght[x]的值,若該位為1,則Flag[i]加上Wght[x]的值。
特征值Fture[x]表示上述特征值數(shù)組Fture[n]第x個(gè)元素,其中,x=1,2,…,n,F(xiàn)lag[i]表示數(shù)組Flag[m]第i個(gè)元素,F(xiàn)tureBit[i]表示特征值Fture[x]的第i個(gè)二進(jìn)制位,其中,i=1,2,…,m。具體地,每個(gè)特征值由多個(gè)二進(jìn)制位組成,在本申請(qǐng)實(shí)施例中,對(duì)每一個(gè)特征值Fture[x]的每個(gè)二進(jìn)制位FtureBit[i]進(jìn)行判斷,如果FtureBit[i]為0,F(xiàn)lag[i]減去Wght[x]的值,如果FtureBit[i]為1,F(xiàn)lag[i]加上Wght[x]的值。
步驟S16,最終得到數(shù)組Flag[]中的每個(gè)位的數(shù)據(jù)Flag[j],如果該位的數(shù)據(jù)大于或等于0,則SimHash值對(duì)應(yīng)第j位設(shè)為1,如果該位的數(shù)據(jù)小于0,則SimHash值對(duì)應(yīng)第j位設(shè)為0,其中,j=1,2,…,m。
具體判定時(shí),本申請(qǐng)實(shí)施例使用一種算法減少計(jì)算量,該算法的核心思想是:將32位SimHash值的二進(jìn)制值按8位一組,切成4組,此時(shí)兩個(gè)文本若要相似,則這兩個(gè)文本對(duì)應(yīng)的SimHash值分成的4組中,至少有一組完全一樣。具體地,根據(jù)分組后的多個(gè)SimHash值對(duì)多個(gè)文本進(jìn)行聚類的步驟可以如下:
步驟S21,準(zhǔn)備4組桶Bucket[4],其中,每組桶可以是字典(Dictionary)或哈希圖(HashMap)之類的數(shù)據(jù)結(jié)構(gòu),包括鍵(Key)和值(Value),其中,Key用于存儲(chǔ)唯一標(biāo)識(shí)符,Value用于存儲(chǔ)具體的數(shù)據(jù)。每組桶中的每個(gè)元素是一個(gè)單獨(dú)的桶,存儲(chǔ)了一個(gè)整數(shù)(即Key)與一個(gè)文本列表(即Value)的映射關(guān)系。
步驟S22,將每個(gè)文本的SimHash值按每8位一組分成4組Part[4]。
上述Part[4]表示包含四個(gè)元素的數(shù)組。
步驟S23,對(duì)每一個(gè)Part[i],判斷Bucket[i]的Key中是否有Part[i],若有,則將該P(yáng)art[i]所屬的文本加入到該Key對(duì)應(yīng)的文本列表中,若沒(méi)有,則添加一個(gè)Key為Part[i]的新元素,并將該P(yáng)art[i]所屬的文本加入到該Key對(duì)應(yīng)的文本列表中。
上述Part[i]表示數(shù)組Part[4]中第i個(gè)元素,Bucket[i]表示第i組桶,其中,i=1,2,3,4。
在完成對(duì)所有文本執(zhí)行上述步驟之后,得到的每個(gè)桶即為一個(gè)初步聚類。
步驟S208,判斷是否完成所有文本的判定。
在判斷出完成了所有文本的判定時(shí),則結(jié)束,在判斷出未完成所有文本的判定時(shí),則執(zhí)行步驟210。
步驟S210,取一個(gè)聚類中的兩個(gè)文本。
上述兩個(gè)文本為未進(jìn)行過(guò)判定的文本。
步驟S212,判斷這兩個(gè)文本是否通過(guò)所有級(jí)別判定。
在判斷出這兩個(gè)文本通過(guò)所有級(jí)別判定時(shí)(即在所有級(jí)別的聚類算法中均判定出這兩個(gè)文本相似),則判定這兩個(gè)文本相似,并返回執(zhí)行步驟S208,如果這兩個(gè)文本未通過(guò)所有級(jí)別判定,則執(zhí)行步驟S214。
步驟S214,對(duì)聚類中的兩個(gè)文本執(zhí)行下一級(jí)別判定。
對(duì)上述兩個(gè)文本執(zhí)行下一級(jí)別判定,即通過(guò)后續(xù)的聚類算法繼續(xù)判定這兩個(gè)文本是否相似。
步驟S216,判斷是否判定通過(guò)?
如果下一級(jí)別判定這兩個(gè)文本相似,則返回執(zhí)行步驟S212,如果下一級(jí)別判定這兩個(gè)文本不相似,則判定這兩個(gè)文本不相似,并返回執(zhí)行步驟S208。
步驟S218,不相似。
步驟S220,相似。
本申請(qǐng)實(shí)施例通過(guò)對(duì)每個(gè)聚類中的文本,逐級(jí)執(zhí)行后續(xù)的判定算法,若其中某一級(jí)判定兩個(gè)文本不相似,則最終判定兩個(gè)文本為不相似,若每一級(jí)都判定兩個(gè)文本相似,則最終判定兩個(gè)文本相似。由于SimHash算法計(jì)算速度快,且可過(guò)濾掉大量的文本,所以本申請(qǐng)實(shí)施例將SimHash算法作為第一級(jí)判定,從而可以提高整個(gè)文本聚類 的速度。
由上述描述可知,本申請(qǐng)實(shí)施例在SimHash算法的基礎(chǔ)上,按運(yùn)算速度排列多級(jí)相似文本判定算法(即聚類算法),并放寬各級(jí)相似判定算法的判定條件,盡量減少原本相似的文章在任何一級(jí)被誤判為不相似的可能,雖然每一級(jí)判定都會(huì)有一些不相似的文章被誤判為相似,但由于多級(jí)判定的設(shè)計(jì),每一級(jí)誤判的概率相乘后,最終誤判的概率會(huì)變得非常低,使相似文章的判定結(jié)果更準(zhǔn)確;此外,由于多級(jí)相似文本判定算法按算法復(fù)雜度升序排列,運(yùn)算速度快的判定算法先被執(zhí)行,運(yùn)算速度慢的判定算法后被執(zhí)行,從而大部分不相似的文章在到達(dá)運(yùn)算速度慢的算法前就已經(jīng)被過(guò)濾掉,只有很少一部分文章執(zhí)行排在后面的那些運(yùn)算速度比較慢的算法,使得總體判定時(shí)間大大減小,與單獨(dú)使用SimHash算法相比速度又不會(huì)慢很多。
需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
根據(jù)本申請(qǐng)實(shí)施例的另一方面,提供了一種文本聚類裝置,該文本聚類裝置可以用于執(zhí)行本申請(qǐng)實(shí)施例的文本聚類方法,本申請(qǐng)實(shí)施例的文本聚類方法也可以通過(guò)本申請(qǐng)實(shí)施例的文本聚類裝置來(lái)執(zhí)行。
圖3是根據(jù)本申請(qǐng)實(shí)施例的文本聚類裝置的示意圖,如圖3所示,該裝置包括:第一聚類單元10和第二聚類單元20。
第一聚類單元10,用于通過(guò)第一預(yù)設(shè)算法對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類,其中,第一預(yù)設(shè)算法為低于第一預(yù)設(shè)位數(shù)的SimHash算法,通過(guò)第一預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第一預(yù)設(shè)算法判定為不相似的文本屬于不同類別。
第二聚類單元20,用于通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類,其中,第二預(yù)設(shè)算法不同于第一預(yù)設(shè)算法,通過(guò)第二預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第二預(yù)設(shè)算法判定為不相似的文本屬于不同類別。
本申請(qǐng)實(shí)施例通過(guò)第一聚類單元10通過(guò)第一預(yù)設(shè)算法對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類,其中,第一預(yù)設(shè)算法為低于第一預(yù)設(shè)位數(shù)的SimHash算法,通過(guò)第一預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第一預(yù)設(shè)算法判定為不相似的文本屬于不同類別;以及第二聚類單元20通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類,其中,第二預(yù)設(shè)算法不同于第一預(yù)設(shè)算法,通過(guò)第二預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第二預(yù)設(shè)算法判定為不相似的文本屬于不同類別,本申請(qǐng)通過(guò)降低SimHash位數(shù),放寬判定文本相似的條件,從而可以避免將一些經(jīng)過(guò) 細(xì)微修改的文本判定為不相似,并通過(guò)第二預(yù)設(shè)算法對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本再次進(jìn)行聚類,從而可以提高相似文本聚類的準(zhǔn)確性,解決了相關(guān)技術(shù)中相似文章聚類準(zhǔn)確性較低問(wèn)題,進(jìn)而達(dá)到了提高相似文章聚類準(zhǔn)確性的效果。
優(yōu)選地,第一聚類單元10包括:計(jì)算模塊,用于計(jì)算多個(gè)文本的SimHash值,得到多個(gè)SimHash值;分組模塊,用于分別將多個(gè)SimHash值中每個(gè)SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組;以及第一聚類模塊,用于根據(jù)分組后的多個(gè)SimHash值對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類。
優(yōu)選地,多個(gè)SimHash值包括第一SimHash值和第二SimHash值,第一SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組后得到第一分組集合,第二SimHash值按照第二預(yù)設(shè)位數(shù)進(jìn)行分組后得到第二分組集合,第一聚類模塊包括:判斷子模塊,用于判斷第一分組集合和第二分組集合中是否存在對(duì)應(yīng)相同的組別;第一分組子模塊,用于在判斷出第一分組集合與第二分組集合中存在對(duì)應(yīng)相同的組別時(shí),則初步判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為同一類別;以及第二分組子模塊,用于在判斷出第一分組集合與第二分組集合中不存在對(duì)應(yīng)相同的組別時(shí),則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本不相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為不同類別。
可選地,該裝置還包括:計(jì)算單元,用于計(jì)算第一SimHash值和第二SimHash值的海明距離;判斷單元,用于判斷第一SimHash值和第二SimHash值的海明距離是否小于第一預(yù)設(shè)值;第一判定單元,用于在判斷出第一SimHash值和第二SimHash值的海明距離小于第一預(yù)設(shè)值時(shí),則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本相似;以及第二判定單元,用于在判斷出第一SimHash值和第二SimHash值的海明距離不小于第一預(yù)設(shè)值時(shí),則判定第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本不相似,并將第一SimHash值對(duì)應(yīng)的文本和第二SimHash值對(duì)應(yīng)的文本劃分為不同類別。
可選地,第二預(yù)設(shè)算法為文本取樣聚類算法,第一級(jí)聚類得到的類別中包括第一類別,第一類別中的文本包括第一文本和第二文本,第二聚類單元20包括:分塊模塊,用于分別對(duì)第一文本和第二文本進(jìn)行分塊,得到第一內(nèi)容塊集合和第二內(nèi)容塊集合,其中,第一內(nèi)容塊集合為第一文本分塊后得到的內(nèi)容塊集合,第二內(nèi)容塊集合為第二文本分塊后得到的內(nèi)容塊集合;獲取模塊,用于分別從第一內(nèi)容塊集合中各個(gè)內(nèi)容塊和第二內(nèi)容塊集合中各個(gè)內(nèi)容塊中獲取第一預(yù)設(shè)數(shù)量的字符,得到第三內(nèi)容塊集合和第四內(nèi)容塊集合,其中,第三內(nèi)容塊集合為從第一內(nèi)容塊集合的各個(gè)內(nèi)容塊中獲取的第一預(yù)設(shè)數(shù)量的字符組成的內(nèi)容塊集合,第四內(nèi)容塊集合為從第二內(nèi)容塊集合的各個(gè) 內(nèi)容塊中獲取的第一預(yù)設(shè)數(shù)量的字符組成的內(nèi)容塊集合;判斷模塊,用于判斷第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同內(nèi)容塊的數(shù)量是否大于第二預(yù)設(shè)值;第一判定模塊,用于在判斷出第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同內(nèi)容塊的數(shù)量大于第二預(yù)設(shè)值時(shí),則判定第一文本和第二文本為相似文本,并將第一文本和第二文本劃分為同一類別;以及第二判定模塊,用于在判斷出第三內(nèi)容塊集合和第四內(nèi)容塊集合中相同的內(nèi)容塊的數(shù)量不大于第二預(yù)設(shè)值時(shí),則判定第一文本和第二文本為不相似文本,并將第一文本和第二文本劃分為不同類別。
可選地,第二預(yù)設(shè)算法包括多個(gè)聚類算法,第二聚類單元20包括:第二聚類模塊,用于對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本依次采用多個(gè)聚類算法中每個(gè)聚類算法進(jìn)行聚類。
可選地,第二預(yù)設(shè)算法包括如下至少一種聚類算法:文本取樣聚類算法、文本長(zhǎng)度差聚類算法、文本相似度聚類算法。
所述文本聚類裝置包括處理器和存儲(chǔ)器,上述第一聚類單元和第二聚類單元等均作為程序單元存儲(chǔ)在存儲(chǔ)器中,由處理器執(zhí)行存儲(chǔ)在存儲(chǔ)器中的上述程序單元來(lái)實(shí)現(xiàn)相應(yīng)的功能。
處理器中包含內(nèi)核,由內(nèi)核去存儲(chǔ)器中調(diào)取相應(yīng)的程序單元。內(nèi)核可以設(shè)置一個(gè)或以上,通過(guò)調(diào)整內(nèi)核參數(shù)來(lái)進(jìn)行相似文本聚類。
存儲(chǔ)器可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM),存儲(chǔ)器包括至少一個(gè)存儲(chǔ)芯片。
本申請(qǐng)還提供了一種計(jì)算機(jī)程序產(chǎn)品,當(dāng)在數(shù)據(jù)處理設(shè)備上執(zhí)行時(shí),適于執(zhí)行初始化有如下方法步驟的程序代碼:通過(guò)第一預(yù)設(shè)算法對(duì)多個(gè)文本進(jìn)行第一級(jí)聚類,其中,第一預(yù)設(shè)算法為低于第一預(yù)設(shè)位數(shù)的SimHash算法,通過(guò)第一預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第一預(yù)設(shè)算法判定為不相似的文本屬于不同類別;以及通過(guò)第二預(yù)設(shè)算法分別對(duì)第一級(jí)聚類得到的各個(gè)類別中的文本進(jìn)行第二級(jí)聚類,其中,第二預(yù)設(shè)算法不同于第一預(yù)設(shè)算法,通過(guò)第二預(yù)設(shè)算法判定為相似的文本屬于同一類別,通過(guò)第二預(yù)設(shè)算法判定為不相似的文本屬于不同類別。
上述本申請(qǐng)實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
在本申請(qǐng)的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述的部分,可以參見(jiàn)其他實(shí)施例的相關(guān)描述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過(guò)其它 的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,可以為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本申請(qǐng)各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、移動(dòng)硬盤(pán)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述僅是本申請(qǐng)的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本申請(qǐng)?jiān)淼那疤嵯拢€可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本申請(qǐng)的保護(hù)范圍。