為 PDF、Office 檔案產生文字索引
遇到文件檔全文檢索需求,打算用 SQL Server 全文檢索或 lucent.net實現,無論使用何者都免不了從 Word、Excel、PowerPoint 或 PDF 檔萃取純文字內容建立索引的程序。經簡單評估,使用微軟的 IFilter 介面應是較簡單可行的做法。搜索引擎面對的檔案種類五花八門,不太可能涵蓋各種檔案格式,知道從中取出文字內容的方法,IFilter...
View ArticleOracle 自訂函式查詢加速密技–Scalar Subquery Caching
在 SELECT 指令對欄位執行自訂函式行運算通常很傷效能,但實務上無法完全避免。查詢一萬筆資料代表呼叫自訂函式一萬次,若函式包含資料表查詢,就如同在迴圈裡跑 SQL,是典型的效能殺手,經驗裡也是許多複雜查詢逾時的主因。見識到同事露了一手,簡單加幾個字元一口氣將內含自訂函式的 Oracle SELECT 加速數十倍!...
View Article2017 根除小兒麻痺扶輪社公益路跑
避暑沈寂了大半年,下半年第一場馬拉松登場 - 2017 扶輪社根除小身麻痺公益路跑。(學到新單字 POLIO - 小兒麻痺,目前全球僅存阿富汗及巴基斯坦仍有病例,扶輪社長期致力於讓小兒麻痺從地球絕跡,並可望於今年提前達標)跟觀音山馬一樣從微風運河出發,繞河畔一周近 4 公里再進入河濱。多雲無風,溫度 22...
View Article【茶包射手日記】Win7 + Chrome 才看得到的網頁特殊字元
使用者報案網頁多了一個像 L 的字元,在同事的電腦可重現,但在我的機器卻看不到。進一步測試,發現這個像 L 的字元在同事的 Windows 7 要用 Chrome 才會出現,用 IE 看不到;而在我的 Windows 10 上,不管用 Chrome、IE 還是 Firefox 都看不到。透過 F12 開發者工具鎖定可疑字元,複製貼上到中文編碼解析工具,發現原來是 ASCII 0x03...
View ArticleNotepad++ 7.5 取消預設安裝 Plugin Manager
在新安裝的 Notepad++找不到 Plugin Manager 可用,先前遇過安裝 64bit 版本有些 Plugin(插件) 無法使用,但確定我裝的是 32bit 版本沒錯,所以是哪邊出了問題? (什麼? 你沒聽過 Notepad++,快安裝它取代記事本 Notepad 吧! 好用豈止十倍? 而且還是台灣開發者的開放原始碼專案,舉世聞名獲獎無數,又一項台灣之光! 維基百科) Release...
View Article使用 Open XML SDK 在 Word 插入圖片
客戶提了需求,套表應用想在文件範本的特定位置插入圖片。花了點時間研究如何用 OpenXML SDK 實現,以下是我的筆記。Word docx 其實是一個 ZIP 檔,文件主體是一份 XML。如果你有興趣研究,可以將 docx 更名成 zip 解壓縮(或在 docx 按右鍵選單直接用 7-Zip 解開),其中 word 資料夾有一個 document.xml,打開它會發現 Word 文件是由一堆...
View ArticleMemoryStream 不可擴展錯誤
記錄自己遇到的蠢問題一枚。抽象類別 Stream 常被當成輸入輸出參數 ,如此資料可以來自檔案、網路、記憶體或使用者自訂來源,還可套用裝飾者模式(Decorator Pattern)壓縮加密一次完成,提供強大彈性。實務上我常應用的情境是 ClosedXML/OpenXML SDK 之類原本要讀寫 Excel、Word 檔案的場合,函式接受檔案路徑或 Stream...
View Article全文檢索筆記 - Lucene.Net (1)
網站專案的規格提到了網站內容的全文檢索,不要求比美 Google 的速度與精準度,提供最基本的關鍵字查詢就成。陸續評估了一些解決方案,整理成筆記備忘兼分享。談到在 .NET 做全文檢索,不能不提 Lucene.Net這個開源全文檢索引擎!如果你對 Lucene.Net 很陌生,推薦 CSDN 有篇不錯的入門指引: 使用Lucene.Net实现全文检索。剛開始接觸 Lucene.Net...
View Article全文檢索筆記 - Lucene.Net (2) 盤古分詞
前一篇筆記談完 Lucene.Net 術語與基本觀念,感覺用盤古中文分詞器是不錯的主意。先來個最簡單的「盤古中文分詞->建立索引->查詢關鍵字」 Lucene.Net 範例:privatestaticstring IndexPath = "E:\\LuceneIndex";publicstaticvoid SimpleDemo(){//指定索引資料儲存目錄 var fsDir =...
View Article全文檢索筆記 - Lucene.Net (3) 自動分詞 vs 詞庫分詞
前篇筆記試用了盤古分詞器跟 StadnardAnalyzer,繼續研究其他分詞器選擇。 英文能依據空白快速精準分詞,中文沒這麼幸運,必須借助演算法,邏輯複雜許多。中文分詞主要有兩個方向: 第一種是自動分詞,依循固定規則自動切分,例如:...
View Article全文檢索筆記 – Lucent.Net (4) 詞庫校正
體會過自動分詞(一元分詞、二元分詞)與詞庫分詞的特性差異,但是到目前為止有個問題一直被忽略,我測試用的詞庫直接下載自網路,內容是簡體中文,拆解精準度大有問題。以 CWSharp 詞庫分詞為例,使用 Github 下載的 cwsharp.dawg 詞庫檔分析這句中文「競選活動已日趨白熱化,參選人莫不全力尋求廠商支援,其中以鄭少秋勝算最大。」,使用 Luke.net...
View ArticleChrome 網頁中文變醜之謎
我習慣將 Chrome 標準字型設成思源黑體字型, 除非網頁硬將 font-family 指定成細明體(例如: Mobile01),換了字型讓網頁質感變好,比新細明體賞心悅目許多。Pocket是我慣用的稍後再讀服務,在 FB 或爬文時看到不急著看但值得花時間讀的相關文章,我會先丟進 Queue 裡收藏,有空再讀。在使用 Pocket 網頁介面閱讀文章時我注意到一件事 –...
View Article【茶包射手日記】網頁在某支手機無法使用
同事貢獻新鮮茶包一枚。查到最後發現是低級錯誤,但念在用電話跟 LINE 遠端偵錯耗了三個小時,值得記錄並列為日後問題排除參考。最初的報案內容是某位使用者剛換了 iPhone 8...
View Article使用 CSS 實現標題單行置中多行靠左
跟同事討論到一個需求,要在顯示文章的網頁實現「標題只有一行時置中顯示;若文字較多折行時則靠左對齊」的效果。起初程序員大腦想到的做法是用 JavaScript 依文字長度動態調整 text-align 樣式,但由於折行與否是瀏覽器依字型大小、容器寬度自行裁量,難以依據字數直接推算,於是我開始揣摩由文字元素高度偵測行數的雞鳴狗盜招術...爬文後才發現我把事情想得太複雜了,這個需求用 CSS...
View Article筆記:比特幣挖礦在挖什麼?
區塊鏈跟比特幣最近熱到發燙,沒幻想過靠它致富(甚至覺得仰賴鉅量能源運作的虛擬貨幣很不環保),倒是對其原理奧義充滿興趣。先前看過不少深淺文章,限於慧根,對其運作原理仍一知半解,知道所謂礦工挖礦類似暴力破解雜湊(Hash)函式,對為什麼驗證交易真實性會扯上破解雜湊值毫無概念。今天看完一部介紹短片(其實不算短,26分20秒)豁然開朗,欣喜之餘推薦給跟我一樣有興趣了解比特幣挖礦在挖什麼碗粿的同學:(記得開中...
View Article2017 觀音山馬
山路跑滿跑好的小而美觀音山馬,連續第三年。(2016、2015)氣象預報週五放晴一天,週末兩日又再陰雨濕冷。週六一早雨勢不小,心想不妙,今年「跑馬總有好天氣」運勢已劃上句點了嗎?週日一早起床,啊哈! 雨停了,感謝老天。七點才起跑不用摸黑早起真好,六點半抵達微風運河,會場跟上一場根除小兒麻痺扶輪社公益路跑相同,只是今天有硬斗的山路等著我......
View Article我的 Windows 10 倉頡中文輸入筆記
使用倉頡輸入超過二十年,當年升級 Windows 8 時最震驚的莫過於「新倉頡輸入法」被移除,回頭改用必須選字的「倉頡輸入法」內心有萬頭羚羊狂奔。(但是另外也有很多人因為必須選字的「ㄅ半」注音輸入被移除哀嚎;輸入法這玩意跟信仰一樣,大家各有所愛且難以撼動)Windows 8 時代要裝回新倉頡跟ㄅ半很麻煩,還需要複製安裝輸入法檔案(參考: 如何在 Windows 8 中新增注音...
View Article【茶包射手筆記】Chrome 開發者工具看不到 Form Data
使用 Chrom F12 開發者工具偵察 Web Form 送回內容,正常情況應如下圖所示,Content-Type 為 application/x-www-form-urlencoded,Request Headers 下方應有一區 Form Data 可檢視 Post 送回內容:我所偵察的 ASP.NET 網頁,遇特定條件會透過 Resonse.Redirect() 轉址,此時 Response...
View Article【茶包射手日記】Notepad 改 config 後程式掛點
倉頡輸入筆記文網友 s793016 留言提到 PRIME(中州韻輸入法) 內含倉頡輸入,簡單試用挺驚豔的(心得容後再寫),不過有個問題:必須新增簡體中文語系才能用,解法是修改 ime.json 檔將語系改為 zh-TW 重新註冊 PIMETextService.dll (參考: 在 Windows 10 下安裝最新版的 PRIME 中州韻輸入法方法 - Hiraku Dev)。修改 Program...
View ArticleC# 小技巧 - 不必再靠 switch case 副檔名決定 ContentType 囉
由 ASP.NET 伺服器端傳回檔案內容,需指定適當的 ContentType,瀏覽器才會將其視為圖檔、HTML、CSS 或 JavaScript 處理。過去我都是土法煉鋼,取得副檔名再用 switch … case 針對已知檔案種類列舉對應 ContentType,像這樣:string contentType = "";switch...
View Article