1. 程式人生 > >用集算器實現文字比對

用集算器實現文字比對

       控制檯命令、JAVA、python、perl都可以進行簡單的文字比對,但這些工具不擅長集合運算、結構化運算,編寫多執行緒程式碼較複雜,處理多欄位對比、大檔案對比、異構檔案對比等情況時很繁瑣。

       免費的集算器支援集合運算、遊標運算、結構化運算,簡化了多執行緒程式碼,可以彌補上述不足。集算器應用簡單,支援獨立使用、控制檯執行.

下面用若干例子說明集算器實現檔案對比的過程。

找到兩個檔案相同的列值

有兩個檔案:f1.txt和f2.txt,都有Name和Dept這兩個列,第一行是列名,現在需要在這兩個檔案裡找到相同的Name。部分資料如下:

       檔案f1.txt:


用import函式將檔案讀入記憶體,再用函式isect進行交集運算。預設的分隔符是tab。@t表示將第一行讀為列名,後續的計算就可以直接用Name和Dept來引用相應的列,如果第一行不是列名,則應當用_1和_2這種預設列名來引用。

函式isect等價於交集運算子,程式碼可寫作:A1.(Name) ^ B1.(Name) 。

倫理片http://www.dotdy.com/


結果如下:


 

引申:

<!--[if !supportLists]-->1.           1、用交集運算可找到相同的欄位值,類似的還有並集、差集、合集。

       找到f1.txt和f2.txt共同的Name(合併重複值),可用函式union或並集運算子”&”,結果如下:


 

找到在f1.txt但不在f2.txt的Name,可用函式diff或差集運算子”\”,結果如下:



 

       將f1.txt和f2.txt中的Name合併起來,允許重複,可用函式conj或和集運算子”|”,結果如下:

<!--[if !supportLists]-->1.  2       2、進行整行對比時,可用@ts將檔案讀為字串集合。如下:



 

找到CSV中修改過的記錄

         old.csv是原始檔案,new.csv是對old.csv進行增刪改操作後的檔案,兩者的邏輯主鍵是userName和date,需要找出old.csv檔案中哪些記錄被修改過。

         部分資料如下:



 

       可以看到new.csv中的第2、3行是新增的記錄,第4行是修改的記錄,old.csv中第3行是刪除的記錄。

         集算器程式碼:

 

       以逗號為分隔符讀入檔案,將資料按照關鍵字排序。之後先求出新增的記錄(主鍵不同),存在變數new中,再找到old.txt和new.txt有差異的記錄(任意欄位不同),存在變數diff中,最後計算diff和new的差集,也就是被修改過的記錄(主鍵相同,其他欄位不同)。結果如下:

 

       引申:被刪除的記錄可以這樣計算:[A2,B2][email protected](userName,date)

找到兩個大檔案相同的行

       檔案file1.txt和file2.txt儲存著大量的字串,找出兩者共同的行資料(交集)。部分資料如下:

 

集算器程式碼:


 

       函式cursor以遊標形式開啟檔案,並不會將資料全部讀入記憶體。預設以tab為列分割符讀入全部的欄位,自動命名為_1、_2、_3…_n。函式sortx可對遊標進行排序,函式merge可對有序資料進行歸併計算,@x表示對遊標歸併,@i表示歸併結果為交集。函式export可將遊標寫入檔案,結果如下:

C:\Windows\System32\0409

C:\Windows\System32\2052\VSJitDebuggerUI.dll

C:\Windows\System32\2hps.ico

C:\Windows\System32\ACCTRES.dll

C:\Windows\System32\ARP.EXE

引申:函式merge使用@i時表示交集,使用@u表示並集,使用@d表示差集,預設為歸併,即將兩個檔案按字元順序進行合併,並允許重複。

一大一小檔案比較

檔案File1.txt體積較大,但file2.txt可讀入記憶體,現在需要找到兩者相同的行。

集算器程式碼如下:


 

可以將小檔案讀入記憶體,再用Hash查詢的方法來進行集合運算,這樣可以顯著提高效率。函式primary可設定主鍵,index可建立hash索引。函式find可用來查詢出遊標A1和B1相同的資料,即求交集。

引申:求差集可將A3程式碼寫作=A1.select(!B1.find(~._1))

求並集可先計算出file1和file2的差集,再和file2做合併:



 

用平行計算提高檔案比較的效能

