發表文章

使用TextRank演算擷取關鍵字(Using TextRank to Extract Keywords)

圖片
若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 本文所提的TextRank演算法是參考  Rada Mihalcea 與 Paul Tarau 在 2004所提出的論文"TextRank: Bringing Order into Texts",而此篇論文被引用的次數有逐年增加的趨勢: TextRank的演算法是在已經產生有權重的圖(Weighted Graph)下進行的,如下圖: 上圖裡,線上的數字(例如  自然 <==5==> 語言  為5)是計算【 自然 ,  語言 】兩個詞再語料中共同出現的次數。假設有下面一段文字: 每天|開心|,|天天|開心|。 那所有詞window size為3之間的共現次數(去除stopwords後再計算)如下表: 然後在使用底下公式不斷地迭代。 公式參數說明: d:阻尼係數,通常設定為0.85。 Out(Vj):連出去的節點(node) In(Vj):連進來的節點 WS(Vi):TextRank分數 Wij:節點之間的權重 在論文"TextRank: Bringing Order into Texts"提供了收斂曲線的圖,約20次左右的迭代就會收斂了,如此就可以找出分數比較高的關鍵字了。 參考資料: [1] TextRank — 文字探勘 — 找出關鍵字 以 八卦版標題為例

桌遊DIY:閃靈快手Geistesblitz

圖片
前言 閃靈快手是一套適合訓練大腦專注力與反應的桌遊,以第一代為例,遊戲的道具有卡片60張與五種物品,分別為:白鬼、綠瓶、藍書、紅椅、灰鼠。那要怎麼製作這一套遊戲呢?底下說明迷你型的閃靈快手製作方式。 準備材料 卡片60張 ==> 筆者是用【白色卡片紙】或【白色名片紙】 紙箱 ==> 用來製作物品用 紅筆、藍筆、黑筆 剪刀一把 物品製作 本例子使用的物品是: 紅圓 、 黑三 、 藍正 準備好後,用剪刀將紙箱剪出 三角形 、 正方形 、 圓形 各一份。 用 黑筆 將 三角形 上色 用 藍筆 將 正方形 上色 用 紅筆 將 圓形 上色 這樣就製作好遊戲的物品了。 卡片製作 選擇下面一個圖案,在一張白色卡片上畫好。依序將60張卡片給畫好,所有卡片盡量圖案與顏色都不一樣。 這樣子就製作好迷你型的閃靈快手囉。 學生DIY成果 有學生畫出不一樣的圖案,我超喜歡的。 課後思考: 1. 有什麼規則來設計此款遊戲? 2. 其他特殊玩法,例如卡片的圖案是國旗的時候,玩家要怎麼做? 3. 在畫卡片的圖案時,有什麼方式可以讓遊戲擴充到五項物品? 心得: 原本想打算直接用五項物品直接做起,最後決定從三項物品做起,因為卡片設計好的話,可以延伸到五項物品再到九項物品等。 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  buy me a coffee . Thank you very much.

Building C++ OpenTLD source code

圖片
本文使用 https://github.com/arthurv/OpenTLD 為基礎。用到的軟體版本如下: Windows 10 Git 2.16.2   CMake 3.12.0 Visual Studio Community 2017 安裝好上述軟體後,開啟 git bash,使用底下指令下載 OpenCV 3.4.1 的 source code: git clone -b 3.4.1 https://github.com/opencv/opencv git clone -b 3.4.1 https://github.com/opencv/opencv_contrib 接著使用CMake產生編譯 OpenCV 3.4.1 的 Visual Studio Community 的專案檔案,此部分可參考 OpenCV 3.2.0 的擴充 Contrib 函式庫如何編譯 與 使用 (Visual Studio) ,確認可以編譯並執行OpenCV3.4.1的範例。之後就可以用這個版本的OpenCV3.4.1來編譯 C++ OpenTLD。因為用Visual Studio Community 2017與OpenCV3.4.1來編譯,需要對原本的程式碼做一些修改,可至 https://github.com/pinglunliao/OpenTLD 下載。使用CMake來產生Visual Studio的專案: OpenCV_DIR要選擇 OpenCV3.4.1,此 資料夾是由前述Visual Studio Community 2017建置(build)出來的 install 資料夾內容 : 接著開啟 TLD 專案: 將OpenTLD\src\ 資料夾下的 PatchGenerator.cpp 加到 tld project裡: 此時就可以建置(build)出執行檔了。在OpenTLD\bin\Debug\ 資料夾下會看到 run_tld.exe 檔案: 可在命令提示字元(cmd)來執行此程式,指令如下: run_tld.exe -p ..\..\parameters.yml -s ..\..\datasets\01_david\david.mpg david...

