從文字檔移除特定文字集合

為什麼要學這個?

我們透過”從字體專案裡取得特定文字“, 可以取得某一個專案檔裡的文字清單, 並把文字清單存為一個文字檔, 如果希望某些字可以從這個清單中移除並另存為新檔, 就可以使用這一個 script.

如果沒有這個功能, 以上面執行的結果來看, 需要先開啟有 6715 字的文字檔, 並使用尋找功能, 把9個字從文字檔中移除, 這個操作很花時間, 透過程式自動化, 才是正解.

前置作業

Max腳本檔案下載:
https://github.com/max32002/MaxFontScripts/blob/master/remove_selected_char.py

使用方法

python remove_selected_char.py --input formated.txt --remove remove.txt --output formated.txt

參數說明:

  • –-input 來源文字檔。
  • –-remove 要移除的文字清單。
  • --output 去除交集之後的清所另存的新文字檔。

執行的結果範例:

length of input file: 6715
length of remove file: 9
excepted length of formated file: 6706
length of formated file: 6706

說明: 原文字檔有 6715 字, 要移除有 9字, 預期應該會是 6706 字, 另存的新檔長度為 6706, 符合預期, 之所以會產生與預期不同的結果, 就是這2個集合沒交集的時候.

目前程式的目的就是去除交集, 在第一次執行完之後, 再去使用 –output 的檔案, 當作 –remove 的清單, 對原本的 –input 做二次處理, 就可以取到交集的內容.

實際個案: 某一個字型太大, 有 44000 字, 想變小一點, 不知該如何選擇.

解法: 先用 44000 的大集合, 開始一一去刪除其他字型的集合, 可以取得較少人使用的清單, 再把這個最終清單回去刪除 44000 大集合, 即可取得最常見組合.


上面的效果不太好, 後來改用這個解法:

透過 fontforge 開啟2個字型檔, 字型檔移除字型檔包含項目
https://codereview.max-everyday.com/delete-selected-glyph/#font_delete_font


實際個案

想知道某一個部件在字型中出現的情況, 先到部件查詢網站:
https://zi-hi.com/sp/uni/CJKSeeker

輸入: 㒸

得到資料:

㒸傢儫冡劇勮噱嚎嚺圂塜墜壉壕嫁嬘家嶳幏幪慁懅懞據旞曚朦榢檖檬檺櫫毅氋溕溷澻澽濛濠瀦烼煫燧燹獴璩璲瓥甤矇礈礞禭稼穟篴籇籧糘繸臄艨蒙蓫蕤藙藸蘧蟸蠓蠔襚譢譹豕豗豘豙豚豛豜豝豞豟豠豢豣豤豥豦豧豨豩豪豬豭豮豯豰豱豲豳豴豵豶豷躆逐遂遯遽邃醵鎵鐆鐩鐻镓隊隧霥靀顡饛鱁鸏鹲鿪

先把來源文字清單移除部件清單.

使用指令:

python remove_selected_char.py --input charset_ZenMaruGothic-Regular.tx
t --remove charset_test.txt --output charset_zen_remove.txt

執行結果:

length of input file: 6715
length of remove file: 129
excepted length of formated file: 6586
length intersection: 34
length of target file: 6681

再執行一次指令:

python remove_selected_char.py --input charset_ZenMaruGothic-Regular.tx
t --remove charset_zen_remove.txt --output charset_zen_intersect.txt

答案就放在 _intersect.txt 裡, 交集的字有:

劇墜壕嫁家據曚朦檬毅溷濛濠瀦燧燹矇稼糘艨蒙豕豚豢豪豬逐遂遯遽邃醵隊隧