前面的演算法是序列,改成並行可以進一步提高效能,具體做法是用多個執行緒並行讀取檔案,每個執行緒都用遊標訪問檔案的一部分,並同時進行集合計算,最後再將每個遊標的結果合併。

在相同的硬體環境下對2.77G大檔案和39.93M的小檔案進行測試,序列時平均耗時85秒,並行時平均耗時47秒,效能提高接近一倍。由於集合運算的複雜度較小,瓶頸會產生在硬碟讀取上,如果進一步加大運算的複雜度,效能提升的幅度將會更大。

         集算器平行計算的程式碼如下:


 

       將檔案分為4段,生成4個遊標同時計算,計算完成後合併遊標。

      分段數量不宜過多,一般應該等於系統並行數量,否則會排隊等待。並行數量可以在配置檔案中設定。函式cursor使用了選項@z,這表示將檔案分段,用遊標取其中的某一段。之所以是“大致分”,是因為精確分會出現半行資料的情況,而集算器會去頭補位,自動取出整行資料。

異構檔案比較

影音先鋒電影http://www.iskdy.com/

       Data.txt是tab分隔的文字,共有6個欄位,其中here欄位是分號分隔的字串。檔案list是單列資料。現在要比較兩個檔案,如果某條記錄的here欄位拆分後和List.txt中的任意一行匹配,則將這條記錄輸出到result.txt中。

      源資料如下:



 

       集算器程式碼:



 

       程式碼中函式select可進行查詢,函式array可拆分字串,”^”表示求交集,”[]”表示空集。

         結果如下:



 

根據HTML排除字串列表

         找出列表tagList裡哪些字串不在檔案a.html中。TagList="Marketing","sales","human resource","Finance","R&D","commerce"。a.html如下:



相關推薦

實現文字

       控制檯命令、JAVA、python、perl都可以進行簡單的文字比對,但這些工具不擅長集合運算、結構化運算,編寫多執行緒程式碼較複雜,處理多欄位對比、大檔案對比、異構檔案對比等情況時很繁瑣。        免費的集算器支援集合運算、遊標運算、結構化運算,簡化了多執行緒程式碼,可以彌補上述不足。

基於開源實現圖片進行圖片全圖和局部

== transform col reads img 希望 object 兩個 最新 需要最新源碼,或技術提問,請加QQ群:538327407,由於源碼在不斷完善,會在之後同步到AI開源項目中 一、需求 需要針對藝術品 局部和全圖進行相識度比對,從而識別圖片的真

資料分析它就夠了 | 37 個場景你要

【報表查詢效能】 1. 資料量大或併發多導致的查詢效能低下,BI 介面拖拽響應很慢 通過集算器編寫更為簡單高效的演算法加速計算程序,提升查詢效能 採用集算器可控儲存和索引機制,為 BI(CUBE)提供高速的資料儲存 2.T+0 實時全量查詢報表涉及資料量大,影響生產系統執

資料

看如下圖所示報表:   這個報表從樣式來看,可以看作是一個簡單的網格式報表,統計著各種收支金額,但因為取數複雜,每個格子的資料都來自一個複雜的 sql 資料集,並且涉及十幾個,乃至幾十個資料集,藍色 區域裡每個格子都需要從各自的資料集裡檢索遍歷,查詢與左表頭關聯的記錄。為了方便體

10 行程式碼實現寫詩機器人

可閱讀原文:http://c.raqsoft.com.cn/article/1536756719594?r=alice 集算器不僅有大資料計算,還有詩和遠方。最近看到不少寫詩機器人的新聞,於是嘗試用集算器簡單地實現一個。這個實現真的很簡單,簡單到只有10幾行程式碼,請看實現步驟:  

10 行程式碼,實現寫詩機器人

集算器不僅有大資料計算,還有詩和遠方。最近看到不少寫詩機器人的新聞,於是嘗試用集算器簡單地實現一個。這個實現真的很簡單,簡單到只有10幾行程式碼,請看實現步驟: 1.下載字典和詩詞 從網上找一個用於分詞的字典檔案,裡面記錄著每個中文詞彙的詞性。我從GitHub上找了一

實現記錄合併

  表1(T1)中儲存了單獨的id和name欄位,部分源資料如下:   id    name   1     a   2     b   3     c   4     d   5     e    表2(T2)中儲存了多個id組成的ids欄位,其值如下:

(倉庫版)發布,黑科技獲得戶好評

