pretty code

顯示具有 AI 標籤的文章。 顯示所有文章
顯示具有 AI 標籤的文章。 顯示所有文章

2025年6月22日 星期日

Vim Regex Pattern by Google Gemini

底下是 Gmini 整理的。 

Vim Regex Pattern 詳細跳脫規則

Vim 的正規表達式語法非常強大,但它的轉義規則與 Perl 或 Python 等語言的標準正規表達式略有不同,尤其是在處理特殊字符時。Vim 將某些特殊字符分為 "魔法" (magic) 和 "非魔法" (nomagic) 兩種模式。

你可以使用不同的前綴來控制正規表達式的魔法模式:

  • \M: 設定為 全魔法 (very magic) 模式。所有的特殊字符都視為魔法,不需要額外轉義。這是最像 Perl/PCRE 的模式。
  • \m: 設定為 魔法 (magic) 模式 (Vim 預設)。大部分特殊字符是魔法的,少數需要轉義。
  • \v: 設定為 極魔法 (very magic) 模式。所有的特殊字符都視為魔法,不需要額外轉義。這是最推薦使用的模式,因為它與常見的正規表達式引擎行為最接近,減少了混淆。
  • \V: 設定為 非魔法 (very nomagic) 模式。所有的特殊字符都視為普通字符,需要轉義才能具備特殊含義。

推薦:始終使用 \v 開頭的正規表達式,它讓你的模式更直觀。

使用 \v (極魔法) 時的常用特殊字符和其含義:

字符說明範例 (\v)匹配範例
.匹配任何單個字符 (換行符除外)\v.imVim, aim
*匹配前一個項目 0 次或多次\vgo*dgod, good, gooood
+匹配前一個項目 1 次或多次\vgo+dgood, gooood (不匹配 god)
?匹配前一個項目 0 次或 1 次\vcolou?rcolor, colour
{n}精確匹配前一個項目 n 次\va{3}aaa
{n,}匹配前一個項目至少 n 次\va{2,}aa, aaa, aaaa
{n,m}匹配前一個項目 n 到 m 次 (包含)\va{2,4}aa, aaa, aaaa
()分組,創建子匹配\v(ab)+ab, abab
``或 (OR) 邏輯`\v(cat
[]字符集,匹配方括號內的任何一個字符\v[abc]a, b, c
[^]負向字符集,匹配方括號內之外的任何一個字符\v[^aeiou]匹配任何非元音字母
^匹配行的開頭 (當它是模式的第一個字符時)\v^The匹配以 "The" 開頭的行
$匹配行的結尾 (當它是模式的最後一個字符時)\vend$匹配以 "end" 結尾的行
\b匹配單字邊界 (word boundary)\v\bword\b精確匹配單字 "word"
\<匹配單字的開頭\v\<word匹配 "word" 在單字開頭
\>匹配單字的結尾\vword\>匹配 "word" 在單字結尾
\s匹配任何空白字符 (space, tab, newline, etc.)\vhello\sworldhello world
\S匹配任何非空白字符\v\S+word, abc
\d匹配任何數字字符 ([0-9])\v\d{3}123, 456
\D匹配任何非數字字符\v\Da, !
\w匹配任何單字字符 (字母、數字、底線)\v\w+variable_name, 123
\W匹配任何非單字字符\v\W!, @
\( \)普通括號 (分組)\v(abc)匹配 abc 並捕獲
`\`普通豎線 (或)`\vabc\
\{ \}普通花括號 (量詞)\vabc\{匹配 abc{
\+普通加號\v1\+11+1
\?普通問號\vwhat\?what?
\.普通點號\vfile\.txtfile.txt
\[ \]普通方括號\v\[bracket\][bracket]

關於轉義 (Escaping):

  • 當使用 \v (very magic) 模式時,幾乎所有你希望作為字面意義匹配的特殊字符,都需要在其前面加上一個反斜槓 \ 進行轉義。 這包括 . * + ? | ( ) [ ] { } ^ $ \ 等。
  • 反斜槓本身 (\) 在正規表達式中也是特殊字符,所以如果你要匹配字面意義上的反斜槓,你需要寫 \\

例外 (通常不需要轉義的字面字符,除非在特定上下文中):

  • 字母和數字通常不需要轉義。
  • 逗號 ,、破折號 -、等號 = 等非正規表達式特殊字符在模式中通常不需要轉義。

總結

在 Vim Script 中使用正規表達式時,為了清晰和與其他語言習慣保持一致,強烈建議在模式字串的開頭加上 \v (very magic)。這樣,你就只需要記住那些本身就具有特殊意義的字符(如 . * ( [ 等)需要用 \ 來轉義,如果想讓它們作為字面字符匹配。

2020年4月21日 星期二

Tiny-YOLOv2 on 拾穗

Dataset:COCO, 80 classes
Framework:TensorFlow Lite 1.15.0 (Windows)
Model:Converted from TensorFlow Keras mode (h5)
Code:https://github.com/tylpk1216/tiny-yolov2-tflite

在找資料的過程,依稀有看到 YOLO 類演算法對美術作品的辨識度不錯,隨便找了一張圖片來測試,結果居然是下圖,難怪常看到有些圖案可以騙過 AI 的文章。


2020/04/22 更新

原本的 code 使用的是 anchor box 裡面的 confidence score,並未乘上 classes 的 confidence score,調整程式碼後,一個物件都辨識不出來了(Threshold 0.6),不過我想欺騙 AI 的原理應該是一致的,就是想辦法把訓練好 model 學習到的特徵集表現出來就能騙過 AI ?

將右上角的卡通狗辨識成泰迪熊。

調整左上角物品的大小,卡通狗就不是泰迪熊了。

將原本辨識出來的狗,放大到整個輸入大小,模型就失效了。

2019年12月13日 星期五

Tensorflow Lite on Windows - 使用 Google 並且不求甚解

雖然我很喜歡 Linux,但我工作的環境都是使用 Windows 居多,由於手邊還有 Linux 的電腦,故遇到 OS 相關問題就是跑去該電腦前打開電源開機,然後回到自己座位使用 SSH 登入,中間如果需要傳輸檔案便使用 WinSCP 解決。

最近嘗試使用 Tensorflow Lite 轉換 Tensorflow Model,但在 Windows 上無法成功,隨便 Google 一下錯誤訊息,看起來似乎要跑在 Linux 上,後來果然在 Linux 上成功轉出 Model。

但因為要改 Model 和 Code,不論是 python 還是 Tensorflow 都不是我平常會用的傢伙,故常常改來改去,每次都要用 WinSCP 上傳還真是麻煩,雖然 UltraEdit 貌似有支援 SSH,但我的版本是灰色狀態( 寫文章時,已經找到解決方法 ),目前要處理的事一籮筐,故暫時沒時間解決,只好乖乖的再重頭看一次錯誤訊息。

首先,錯誤訊息是長這樣。

"'toco_from_protos' \xa4\xa3\xacO\xa4\xba\xb3\xa1\xa9\xce\xa5~\xb3\xa1\xa9R\xa5O\xa1B\xa5i\xb0\xf5\
xa6\xe6\xaa\xba\xb5{\xa6\xa1\xa9\xce\xa7\xe5\xa6\xb8\xc0\xc9\xa1C\r\n"

感覺就是一堆火星文,老辦法還是 Google,貌似是 python 16 進位字串,不確定對不對?反正簡單使用 python 是可以轉換的,我們得到下列錯誤訊息。

s = "'toco_from_protos' \xa4\xa3\xacO\xa4\xba\xb3\xa1\xa9\xce\xa5~\xb3\xa1\xa9R\xa5O\xa1B\xa5i\xb0\xf5\
xa6\xe6\xaa\xba\xb5{\xa6\xa1\xa9\xce\xa7\xe5\xa6\xb8\xc0\xc9\xa1C\r\n"

print(s)

Traceback (most recent call last):
  File "Test.py", line 5, in
    print(s)
UnicodeEncodeError: 'cp950' codec can't encode character '\xa4' in position 19: illegal multibyte sequence

一樣繼續 Google,搜尋如何改變 code page,原來使用 "chcp 65001" 就可以改成 UTF8,雖然我也不知道 python string 預設編碼是什麼?管他的,時間寶貴,不行在回來查。

這次有了比較清楚的錯誤訊息,但還是回到一開始隨便 Google 到的結果,找不到 "toco_from_protos" 這支轉換程式。

tensorflow.lite.python.convert.ConverterError: See console for info.
'toco_from_protos' is not recognized as an internal or external command,
operable program or batch file.

坦白講,實在是沒道理,堂堂 Google 霸主加上又是 python,沒道理只支援 Linux,更何況使用關鍵字查詢,看起來就是包在 Tensorflow 裡面的,非 Linux 其他安裝時所安裝的工具。

既然 Tensorflow Lite 並沒有說只支援 Linux,一樣繼續 Google,看到了關鍵字 "C:\Python\Scripts\toco_from_protos.exe"。

果然在我安裝目錄下是有這個執行檔的,接下來問題就簡單了,把該目錄加到 Path 路徑即可,雖然我也不知道為什麼我安裝時沒有選擇自動加入?

終於可以在 Windows 下繼續改 Code 了,這條不歸路不知道還要走多久?


後記

人對沒興趣的東西真的會不求甚解,我對 python 和 Tensorflow 都沒有興趣,故我只想快速解決問題,雖然真的是很快速解決問題,因為打這篇文章比我解決問題所花的時間還要多!

還是老話一句,學海無涯,Code 海茫茫,我也想有無限制的精神時光屋可以修練XD

2019年1月18日 星期五

AI 3 要素

大數據,演算法,計算力

相關運用
大數據:資料收集,資料庫 (SQL, NoSQL)
演算法:現成框架、模型 (Tensorflow, Caffe, CNTK, PaddlePaddle)
計算力:CPU, GPU, TPU, FPGA