發表文章

目前顯示的是 2017的文章

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那邊修改)。

錯別字檢查系統-模板模型(Error words with Template Module)

圖片
參考: Wu, Shih-Hung, et al. "Reducing the false alarm rate of Chinese character error detection and correction."  Proceedings of CIPS-SIGHAN joint conference on chinese language processing (CLP 2010) . 2010. 今天要介紹如何建立錯別字偵測系統的其中一種方法,另外還有統計的方法可以實作,下次再介紹,這篇內容相對上面學術文章簡單,但更易實作。 其偵錯邏輯如圖 這流程有幾個點要解決。 1.斷詞 2.偵測模板的建立 3.比對邏輯 以下依序說明 1.斷詞 斷詞可用open source的斷詞器,結巴等等都可以,但是需經過修改,要確保字典內的詞彙都是正字詞彙,也就是正確字,因此結巴可能就需要把簡體字拿掉,或者你要認為簡體字為正確字也可以XD,不過在產生偵測模板時,就會有大量的正字詞彙,因此用正字詞彙取代到斷詞字典即可。 2.偵測模板 偵測模板可把她想成比對的模板,最花工就在這步驟,因此有一些半自動的方法可以解決。 先做一些名詞解釋 正反面語料庫 正面詞彙:齊天大聖、 錄音機   反面詞彙:齊天大勝、路音機 即是包含正確字與大量錯字的詞庫,用來比對用,這邊表示用人工建立。 混淆字集 一個正確字他可能會寫成的別字集合,包含近音、近行 例如: "門"的混淆字 近音:們、捫 近行:悶、們、燜 偵測模板 概念與正反面語料庫相同,只是用電腦建立。 那就來講怎麼見偵測模板 1.輸入字典用字與常用字,與確保是正確用字 2.利用混淆字集來創造所有可能反字 3.加入混淆模板 例如 正字:門    正面用語:開門、門簾           混淆字集:們、悶       反面用語:開們、們簾; 開悶、悶簾 比對邏輯 斷詞後,同一句的句字若有完整的詞就拿掉,表示斷詞已認識他是正確的字,剩下的不認識字若...

2017年12月股票筆記

圖片
這周末閒來無事,稍微研究一下是否有好標的,順便紀錄一下最近績效。 12月大盤盤整,10800到10400左右,蘋概股大量回檔,手上持股分別是榮化、中鋼、台新金、中信金。(照圖片排序) 這一兩個月泰昇-KY與華孚出掉了,大概賺了三千,華孚說來可惜半年前一度很看好,但EPS都不是很漂亮,抱的不夠久,出掉沒多久,特斯拉的消息一出來又漲了一波,不過有賺就好,一個消息就可以漲成這樣,炒股性質偏高。 投資與尋找標的的理念還是沒變,中長期投資為主,分析主要還是注重EPS、本益比、歷年股利、年營收成長、財報內容與產業穩定性等基本面。 金融股本來就是眾人眼中的定存股,把部分水位放在金融股,從中挑認為CP值較高的,用本益比與股利分析;中鋼持股一年多了買在相對低點,近期不賣;榮化10月多澳洲回國注意到,基本面很好,股利也還可以,12月剛好有一些利多消息,賺了一波,暫時續抱,若本益比太高考慮獲利了解。 周末發現的標的,雖然說不是特好,但依我的標準可列入觀察,看這波大盤回檔是否有便宜可撿。 汽車工業 中華車2204 股價25.55 資產股,本益比低、股利也還不錯、獲利與去年持平。 主要產品為三菱、商用小貨車,國內商用小貨車幾乎被他吃掉,但汽車產業的未來難以預期,若再便宜一點可考慮買進。 資訊服務業 國眾5410 股價13.35 本益比低、股利不錯,但是上櫃,非市場前三。 精誠6214 股價57.7 資訊服務業龍頭,本益比有點高,但發放股利非常大方且穩定,需要研究為甚麼,但員工福利好像不是很好,不重視人才不知會不會影響未來發展,會續跌考慮可接。 點出這三檔,但都沒有比我當初注意到榮化時喜歡,列為觀察股。