集群組表 並行列存 數據存儲 數據計算 2018年5月16日,集算器(倉庫版)攜帶多項黑科技正式發布。在發布之前的應用驗證中,倉庫版就已經用實力贏得了用戶的好評。北京銀行用戶在評價倉庫版時表示:在數據分析實踐中,高並發訪問、大數據量計算造成的系統響應時間過長的問題,始終沒有得到很好的解決。集算

DHCP服務實現自動分配地址,不同VLAN進行互通

設置 port continue down res nco dot 5.0 測試 實驗名稱:用DHCP服務器實現自動分配地址,不同VLAN進行互通實驗拓撲:實驗環境:一臺路由器,一臺三層交換機,四臺二層交換,四臺PC分別屬於VLAN10 VLAN20 VLAN30 VLAN

線性分類實現預測鳶尾花的種類(python)

rom dir Coding and func shape 交叉驗證 pri state 這是個人學習時跑的代碼,結果就不貼了,有需要的可以自己運行,僅供參考,有不知道的可以私下交流,有問題也可以聯系我。當然了我也只能提供一點建議,畢竟我也只是初學者 第一個頁面 # -*-

如何實現文字兩端齊?

技術 span 分享圖片 com 輸入 In align image ali 輸入框左側的文字有時候長度不一致 ,但是文字無論左對齊還是右對齊都不好看,如下圖所示: 但是兩端對齊就會和諧很多,如下圖: 實現兩端對齊方只需一行代碼:text-align-last: jus

初體驗

強制 控制臺輸出 有意 包含 根據 main函數 有意義 自動 強烈 1、從經典的Hello, world! 開始先看圖(1):圖(1)新建p1程序文件,在A1格子中輸入=output(“Hello, world!”)。點擊圖(1)中紅圈圈住的三角按鈕,執行p1的代碼,就可

Wings與parasoft c++ test在單元測試例自動生成能力的

RoCE 相同 c++ 比較 關心 分享 多少 自己 ××× 作為一個軟件測試培訓講師,主要側重在白盒測試培訓方面,尤其對C++test比較擅長。最近發現市面上跳出一款Wings工具,據說1分鐘可以自動生成100萬行測試代碼,性能方面大大超越C++ test,就想著抽空來×

css偽類實現文字左右兩邊有橫線的效果

<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta na

CSS中實現文字兩端齊的方法,登陸註冊介面經常用到

在寫登陸或註冊介面時,經常會遇到文字兩端對齊(word中有類似對齊方式)的問題,如下圖: 使用者名稱和密碼並沒有兩端對齊,那麼該怎樣處理 其實只需要兩行CSS程式碼就可以解決: 關鍵兩行是:text-align:justify;  text-align-last

批量隨機鍵值查詢測試

【摘要】 當資料量巨大時,使用大批量隨機鍵值集獲取對應記錄集合,不僅僅考驗資料庫軟體本身,更在於程式設計師對資料的理解!如何在硬體資源有限的情況下將效能發揮到極致?點選:批量隨機鍵值查詢測試,來乾學院一探究竟! 複製摘要 本次測試主要針對集算器組表索引實現的批量鍵值取數效能,並與 Oracl

Python 使用dlib 5行程式碼實現人臉

需要在linux下進行配置(本例是ubuntu),windows坑太多,環境沒有配置成功。 1. 安裝系統元件 $ sudo apt-get update $ sudo apt-get install build-essential cmake

CSS實現文字兩端

最近的專案遇到了這樣的需求:(要求標題部分不管文字多少,都必須兩端對齊) 如下圖: 當時也沒有多想直接使用‘&ensp;’進行代替,畢竟產品同學想快一點看到效果,不敢怠慢!不過到第二個頁面就傻眼了。 如圖: 這很明顯‘&ensp;’已經無法滿足我了,只好上&emsp;。 這裡簡

單層感知實現多個神經元的分類

訓練樣本矩陣: P = [0.1  0.7  0.8  0.8  1.0  0.3  0.0  –0.3  –0.5  –1.5;     1.2  1.8  1.6  0.6  0.8  0.5 

資料分析之37 個場景使用到

可閱讀原文:http://c.raqsoft.com.cn/article/1534732238335?r=alice 慢 1、清單式大報表難以及時呈現,採用資料庫分頁方式翻頁效率很差 集算器將計算和呈現做成兩個非同步執行緒,取數執行緒發出 SQL 將資料快取到本地,然後交給呈現執