亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Python 中計算 Unicode 文本中的非間距字符的最快方法

在 Python 中計算 Unicode 文本中的非間距字符的最快方法

倚天杖 2021-10-19 15:37:56
鑒于 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和使用它來解決這個問題。


查看完整回答
反對 回復 2021-10-19
  • 1 回答
  • 0 關注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號