Matplotlib 中文顯示

圖片
筆者是參考此篇文章:「 解決Python 3 Matplotlib與Seaborn視覺化套件中文顯示問題 」,筆者只記錄和該文章不同的地方。因為筆者在Anaconda 內建了好幾個virtual environment(虛擬環境),於是照著文章內容來設定時,皆無法正確顯示中文字。仔細想一想後,發現筆者需要依照下面兩個步驟來設定才能正常顯示中文字: 1. 修改virtual enviroment 環境的 matplotlibrc 設定檔 筆者是用Windows系統,路徑如下: C:\Users\您的使用者名稱\envs\虛擬環境名稱\Lib\site-packages\matplotlib\mpl-data 筆者用Notepad++開起來修改內容: 2. 刪除.matplotlib快取資料夾 成功。 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  buy me a coffee . Thank you very much.

使用OpenSource打造一個聊天機器人 Part 1:Word2Vec

圖片
最近筆者在尋找NLP的套件時,發現這個 https://github.com/zake7749/Chatbot 的專案,於是將它給git clone下來 筆者是使用VS Code加上python 3.6的版本,所需要的套件有 gensim https://github.com/RaRe-Technologies/gensim fuzzywuzzy https://github.com/seatgeek/fuzzywuzzy BeautifulSoup https://pypi.python.org/pypi/beautifulsoup4 jieba 结巴中文分词 https://github.com/fxsjy/jieba 依照專案的說明,需要先建立訓練好的中文詞向量,此部分筆者參考此篇文章「 以 gensim 訓練中文詞向量 」 取得語料(corpus) 筆者所使用的資料集是 維基百科2018/03/01的文章備份資料 ,而 維基百科的中文資料集在此 。再來git clone 此專案 https://github.com/zake7749/word2vec-tutorial ,使用此專案的程式 py wiki_to_txt.py zhwiki-20180301-pages-articles.xml.bz2 這需要一點時間將文章從xml檔案抽出來。 接著使用 OpenCC ( Windows系統請至此下載 )將所有文章轉成繁體字。 opencc -i wiki_texts.txt -o wiki_zh_tw.txt -c s2tw.json 斷詞並去除停用詞(Stop word) py segment.py 訓練出word2vector的model py train.py 訓練時間在Lenovo ThinkPad T440 Core i7-4500U跑了約五十分鐘。 (註:因為在gensim出現了MemoryError所以筆者將Word2Vector的min_count設為10,也就是忽略出現次數少於10的詞。) 而訓練好的詞向量能做什麼呢?請先看下圖 詞向量的用意是將一個詞轉換成空間上的一個點,以二維空間為例,【雨】、【多雲】、【下雨】、【下雪】這幾個詞的座標...

Python 猜數字遊戲

圖片
之前發過用Eclipse 開發 Android 二到九位數的 ?A?B猜數字遊戲 ,當時的程式碼更新為 Android Studio 版本,弄出如下圖的功能: 而本篇要用 Python + Tkinter 來實作,UI的Layout設計方式如下: Label1 SpinBox1 Label2 Entry1 Button1 Label3 Button2 程式實際執行畫面如下: 程式碼: 此版本為數字可重複,那要如何改成數字不重複的版本呢? 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  buy me a coffee . Thank you very much.

Pygame RPG 遊戲設計:視窗相關

本篇文章說明Pygame處理視窗程式相關的API用法,直接以程式碼的註解說明。 import pygame import os import sys # 設定視窗位置 xPos = 100 yPos = 50 os.environ[ 'SDL_VIDEO_WINDOW_POS' ] = "%d,%d" % (xPos, yPos) pygame.init() # 設定視窗大小 screen_width = 480 screen_height = 480 screen = pygame.display.set_mode((screen_width, screen_height)) # 設定視窗標題 pygame.display.set_caption( 'YunlinSONG PyGame Screen' ) # 設定背景顏色 bgColor = ( 255 , 0 , 0 ) screen.fill(bgColor) # 設定Icon screenIcon = pygame.image.load( 'tree.ico' ) pygame.display.set_icon(screenIcon) # 更新 Screen pygame.display.flip() # 等待接收到關閉視窗的事件訊息 while True : for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() 在Pygame中,可以對視窗Screen做的事情都在pygame.display裡 https://www.pygame.org/docs/ref/display.html 。上述的程式碼裡,可看到要改變式窗的位置時,是設定SDL_VIDEO_WINDOW_POS系統變數,也就是Pygame有些功能沒有提供API。 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  b...