發表文章

英文拼字檢查(spellcheck)

這篇簡單介紹英文拼字檢查的實作邏輯,最常看到拼字檢查不外乎一些文書處理工具,可以檢查拼錯的英文字,再給予建議的候選字。 處理邏輯可以簡單這樣分 1.過濾 2.比對 3.給予建議 過濾不外乎就是把一些中文字、符號等過濾掉,再來用空白切字,下面提供C#過濾寫法。         Regex rgx = new Regex("[^a-zA-Z]");         string englishContent = rgx.Replace(content, " ");         List<char> parameters = new List<char>();         parameters.Add(' ');         string[] wordList = englishContent.Split(parameters.ToArray());         wordList = wordList.Where(c => c != "" && c.Length>1).ToArray();         return wordList; 再來是比對,需要一個字典,字典上的字確定是對的,網路很多開源的字典可以參考,再來就把剛剛切好的字去跟字典比對,若有在字典出現,系統則認為是對的字,若沒有進入下一步驟。 給予建議字,因為找不到一樣的字,這時就用編輯距離(Edit Distance)來去算跟他最相似的字,給予候選建議字。 後面兩個步驟在實作上建議可以用Trie的樹狀結構來做。

文章切斷落功能C#(paragraph segmentation using C#)

圖片
Hi大家好,好久沒寫網誌分享東西,可能是年初很多會議跟需求要談,沒啥時間來分享,其實最近也研究一些Docker的東西,有空再來分享。 今天想簡單講一下文檔切斷落的功能,你現在有一份Word或PDF等文字檔,你想把它以段落來切可以怎麼做?  切完段落便可做後續的應用,整段落的相似抄襲比對等等的 。 程式如下非常簡單 主要用\r\n(即0D0A)做切割,要注意除了段行符號外,最好前面還有句點,因為PDF再用工具解析成string時,他一行字會自動\r\n,前面兩行在做一下過濾的處理,句點取代是針對英文文章的置換,空白取代是有時候句點後面有空格才有換行符號,做完這處理差不多就大功告成了,最後再用一段的長度篩選一下,避免過短的句子也拿來當段落。 content = content.Replace(".", "。"); content = content.Replace(" ", ""); string[] resultString = Regex.Split(content, "。\r\n", RegexOptions.IgnoreCase); var paragraphs = resultString.Where(x => x.Length >= 30); 注意你必須先用解析工具把word或PDF解析成txt格式,可用Aspone等等工具,大致這樣,下次見。

Azure RMS檔案加密(4)-用Task Scheduler來執行Script

圖片
嗨大家好 這篇要介紹如何運用Windows的工作排程器(task scheduler)來執行Script。 工作排程器長這樣 Step 1打開工作排程器→建立工作 Step 2 建立工作名稱、勾選"不論使用者登入是否都執行" Step 3設定你要多久執行一次、幾點執行等等 Step 4 這邊最重要可參考下圖,新增動作選啟動程式,程式那欄輸"Powershell.exe",新增引數輸-File "script.ps1的路徑" 這樣就OK了,剩下的一堆小設定,大家自己設就好,只要這個設對,他就會進工作排程,定期執行。 好啦,介紹到這邊,蠻少看到Azure RMS的中文技術文章,也幾乎沒看過用PowerShell來用RMS服務做加密的中文介紹,分享給大家,謝謝。

Azure RMS檔案加密(3)-用PowerShell ISE寫script(連接資料庫加密)

圖片
嗨大家好 這篇要來談怎麼用PowerShell ISE來寫腳本、怎麼連資料庫來加密。 可以把他想成PowerShell的IDE,開起來長這樣,右邊還有指令可以參考。 那就不囉嗦了直接來看怎麼連接SQL,我寫了一個function來處理連接SQL,因為PowerShell是.NET Framework所以其實就是ADO.NET的連法。 function SQL {Param ($sqlstring)     $conn = New-Object System.Data.SqlClient.SqlConnection↵     $conn.ConnectionString = "Data Source=SQLEXPRESS;Initial Catalog=test;User ID=sa;Password=123456"     $conn.open()     $cmd = New-Object System.Data.SqlClient.SqlCommand↵     $cmd.connection = $conn     $cmd.commandtext = $sqlstring-f     $os.__SERVER,$env.username,$os.servicepackmajorversion,$reason     $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $cmd     $dataTable = New-Object System.Data.DataTable     $adapter.Fill($dataTable) | Out-Null     $conn.close()     return $dataTable } 把SQL字串當參數丟進commandtext即可,我用DataTable接,最後再回傳DataTable。 接下來分別的DataTable的每個Row去做處理逐筆加密,每個R...