搜尋引擎排名演算法介紹-Okapi BM25(Ranking Function of Search Engines)

圖片
BM25是一個可以計算詞彙與文章間關聯度的一個演算法,當下個keyword就可以用這個關鍵字與所有文章算關聯度,就可依關聯度來做排名。 應此相關可應用於文章排名、文件推薦系統等等,接下來就簡單介紹此演算法。 更詳細可參考wiki: https://en.wikipedia.org/wiki/Okapi_BM25 k _ 1,b : 調節參數 q _ i : 關鍵詞 D : 文章 f( q _ i ,D) : 此關鍵詞在此篇文章的出現次數 | D | : 此文章長度 avgdl : 所有文章平均長度 〖 IDF(q 〗_ i) : 此關鍵詞共在幾篇文章出現 之 倒數 用白話簡單翻譯就是 與關鍵詞在 此篇文章出現頻率 為 正相關 ,與關鍵字在其 他文章出現次數 為 負相關 ,這概念跟TF-IDF很像。 但比較不同他把文章長度加入為考量因素, 一樣關鍵字詞頻較長文章重要度會低於較短文章 ,另外他還加入兩個調節參數,詳細參數設定可參考wiki。

OpenXML應用-抓取Word中特定表格與句子,轉成String型別(Find special table and paragraph in word,and convert to String type)

圖片
本文參考: https://stackoverflow.com/questions/45466325/how-to-read-values-from-a-table-in-a-word-doc-using-c-sharp 還記得之前介紹" OpenXML介紹與應用-保留word特定表格與句子顯示在網頁上(OpenXML keep special(keyword) table and paragraph) " ,由於微軟的OpenXmlPowerTools品質不穩定,有些word檔就是轉譯失敗,但又是必要的需求,只好動手自己刻。 需求:抓到word中有出現特定關鍵字的表格與句子(且要包含數字),留下來展示在網頁上。 Step1:將你的word檔案打開,用MemoryStream讀,讀到後再用WordprocessingDocument打開她。 using (MemoryStream memoryStream = new MemoryStream())         {                               memoryStream.Write((byte[])Session["FileUpload1.FileBytes"], 0,                                 (int)Session["FileUpload1.FileBytes.Length"]);            using (WordprocessingDocument wDoc = WordprocessingDocument.Open(memoryStream, true))                 ...

回高雄20171118~20171120(Local Food in Hometown, Kaohsiung)

圖片
父親的香蕉園 快年底了休假還有兩天多,也很久沒回高雄,索性就請了星期一。 2017/11/18(六) 周六凌晨五點多開始開,一路上沒有什麼車輛,順便試了定速駕駛,習慣後非常輕鬆一路直行到了西螺服務區,下車小解後,繼續上路,到了台南系統車輛開始變多,周六還要上班真辛苦XD 到了梓官,先吃從小吃到大的早餐店,吃完後洗一下車變去百元理髮修剪,中午到岡山吃銘記,當地蠻有名氣的小吃店。 銘記: https://www.facebook.com/pages/%E9%8A%98%E8%A8%98%E7%AD%92%E4%BB%94%E7%B1%B3%E7%B3%95/142144595852449 吃完後回家補個眠,下午到了梓官菜市場買點下午茶來吃。吃完後到梓官國中閒晃一下,晚餐跟舅舅一家人到岡山吃酸菜白肉鍋,個人對酸菜白肉鍋沒有特別的愛好,但吃起來是蠻道地的沒錯。 東北酸菜白肉鍋: http://htt0828.pixnet.net/blog/post/52078902-%E5%BC%B7%E5%8A%9B%E6%8E%A8%E8%96%A6%EF%BD%9E%E5%B2%A1%E5%B1%B1%EF%BC%9A%E6%9D%B1%E5%8C%97%E9%85%B8%E8%8F%9C%E7%99%BD%E8%82%89%E9%8D%8B 吃飽後休息會兒,開車前往大岡山看夜景,山上氣溫稍冷,年輕人配杯熱飲,饕客泡著好茶,夜景則可看到高雄與台南的燈火通明,好愜意~ 大岡山泡茶的店家: https://www.facebook.com/relax0815/ 2017/11/18(日) 周日起了個早,一家人去橋頭菜市場吃中式早餐,道地的南部早餐就是要吃滷肉飯配司目魚湯品阿,在煎個魚腸,魚腸香又酥灑點白胡椒,太棒了。 早餐: https://www.facebook.com/amd5200/ 吃飽後,去義大Outlet Mall買了條褲子,話說上班後,錢都不會想花在治裝上面,就那幾套穿去上班XD,回來後吃點分量小的河粉,這家越南料理比新竹花蓮吃過的都好吃,但好像不該拿新竹來比XD 越南料理: http://chengyutso.pixnet.net/blog/post/9411175-%E6%A9%...

