1
lululau 2018-03-29 14:53:27 +08:00 1
len(re.findall(ur'[\u4e00-\u9fff]', sample)
不过我感觉在文本处理的技术层面,所谓“汉字”应该是没有准确定义的 |
2
SuperMild 2018-03-29 14:54:06 +08:00
如果要区分日语、俄语等各国语言就比较麻烦了
|
3
whoami9894 2018-03-29 14:54:48 +08:00 via Android 2
正则[\u4e00-\u9fa5]+
|
4
b821025551b 2018-03-29 14:58:02 +08:00
上面提供的 unicode 编码范围应该不完全,比如“㗊”这个字,它是不是汉字?
|
5
muziki 2018-03-29 15:00:01 +08:00 via iPhone
import jieba
|
6
larsenlouis 2018-03-29 15:23:12 +08:00
|
8
huhujin 2018-03-29 15:56:10 +08:00
```
class Char(object): widths = [ (126, 1), (159, 0), (687, 1), (710, 0), (711, 1), (727, 0), (733, 1), (879, 0), (1154, 1), (1161, 0), (4347, 1), (4447, 2), (7467, 1), (7521, 0), (8369, 1), (8426, 0), (9000, 1), (9002, 2), (11021, 1), (12350, 2), (12351, 1), (12438, 2), (12442, 0), (19893, 2), (19967, 1), (55203, 2), (63743, 1), (64106, 2), (65039, 1), (65059, 0), (65131, 2), (65279, 1), (65376, 2), (65500, 1), (65510, 2), (120831, 1), (262141, 2), (1114109, 1), ] @classmethod def get_char_width(cls, o): o = ord(o) if o == 0xe or o == 0xf: return 0 for num, wid in cls.widths: if o <= num: return wid return 1 @classmethod def get_string_width(cls, string): # 显示文字的宽度 return sum(map(cls.get_char_width, string)) ``` |
9
hicdn 2018-03-29 16:08:03 +08:00
简单除暴实现,假设文本只包含 ASCII 字符和中文
In [50]: bs Out[50]: b'>\xe5\xa6\x82\xe4\xbd\x95\xe7\x94\xa8 Python \xe5\x88\xa4\xe6\x96\xad\xe4\xb8\x80\xe4\xb8\xaa\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2\xe9\x87\x8c\xe5\x87\xba\xe7\x8e\xb0\xe4\xba\x86\xe5\xa4\x9a\xe5\xb0\x91\xe4\xb8\xaa\xe6\xb1\x89\xe5\xad\x97 - V2EX' In [51]: s = bs.decode() In [52]: s Out[52]: '>如何用 Python 判断一个字符串里出现了多少个汉字 - V2EX' In [53]: [i for i in s if ord(i) not in range(0x20, 0x7f)] Out[53]: ['如', '何', '用', '判', '断', '一', '个', '字', '符', '串', '里', '出', '现', '了', '多', '少', '个', '汉', '字'] |
10
hicdn 2018-03-29 16:12:36 +08:00
接上条,\r 和 \n 也算进去了,用 0x00 替换 0x20
|
11
qsnow6 2018-03-29 16:25:30 +08:00
用正则去搜索 unicode 编码表应该是最优方案了
|
12
oncethink 2018-03-29 16:44:16 +08:00
!pip install zhon
import re import zhon len(re.findall('[{}]'.format(zhon.hanzi.characters),"中文")) |
13
xpresslink 2018-03-29 23:12:47 +08:00
2E80 ~ 33FFh:中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。
3400 ~ 4DFFh:中日韩认同表意文字扩充 A 区,总计收容 6,582 个中日韩汉字。 4E00 ~ 9FFFh:中日韩认同表意文字区,总计收容 20,902 个中日韩汉字。 A000 ~ A4FFh:彝族文字区,收容中国南方彝族文字和字根。 AC00 ~ D7FFh:韩文拼音组合字区,收容以韩文音符拼成的文字。 F900 ~ FAFFh:中日韩兼容表意文字区,总计收容 302 个中日韩汉字。 FB00 ~ FFFDh:文字表现形式区,收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。 |
14
fanhaipeng0403 2018-03-30 10:21:02 +08:00
jieba
|
15
robinlovemaggie 2018-03-30 11:39:41 +08:00
面试算法题既视感。。。逃~~
|
16
cszhiyue 2018-03-31 12:23:22 +08:00
|