Azure RMS檔案加密(2)-運用PowerShell加密

圖片
大家好 延續 Azure RMS檔案加密(1)-介紹 這篇,我來介紹如何用PowerShell來對檔案做加密。 PowerShell長這樣 Step1 安裝PowerShell與AADRM module、AIP Client 可參考微軟文件: https://docs.microsoft.com/en-us/information-protection/deploy-use/install-powershell AADRM module可以讓您用PowerShell下cmdlets來管理Azure RMS AIP Client: https://docs.microsoft.com/en-us/information-protection/rms-client/aip-client Step2 用RMS administrator權限來取得相關License的值,並建立一個ServicePrincipal帳戶(這台機器需安裝 AADRM module、AIP Client與Azure AD module ) Azure AD module是對Azure AD做管理會用到的一個模組,詳情參考: https://technet.microsoft.com/library/jj151815.aspx#bkmk_installmodule 步驟可參考: https://docs.microsoft.com/zh-tw/powershell/module/AADRM/Connect-AadrmService?view=azureipps 不過非常多我這邊就把必要做的跟大家介紹。 1.連接到Aadrm Service   下" Connect-AadrmService " 2.取得一堆參數 下" Get-AadrmConfiguration " 3.斷掉連線 下" Disconnect-AadrmService " 4.連接到Azure AD 下" Connect-MsolService " 5.建立一個ServicePrincipal帳戶,並把參數記錄下來 下" New-MsolServicePrincipal " 6.把Serv...

Azure RMS檔案加密(1)-介紹

圖片
大家好 Azure RMS是微軟Azure的一個雲端加密服務。 詳細介紹可以看這: https://docs.microsoft.com/zh-tw/information-protection/understand-explore/what-is-azure-rms 他能夠對Office產品、PDF、壓縮檔等做加密,能夠將檔案設定成只有特定人在能執行特定權限,權限包含"檢視"、"編輯"、"列印"等等。 一般用於企業,通常企業有使用其服務,登入office企業帳戶,可直接在office做加密的動作,下圖為word的範例,即可對特定用戶設定權限,但這只侷限於個人對檔案加密。 那假設現在需求是 "由一台Server定期對各種檔案針對不同"檔案擁有者"、"被授權人"、權限來做加密呢?" 這時可以用PowerShell來寫script來對不同檔案做加密。 甚麼是PowerShell? 可以把他想成cmd,但比cmd強大,起源是為了跟UNIX的shell比拚,更詳細介紹可看wiki。 https://zh.wikipedia.org/wiki/Windows_PowerShell 之後三篇將會針對上面那個問題來介紹。

common_table_expression-每天抓N筆資料

圖片
關於CTE介紹請看這: https://docs.microsoft.com/zh-tw/sql/t-sql/queries/with-common-table-expression-transact-sql 可能會覺得CTE跟temp table相似,都拿來暫存資料,但可以參考這個建議,視情況使用。 http://www.dotnettricks.com/learn/sqlserver/difference-between-cte-and-temp-table-and-table-variable 建議有sub-query可以使用CTE,寫起來比較直觀且易讀。 那今天就拿CTE拿抓每日前N筆資料來試試。 ;WITH cte AS (    SELECT *,          ROW_NUMBER() OVER (PARTITION BY convert(varchar(max), date, 111) order by XXX) AS rn    FROM Table ) SELECT * FROM cte WHERE rn < N+1 語法很簡單,是一個有子查詢的語法,可以用CTE來寫,把日期分割當成Row number,變成table,再來在抓row number小於N+1就可以抓到每日N筆資料了,記得你用甚麼當排序就是抓那種排序的前N筆(XXX那邊修改)。