ASP.NET - Target Framework 屬性_Server Compiler error (Can't find method but you have definition)

圖片
關於此屬性的介紹請參考: https://msdn.microsoft.com/zh-tw/library/system.web.httpruntime.targetframework(v=vs.110).aspx 今天不是要介紹此屬性,而是分享Web.config設定此屬性後發生的怪事。 事情是這樣的,去年9月新人期,接了一個前人專案,我負責寫幾個新的網頁,寫完後在Local、測試區跑都沒問題。但放到上線區,新寫的Method都讀不到,系統說我Class中沒有定義此Method,那時那麼菜的我也不知為什麼,但Mentor也不知為啥,一起測了半天無疾而終。 一年多後的今天,再度碰到這個專案,遇到同樣的問題,這次果斷去問部門裡面技術最強的前輩,他一聽完就發現事情很單純,就是Local跟Server的.Net Framework版本不同,處理方法就是要想辦法讓版本一致,但我想一想我也沒去設定Framework,也不知怎麼去跟Server那邊說這件事,後來想到是不是這個Target Framework屬性有指定特定版本所導致,後來去Web.config那邊把他拿掉,就好了。 說起來也蠻無言的,一年前寫了兩周的網頁,只因為一行不能上線。 後來回想,在開發NLP專案時,也是Local可以跑,但上測試區就不能跑了,錯誤跳下面連結的問題,具體一點XD https://dotblogs.com.tw/coca/2011/03/11/21788 總結:Target Framework還是別亂指定,會發生你根本不知怎找Bug的錯阿。

JavaScript-錨點應用(Scroll Page by Using Anchor)

圖片
說到錨點,最常用的應該是頁面滑到最下面,按個TOP按鈕又回到頁面最上面了吧。 今天我要介紹的應用是: 1.抓出文章關鍵字,加入錨點(add anchor in keyword) 2.在文章內容加入錨點(add anchor in content) 3.點擊關鍵字即滑到內文關鍵字出現之處並改變顏色(click keyword then scroll to keyword in content and highlight keyword ) 很像word的ctrl+f搜尋關鍵字的功能吧。 錨點對應有參考這篇: https://stackoverflow.com/questions/39733954/smooth-scroll-using-jquery 但他是置頂,有修改成置中方便閱讀,接下來就開始介紹怎麼寫吧。 程式後端-找到關鍵字與內文並加上錨點(以C#為例),在本文與highlight的區塊(ASP.NET中我是用Literal)找到關鍵字,對同樣的關鍵字加上同樣的錨點,section+i即是錨點,因此點擊highlight後會呼叫錨點對應與ChangeColor function。 int i = 1; while(i < keyword.count) {      content = content.Replace(sent, "<span id=\"section" + i + "\" class=\" 可以加css\">"                      + keyword + "</span>");       highlight = highlight + "<a href =\"#section" + i + "\" id=\"" + i + "\"                         onclick=\"Chang...

尖石泡湯趣-石上湯屋(Hot Spring in Jianshi, Hsinchu)

圖片
看到這周末會些微變冷的消息,一時興起到某優惠卷平台網訂了溫泉住宿的折價卷,就這樣又再度前往尖石鄉泡湯囉~ 從新竹是開車到尖石可以走國三在接120縣道,不用一小時就能到了,再來就是看你選的溫泉在多深山了XD,因為這次還蠻靠外面的,所以有時間逛一下內灣老街買一點飲料食物帶上去,不然在所謂的溫泉渡假村,到了晚上根本不會想要開下山。 每次經過都很多人的內灣 這次去的溫泉是石上湯屋,房間裡面就有浴池。 他的溫泉是半露天的,泡起來沒有像泰山的那麼滑,但出水蠻快的外面又有涼椅泡累得可以休息,適合秋天來泡,因為冬天半露天太冷了,房間共有ABCD棟,依靠著斜坡建起來的,這次是A棟在最上面要走很遠。 晚上吃小火鍋,白天吃簡單的自助餐與餐廳看出去的風景。 整體而言,石上湯屋是相對好到達的,且浴池跟房間夠大又是半露天的,但也因為半露天要擋住泡湯時的視野不是那麼好,隔音也不是說很好。 周末過的好快,又要上班了... 這一年來已經去過泰安的竹美山閣、錦屏美人湯與石上湯屋,品質當然是竹美最好,但也最貴,而錦屏與石上湯屋相對便宜但就沒那麼高級XD 下次去試試看礁溪的溫泉吧

ASP.NET-TFS完全刪除檔案

圖片
上一篇 VS專案綁TFS ,這篇要講如果不小心增加了不要用的檔案,要如何把他從TFS中完全刪除。 1.開啟命令提示字元(cmd) 2.移動到這個地方,會因為你的安裝位置有點差異 cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE 3. 輸入以下指令 tf destroy 欲刪除檔案的位置 /collection:" 站台位置 " 之後再一直選Y,就可把檔案刪除了。

ASP.NET-Visual Studio建新專案綁TFS教學(Visual Studio new a project and add to Team Foundation Server )

圖片
每次開新專案又要綁TFS常常會搞錯步驟,到後面又要修修改改很麻煩,常常還要去問人,趁這次開新專案時記錄下來,也謝謝幫助過我的人。 就以步驟的方式來說明: 1.建立一個空的網頁(new a empty web site) 2.找到你的專案檔(.sln)與網頁程式所在資料夾放在一起 3.修改專案檔路徑(.sln),可用記事本打開來修改。根據你檔案位置修改,因為現在同層,因此把前面的相對路徑拿掉,只要有路徑的都要改 4. 若你本機位置與TFS站台已經有對應,選擇add a item or folder把資料夾加進去,把剛剛的專案加進去,記住.vs這個資料夾不要加,這是你本機的東西,以後若別人取會無法開專案 5.牽進去之後,記得要跟TFS作連結,專案檔案旁邊要有個小鎖頭符號才有連結,這樣就綁完成了 點兩下專案並Bind

ASP.NET-解析Json格式(Parse Json with C#)

圖片
如果你接收到一個Json格式的回傳,要怎麼處理呢? 今天分享用C#處理Json格式的其中一種做法,分以下步驟。 假設你的Json長這樣 { "name": "小明", "age": 20, "interest": [ "閱讀", "旅遊" ] } 有數字、字串跟字串陣列 1. 下載Newtonsoft.Json並把他綁進專案中並在要用到的頁面using。         using Newtonsoft.Json; 2. 建立接收類別     public class Sample_Json     {          public string Name { get; set; }          public int Age { get; set; }          public string[] Interest { get; set; }     } 3.在要對Json處理的頁面宣告Class並處理      Sample_Json sam ple  new  Sample_Json();     sam ple  = JsonConvert.DeserializeObject<Sample_Json>(json);     string name = sample.Name;     int age = sample.Age;     string[] interest = sample.Interest; 如上把剛剛宣告的類別拿來接 Newtonsoft.Json 解析後的值就完成了。

外匯投資入門-開戶(Open an account which is Foreign Exchange in Taiwan)

圖片
Sydney Exchange Centre 工作一年多來,投資都只有做台股。鑒於幾個原因,開始把投資管道拓展了📈 1.台股今天已經破了10800,好多值得投資的公司本益比都有點高了。 2.最近台幣好強好厲害,換美元、日幣、英鎊、澳幣等,都比一兩年前便宜好多。 3.更大的股票市場,美股需要有外匯帳戶才能夠買賣。 總結就是:台股高高好可怕、台幣好棒棒、美股好像很有趣等原因決定來開外匯帳戶。 要開外匯帳戶必須要有 1.該銀行的台幣帳戶 2.印章 雙證件 3.開戶最低金額,差不多3000~5000不等吧,看你換啥貨幣,今天換100英鎊要快4千台幣。 再去臨櫃辦理就OK了,非常簡單容易 今天跑去換英鎊,剛好隔壁也有人在辦開戶存美元,大家看到台幣那麼強,都來避險一下了嗎XD 開完戶後就可以用網路銀行操作買賣外匯的動作了,但有限制每天交易時間。 補充一下 其中銀行賣你外匯現鈔是最貴的匯率(較高價賣你) 其次是銀行賣你外匯進戶頭 次便宜的是將戶頭的外匯賣給銀行 將手上現鈔賣給銀行是最便宜的匯率(較低價跟你收) 這也是理所當然,銀行總要賺錢的,所以要投資外匯,除非要半投資半會去那個國家玩(而且還要自行保管真麻煩),不然還是開個外匯帳戶作交易的好。

亂談賽局理論(Game Theory)-賽局形成要素

圖片
當初考研究所,為的是拿個門檻幫助以後就業,也希望能在研究所期間學個資料探勘或網路資通訊的技術好銜接就業。 六月多找教授,發現所剩無幾,算誤打誤撞進去了賽局理論的領域,爬了一下網路資源,發現賽局理論的討論是偏少,且幾乎都著重於企業或策略上的應用,也許未來用到這兩年所學機會也不多,因此就來分享一些賽局的觀念,一來分享二來為生命留點紀錄。 賽局理論早期是由經濟學家在研究的領域,近年來也拓展到許多學科,這兩年所接觸的賽局稱為Algorithmic Game Theory,簡單想他就是用機算機科學(Computer Science),包含電腦計算能力與演算法來解原本傳統經濟學的賽局問題,且衍生出一些新的賽局,也被應用在社群網路上等地方。 今天我們就來談賽局的組成要素就好,要形成一個賽局必須具備三個要素,人、策略與效益(價值)。 人:要有參予者,才有可能形成賽局,除非是精神分裂症,不然一個人玩牌是不是有輸贏的XD 策略:玩牌都要有策略了,賽局也要有策略,每個人都會有自己的策略。 效益:當一場牌完玩,有輸有贏也會給人不同的效益。 以企業的例子來看,兩家競爭廠商就是賽局中的人,各自為了搶訂單會有各自的策略,降低成本、提升良率等等,後來賽局結果出來,企業可能接到訂單或沒接到,而賺錢或虧損的效益。 以數學角度來看,其實賽局領論是應用數學的一個分支,這兩年用數學的形式看他也比較多,因此介紹一些不一樣的。 Let  {\displaystyle (S,f)}  be a game with  {\displaystyle n}  players 一個賽局由S(策略)、F(效益含數)與N個人所組成的。 where  {\displaystyle S_{i}}  is the strategy set for player  {\displaystyle i} ,  {\displaystyle S=S_{1}\times S_{2}\times \dotsb \times S_{n}} 策略集合是由S1到Sn所有人的策略所形成的。   {\displaystyle f(x)=(f_{1}(x),\dotsc ,f_{n}(x))}  is its ...

前端跳出確認訊息,並呼叫Onclick事件(Javascript show confirm message and call Onclick event on ASP.NET)

ASP.NET可以用Onclientclick去觸發確認或提示訊息,但須要使用者去點擊。 但若今天你想要做完某個動作後,由程式直接觸發,就可以參考這篇範例。 .cs protected void sample() {      //do something      string script = "<script language='javascript'>ConfirmDelete();</script>";      ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "送出", script, } 當我們sample method做完後去呼叫前端Javascript去做跳出確認訊息,且呼叫Onclick事件。 JS     <script type="text/javascript">         function ConfirmDelete() {             if (confirm('是否刪除?')) {                 __doPostBack('lbtn_delete', 'OnClick');             }         }     </script>  其中comfirm輸入要跳出的確認字串,若選擇是,會進入doPostBack,裡面輸入linkbutton的ID與事件。 aspx <asp:LinkButton ID="lbtn_delete" runat="server" OnClick="lbtn_delete_Click"></asp:LinkButton>  linkbu...

OpenXML介紹與應用-保留word特定表格與句子顯示在網頁上(OpenXML keep special(keyword) table and paragraph)

Office Open XML OpenXML是微軟處理office的一套工具,OpenXML SDK可以讓程式開發人員在程式中使用OpenXML,這篇以一個小應用介紹。今天我想把整份word檔,只留下有關鍵字的句子與表格,並轉換成Html呈現。 using (MemoryStream memoryStream = new MemoryStream()) {       memoryStream.Write((byte[])"檔案的FileBytes", 0, "檔案的FileBytes長度"]);       //Open and close the WordprocessingML document to make sure       //that the SDK can open it.       using (WordprocessingDocument wDoc = WordprocessingDocument.Open(memoryStream,true))       {                 var body = wDoc.MainDocumentPart.Document.Body;                 MainDocumentPart MDP = wDoc.MainDocumentPart;                 Document Doc = MDP.Document;                 //若word文件中Table中沒含特定文字則刪掉整個Table                 var table = body.Des...

WEB API-用WebClient POST

    protected string WebApi()     {         string result = "";         using (WebClient client = new WebClient())         {             //輸入要post過去的URL與參數             byte[] response =             client.UploadValues("http://xx.xx.x.xxx:xxxx/Index", new NameValueCollection()             {            { "parameter", "我是要POST過去的參數內容" },             });             //將回傳的Byte解碼             result = System.Text.Encoding.UTF8.GetString(response);         }         return result;     } 這段程式碼要應用很簡單,只需輸入要POST的URL以及對應的querystring參數名稱(例子是parameter)和要POST過去的參數內容,最後在解碼Byte就能得到回傳值了。

C# 斷句實作(C# Sentence Segmentation)

這篇實作用C#來針對文章做斷句。斷句其原理很簡單,就是用標點符號來分割句子。 //文章內容 string Content = "文章內容";  //將遇到要斷的標點符號加入到參數list(加入全形半形的逗號、句號等) List<char> parameters = new List<char>(); parameters.Add(','); parameters.Add(','); parameters.Add('!'); parameters.Add('!'); parameters.Add('.'); parameters.Add('。'); parameters.Add('?'); parameters.Add('?'); parameters.Add(';'); parameters.Add(';'); //將文章用參數切割存到string []    這邊就是 斷句結果 了 string[] sentenceList = Content.Split(parameters.ToArray()); //句子去空白等雜訊後存入資料庫 foreach (string s in sentenceList) {         if(s!="" && s.Contains("   ") == false)         {                     sentence.sentence = s;                     toStore();  //存到資料庫          } } 簡單介紹斷句的寫法,也可以把標點符號存在DB,在挑出特定要用的斷句符號,就能避免每次都要寫參數改來改去的狀況。 本段code出自於 杯麵豪兒 之手

卡方檢驗選取特徵詞(Chi Square Test Feature Selection)

圖片
其概念跟IG (Information Gain)有點類似,必須有類別(Class)的概念,再使用卡方檢驗在選取特徵詞時,要先確定兩事件是獨立的,應用在特徵選取這兩個事件分別是某詞的出現與某類別的出現。其公式如下。 t:某詞 N:文章的數量 A:某詞有出現在此文章且某詞類別與此文章類別相等的總和 B:某詞有出現在此文章但某詞類別與此文章類別不相等的總和 C:某詞沒出現在此文章但某詞類別與此文章類別相等的總和 D:某詞沒出現在此文章且某詞類別與此文章類別不相等的總和 經由公式即可算出所有詞的卡方值,說明對原假設的偏離越大,我們越傾向於認為原假設的反面情況是正確的,即卡方值越大表示與此類別越相關,越具有代表性。