# 對於pandas資料框df如果須要依據主鍵文字欄位sentiment,
# 次鍵文字欄位text的長度進行紀錄排序,可參考如下寫法。
def sort_by_two_columns(x): # x 表示某列資料的排序欄位值
# 對於pandas資料框df如果須要依據主鍵文字欄位sentiment,
# 次鍵文字欄位text的長度進行紀錄排序,可參考如下寫法。
def sort_by_two_columns(x): # x 表示某列資料的排序欄位值
傳統一台 Windows 主機若要同時跑 Linux 作業系統,不是要安裝 Cygwin 套件,就是要透過 VirtualBox 等虛擬機軟體安裝 Linux。現在 Windows 的 WSL (Windows Subsystem for Linux) 技術逐漸成熟,可以在 Windows 環境中,啟用 Linux 子系統,方便雙方資料共享,及執行 Linux 程式和指令。以下簡短摘要步驟,說明如何透過 Microsoft Store 微軟商店,安裝 Ubuntu 22.04.1 LTS 作業系統。
1.啟動 Windows 的 Linux 子系統 (WSL) 功能
控制台/程式集/程式和功能: 開啟或關閉 Windows 功能
勾選: Windows 子系統 Linux
2.安裝 Ubuntu 作業系統
Microsoft Store: 找尋安裝 Ubuntu 22.04.1 LTS,建立帳戶myuser
3.啟動 Ubuntu 作業系統終端機
建立桌面捷徑圖示:
目標: C:\Windows\System32\wsl.exe
開始位置: \\wsl$\Ubuntu-22.04\home\myuser
或使用 SearchBox: ubuntu2204
4.安裝 ssh 終端機登入服務,供遠方登入本機之用
4.1.安裝 ssh 服務
WSL終端機執行如下指令:
> sudo apt remove openssh-server
> sudo apt install openssh-server
> sudo service ssh start
4.2.設定 ssh 服務於 Windows 開機時自動啟動
4.2.1. 設定權限,允許不輸入密碼即可啟動服務
WSL終端機執行如下指令
> sudo vim /etc/sudoers
%sudo ALL=NOPASSWD: /usr/sbin/service ssh start
4.2.2. Windows 工作排程器設定如下開機任務
設定工作排程器 (Task Scheduler),開機時自動啟動
Basic Task
Trigger: When the computer starts
Program: C:\Windows\System32\wsl.exe
Argument: sudo /usr/sbin/service ssh start
參考: https://www.howtogeek.com/746532/how-to-launch-cron-automatically-in-wsl-on-windows-10-and-11/
4.3.設定金鑰目錄權限,拷貝遠方客戶的公鑰進來,供客戶登入本機時簽發訊息核對身份之用
WSL終端機執行如下指令
> mkdir ~/.ssh # 家目錄下建立金鑰目錄
> chmod 700 ~/.ssh # chmod 指令只對/根目錄 (wslfs) 有效,對/mnt/c (drvfs)掛載目錄無效
> scp -p user@host:.ssh/*pub . # 拷貝遠方既有.pub公鑰到本機個人金鑰目錄,供身份核對之用
> wsl --set-default-version 2
網路上有關 Weka機器學習 軟體的文字分類範例大部份都是針對英文,以下示範針對繁體中文的作法。
由於繁體中文的標記語料很少,本範例將取自 SnowNLP 釋放的簡體中文標記語料。 SnowNLP 正負情感資料集 共計34,880筆(35k)日常聊天語料,包括負面情感(neg.txt) 18,576筆(19k),正面情感(pos.txt) 16,304筆(16k)。前處理利用 OpenCC 軟體轉換為繁體,再利用 jieba 軟體空格斷詞,存成.csv檔,其中3欄位為原始文字 text, 空格斷詞文字 token_text, 情感判定 sentiment,0表示負面,1表示正面。
用Weka分類軟體讀入.csv檔,利用StringToWordVector過濾器將 token_text 欄位由String型別轉為眾多nominal欄位,以sentiment欄位為預測目標,進行1次性訓練及測試。測試選項: Percent 66% 當訓練集(23k),34%當測集(12k)。
所有分類器都使用預設參數,準確率accuracy,訓練時間training time,測試時間testing time的結果如下,可發覺準確率表現最好為RandomForest分類器。
| SnowNLP | classifiers | accuracy | training time (s) | testing time (s) |
| weka.classifiers.rules | ||||
| ZeroR | 52.80 | 0.03 | 0.44 | |
| OneR | 62.10 | 12.23 | 0.38 | |
| weka.classifiers.trees | ||||
| J48 | 85.00 | 2,694.75 | 0.37 | |
| RandomForest | 93.64 | 459.36 | 8.94 | |
| weka.classifiers.bayes | ||||
| NavieBayesSimple | 8.14 | 5.43 | 7.35 | |
| NaiveBayesMultinominalText | 52.80 | 0.14 | 0.28 | |
| NaiveBayes | 70.60 | 14.10 | 9.77 | |
| NaiveBayesMultinominal | 78.50 | 0.14 | 0.94 | |
| weka.classifiers.functions | ||||
| MLP | 52.80 | 405,797.00 | 83.62 | |
| SimpleLogistic | 81.90 | 1,101.32 | 1.39 | |
| Logistic | 83.00 | 294.00 | 0.86 | |
| SMO | 83.20 | 5,231.83 | 1.94 | |
| weka.classifiers.lazy | ||||
| IB1 | 86.20 | 1.80 | 23,146.80 | |
| IBk | 86.70 | 0.04 | 99.95 | |
因為 NetBeans 某些版本設定其 Output 結果視窗接收字碼為 UTF8,故用 Java 列印中文時若出現亂碼,有兩種強迫輸出UTF8的補救法:
從 NetBeans 左側 Files 頁籤,找到 專案名/nbproject/project.properties 檔案,修改如下欄位值。改專案組態,所有其中程式都適用,較簡便。。
run.jvmargs=-Dstdout.encoding=UTF-8
請在程式首次執行列印指令之前,修改輸出串流編碼為 UTF8 。指令如下。須每支程式都作修正較麻煩。
import java.io.PrintStream;
System.setOut(new PrintStream(System.out, true, "UTF8"));
// 執行上述指令須處理 UnsupportedEncodingException 未支援編碼例外
// 可用 try-catch 結構自己處理例外,或宣告執行該指令的方法丟出(throws)該例外給上一層處理
一般而言,Java 處理編碼分成 3 階段,只有原始碼編譯及執行階段會出現亂碼,狀況如下表所示。
| 階段 (Timing) | 格式 / 載體 | 目的 | 常見問題 |
|---|---|---|---|
| 1. 原始碼編譯階段 (Source Compile) | .java 檔案 |
供開發者撰寫與閱讀 | 編譯時出現 unmappable character 錯誤 |
| 2. 類別檔階段 (Class File) | .class 檔案 |
JVM 執行指令 (Unicode) | 無 (由 Java 內部處理,具備跨平台通用性) |
| 3. 執行階段 (Execution) | Console / Output 視窗 | 供使用者查看執行結果 | 終端機出現 中文亂碼 (Garbled text) |
其中,原始碼編譯階段,由於 Windows 繁中版使用 Big5 編碼,故終端機下使用 javac.exe 編譯器若出現 unmappable character 無法映射字元錯誤,可利用如下選項,通知編譯器選用適當編碼,讀取中文:
執行階段,若想知道輸出串流目前編碼為何,可用如下指令診斷:
System.out.println(System.out.charset()); // 常見為 x-windows-950 (繁中Big5碼) 或 UTF-8
參考: https://stackoverflow.com/questions/53257763/netbeans-9-print-unicode-characters
路由器屬於開放系統互連 (OSI, Open Systems Interconnection) 模型第3層設備,認得IP住址,負責跨網段的封包繞送 (routing)。其繞送依據路由器內的路由表 (routing table),內含依序由緊到鬆的多條 路由 (route),每條路由指明封包去處IP若符合某 目的網段 (destination network),可由路由器何 出口 (exit) 送出,以儘早到達目的地。
路由表的路由分成 靜態路由 (static route),及 動態路由 (dynamic route) 兩種。動態路由須由網域管理者開啟同一套 路由協定 (routing protocol),透過路由器彼此交換路由資訊,收斂 (convergence) 後學得。動態路由好處可自動因應網路拓樸變化,適用於大型網域路由管理,缺點為路由收斂須消耗資源及時間。靜態路由則由路由器管理者設定而得,好處是省下路由學習的資源及時間,缺點是無法自動因應網路拓樸變化,適用於小型網域管理。
路由表最後一條路由稱為 預設路由 (default route),凡是無法匹配路由表前頭路由的去處 IP 住址,皆由此通吃靜態路由決定轉送出口。因此,網域 尾端網段 (stub network) 常將其路由器的預設路由設定為網段對外出口,遇到目的地不在尾端網段內的封包,一律往網段對外出口轉送。
無線區域網路 (WLAN, Wireless Local Area Network) 為 IEEE 802.11 無線通訊標準,使用 2.4 GHz 及 5 GHz 的無線頻道,適合距離約 100 公尺範圍的家庭、辦公室、校園環境之用。WLAN 使用載波感應多重存取與避免碰撞 (CSMA/CA, Carrier Sense Multiple Access/Collision Avoidance) 技術,判斷何時及如何在無線網路上傳送資料。WLAN 提供隨意 (ad hoc),共連 (tethering),基礎設施 (infrastructure)三種通訊模式。基礎設施模式下,眾多客戶設備以無線方式聯結 (associate) 到骨幹存取點 (AP, Access Point),再利用有線骨幹設施通往上游。無線用戶端聯結 AP 存取點過程,可以採用 被動 或 主動掃描(探測)方式。採用被動方式時,AP 須定期廣播發送包含服務區代碼 (SSID, Service Set Identifier)、支援的無線標準、安全組態等服務公告,供用戶端選用。
無線區域網路控制器 (WLC, Wireless Lan Controller) 提供網頁設定畫面,可利用 IEEE 制定的無線存取點控制及部署協定 (CAPWAP, Control And Provisioning of Wireless Access Points),管理多個 AP 存取點和無線區域網路。CAPWAP 協定源自輕量存取點協定 (LWAPP, Lightweight Access Point Protocol),增添了資料片傳輸層安全 (DTLS, Datagram Transport Layer Security) 機制,可建立加密的資料片(UDP, User Datagram Protocol) 通道,於 AP 和 WLC 之間傳送訊息。
動態主機組態協定 (DHCP, Dynamic Host Configuration Protocol) 為一種客戶設備向網段伺服器詢問連網組態的協定。DHCPv4 經過探索,提供,請求,確認四步驟,可為客戶設備提供完整 IPv4 連網組態,包含自己的 IP,遮罩,對外閘道 IP,DNS 伺服器 IP 等資訊。
在 IPv6 環境,主機介面可自動生成鏈路本地住址 (LLA, Link Local Address),但僅供和本地路由器交換訊息,無法對外使用。至於完整 IPv6 連網組態,包含可對外使用的全域單點傳送位址 (GUA, Global Unicast Address),前置碼 (Prefix) 長度,對外閘道,DNS 伺服器等,則須主機接收網際網路控制訊息協定 (ICMPv6, Internet Control Message Protocol) 的路由器公告 (Router Advertisement),依其建議取得。
主機利用無狀態住址自動設定 (SLAAC, StateLess Address Auto-Configuration) 協定可取得 IPv6 GUA 住址。其中,無狀態取得之住址並無統一管理,可分成純 SLAAC 取得法,及 SLAAC 加無狀態 DHCPv6 取得法。有狀態取得之住址受統一管理,即所謂有狀態 DHCPv6 取得法。不管是有狀態或無狀態取得之住址,主機都會利用重複位址偵測 (DAD, Duplicate Address Detection) 機制,確保取得的 IPv6 GUA 唯一,不和網段內其他主機重複。遇網段內無 DHCPv6 伺服器,路由器可開啟 DHCP 轉送代理 (Relay Agent) 功能,提供 DHCP 轉送服務。
首站備援協定 (FHRP, First Hop Redundancy Protocol) 可建立區網對外虛擬閘道,其背後對應多個實體對外閘道,能避免單點故障影響對外連線,提升區網對外可靠性。熱待機路由器協定 (HSRP, Hot Standby Router Protocol) 為思科專屬 FHRP 協定,思科另有閘道負載平衡協定 (GLBP, Gateway Load Balancing Protocol)多提供負載平衡能力。至於開放的 FHPR 協定則有虛擬路由器備援協定 (VRRPv2/v3, Virtual Router Redundancy Protocol)、ICMP 路由器查找協定(IRDP, ICMP Router Discovery Protocol)等。
延伸樹協定(STP, Spanning Tree Protocol)為一種中階交換器功能,允許多部交換器串接而不會形成迴路,造成廣播風暴。其原理為將交換器之間連線形成的圖形拓樸透過學習轉換成樹狀拓樸,讓任兩部交換器之間只有1條路徑相連,避免形成迴路。樹狀結構的學習過程會用到OSI模型第2層的橋接協定資料單元 (BPDU, Bridge Protocol Data Unit) 訊框,彼此交換資料,最後收斂決定:哪部交換器要當根橋接器 (root bridge),各交換器的骨幹埠 (trunk port) 看是要成為連向上游的根連接埠(root port),連向下游的指定連接埠(designated port),或暫時關閉的備用連接埠 (alternate port),大家講好以免形成迴路。
STP協定有諸多改良版本,例如思科專屬的增強型逐個虛擬區網生成樹 (PVST+, Per-VLAN Spanning Tree Plus), Rapid PVST+。另外,亦有公開的IEEE快速生成樹協定 (RSTP, Rapid Spanning Tree Protocol) 提供比 STP 更短的學習收斂時間;IEEE多重生成樹協定 (MSTP, Multiple Spanning Tree Protocol) 則可將多個 VLAN 生成樹 由少數幾個運算個體負責,節省運算資源。
交換器允許設定存取埠 (access port) 啟用 PortFast 加速功能,直接接受終端設備訊框,加快存取速度;亦可設定存取埠啟用 BPDU Guard 防護功能,遇到設備送來BPDU訊框時,關閉該連接埠,避免形成迴路。
虛擬區網 (VLAN, Virtual Local Area Network) 為一種高階交換器 (high-end switch) 功能,其特色包含如下:
另外,虛擬區網 遇不同 VLAN 網段 須要交換資訊時,必須透過 VLAN 網段的對外閘道器 (gateway) 繞送封包。為節省介面成本,常將 路由器區網介面 切割成很多 子介面 (subinterface),每個子介面對應一個 VLAN 網段的對外閘道器。
動態骨幹協定 (DTP, Dynamic Trunking Protocol) 為思科專屬協定,在思科 Catalyst 2960 和 Catalyst 3650 觸媒系列交換器上會自動啟用,依連線雙方的組態匹配,加速連接埠決定要當成 存取埠 或 骨幹埠 使用。
又企業常使用第 3 層交換器 (Layer 3 Switch),其支援硬體式交換,可達到比路由器更高的封包處理速率。在第3層交換器上,設定 VLAN 路由時,不須切割子介面,只要在各虛擬區網介面 (vlan interface) 設定其閘道IP住址,再啟動路由繞送 (ip routing) 功能即可。
企業 (enterprise) 若在區網 (LAN, Local Area Network) 使用第1層 (OSI Model Layer 1) 集線器 (Hub, Repeater, Concentrator) 設備互連,其缺點是整個集線器連線的設備同屬一個踫撞區域 (Collision Domain),任一組網卡佔住頻寬講話,其他網卡就只能旁聽等候,集線器一次只允許一組網卡對談。
企業若在區網使用第2層 (OSI Model Layer 2) 交換器 (Switch, Bridge) 設備互連的好處是,由於交換器會學習 MAC住址表 (Media Access Control Address Table), 記錄每個 MAC 住址曾出現於哪個交換器連接埠出口,因此,若去處 MAC 住址所在的出口不衝突,交換器一次允許多組網卡同時間對談。
如上所述,針對1對1單播訊框 (Unicast Frame),企業若在區網內使用交換器,於收到訊框 (frame) 時,依照其去處 MAC 住址 (Destination MAC Address) 欄位值,決定訊框轉送的連接埠出口,將可提升同時間會談量,達成增加頻寬效果。這效果乍看不錯,但其實是所有第2層交換器設備的基本功能。至於較高階的交換器 (high-end switch),其實還支援延伸樹協定 (STP, Spanning Tree Protocol),及虛擬區網 (VLAN, Virtual Local Area Network) 功能。上述這3種功能有一共通特色,就是皆可以為區網流量 (traffic) 作適當分隔,讓流量儘量只往該去的路線送,不讓不該看的人看到。
🚀 在瀏覽器中直接執行 Java:CheerpJ v3 實作指南 長期以來,Java Applets 因為安全性與插件問題早已退出歷史舞台。但隨著 WebAssembly (Wasm) 技術的成熟,現在網頁安裝如下 CheerpJ v3 套件庫,就可以在瀏覽器中直接呼叫 ...