鑒于 Unicode 非空格標記列表 - https://www.fileformat.info/info/unicode/category/Mn/list.htmUNICODE_NSM = ['\u0300', '\u0301', '\u0302', '\u0303', '\u0304', '\u0305', '\u0306', '\u0307', '\u0308', '\u0309', '\u030A', '\u030B', '\u030C', '\u030D', '\u030E', '\u030F', '\u0310', '\u0311', '\u0312', '\u0313', '\u0314', '\u0315', '\u0316', '\u0317', '\u0318', '\u0319', '\u031A', '\u031B', '\u031C', '\u031D', '\u031E', '\u031F', 筆記。 請注意,我們在這里有\U000XXXXX和\uXXXX代表。我想計算像這個印地語字符串“?? ???? ?? ??? ???? ??”這樣的 Unicode 輸入文本,或者只是一個像“????”這樣的標記詞,不包括非空格字符。我的實現看起來像def countNonSpacingCharString(str): count = 0; for char in str: if char not in UNICODE_NSM: count = count + 1 return count感謝以下答案中提供的幫助,我已將所有內容放在此 github 中。還有一個可以在 JavaScript / Node.js 中使用的標記代碼點列表 - https://github.com/loretoparisi/unicode_marks
1 回答
互換的青春
TA貢獻1797條經驗 獲得超6個贊
也許最簡單的方法是使用unicodedata模塊。部分是因為它將接受更嚴格的測試。確實,我發現您的列表似乎包括除Mn. 也就是說,它也包括來自Mc(Mark,間距組合)的Unicode 點,但是您說您只想從Mn(Mark,Nonspacing)中排除 Unicode 點。
例如。
import unicodedata
def countNonSpacingCharString(string):
category = unicodedata.category
return sum(category(char) != 'Mn' for char in string)
根據 ,這似乎快了大約 60 倍timeit。
TypeError如果您的 Python 版本unicodedata不是最新的,因此您不知道最近添加到 Unicode的內容,您可能會得到, 。您可以通過安裝unicodedata2和使用它來解決這個問題。
添加回答
舉報
0/150
提交
取消
