鉴于 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
提交
取消