(已實現)相似性到大資料尋找之Mysql 文章匹配的一些思路與提高查詢速度

來源:互聯網
上載者:User

標籤:

   需求,最近實現了文章的原創度檢測功能,處理思路一是分詞之後做搜尋引擎匹配飄紅,另一方面是量化片語,按文章、段落、句子做資料庫查詢,功能基本滿足實際需求。

接下來,還需要在海量大資料中快速的尋找到與一句或者一段話最相關的文章、段落。

上一篇隨筆裡記錄有當時的一些想法,今天下午按想法具體實現並測試了一次,速度比直接分組查詢肯定快了很多很多,回顧下我的實現步驟:

  壓縮"語料庫,即提取特徵詞或詞頻,做量化處理之後以“列向量”形式儲存到資料庫;然後按前N組詞拼為向量組,以供查詢使用,即組合為1到N字的組合,量化後以“行向量”形式儲存到資料庫(目前是用MYSQL),計算和查詢相似性的時候先提取特徵,然後量化,再查詢各Long型數值欄位,速度應該會較一般查詢要快一些。

應用舉例:[下午實現了具體想法,目前系統正在處理資料中,預計會在八千萬行的資料集,相信查詢速度應該還可以]

        【查詢測試】查詢以下特徵

            Dictionary<string, int> words = new Dictionary<string, int>();            words.Add("五筆", 1);            words.Add("拼音", 1);            words.Add("筆畫", 1);            words.Add("其它", 1);            words.Add("英盤", 1);            words.Add("美盤", 1);            words.Add("法盤", 1);            //List<Dictionary<int, long>> WordList = new List<Dictionary<int, long>>();            //for (int i = 0; i < 15; i++)            //{            //    WordList.Add(GetWordSecurity(words, i + 1));               //}            //直觀看資料            Dictionary<int, long> R1 = GetWordSecurity(words, 1);            Dictionary<int, long> R2 = GetWordSecurity(words, 2);            Dictionary<int, long> R3 = GetWordSecurity(words, 3);            Dictionary<int, long> R4 = GetWordSecurity(words, 4);            Dictionary<int, long> R5 = GetWordSecurity(words, 5);            Dictionary<int, long> R6 = GetWordSecurity(words, 6);            Dictionary<int, long> R7 = GetWordSecurity(words, 7);            Dictionary<int, long> R8 = GetWordSecurity(words, 8);            Dictionary<int, long> R9 = GetWordSecurity(words, 9);            Dictionary<int, long> R10 = GetWordSecurity(words, 10);            Dictionary<int, long> R11 = GetWordSecurity(words, 11);            Dictionary<int, long> R12 = GetWordSecurity(words, 12);            Dictionary<int, long> R13 = GetWordSecurity(words, 13);            Dictionary<int, long> R14 = GetWordSecurity(words, 14);

 

  【量化資料】我選的是MD5->Long做量化

五筆 -8683246507546018072拼音 5720075168044685354筆畫 6444854990336207024其它 -4797408270696495584英盤 -1741849883950345011美盤 4116094244106799890法盤 5071717547464226258

 


      【查詢】 根據實際需求(即相關度要求)僅僅只需要取以下列表中的一個值做為查詢條件。即,通過分詞-做詞行向量排列,特徵列向量排列將文章映射成ID,這樣我們

就可以通過 Select .. From T Where Long1= Value 實現文章相關度的查詢【根據相關度要求可隨時改變查詢欄位LongN】

   二字詞   Dictionary<int, long> R1 = GetWordSecurity(words, 1);+  [0] {[1, -2963171339501332718]} System.Collections.Generic.KeyValuePair<int,long>+  [1] {[2, -2238391517209811048]} System.Collections.Generic.KeyValuePair<int,long>+  [2] {[3, 4966089295467037960]} System.Collections.Generic.KeyValuePair<int,long>+  [3] {[4, -6281813915328659238]} System.Collections.Generic.KeyValuePair<int,long>+  [4] {[5, 922666897348189770]} System.Collections.Generic.KeyValuePair<int,long>+  [5] {[6, 3978225284094340343]} System.Collections.Generic.KeyValuePair<int,long>+  [6] {[7, -8610574661558066372]} System.Collections.Generic.KeyValuePair<int,long>Dictionary<int, long> R2 = GetWordSecurity(words, 2);

 

 以上測試在今天下午全部完成編碼及測試,現在我的系統正在做資料抓取和量化處理,初步預計資料集八千萬行左右,做了好幾年程式,這是咱第一次處理超百萬行資料呢。
       

(已實現)相似性到大資料尋找之Mysql 文章匹配的一些思路與提高查詢速度

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.