Unicode字符使用统计

14

我正在寻找有关文本文档(带任何标记)中Unicode字符使用情况的统计数据。谷歌搜索没有结果。

背景:我目前正在开发基于有限状态机的文本处理工具。字符的统计数据可能有助于寻找正确的转换。例如,拉丁字符可能是最常用的,因此首先检查这些字符可能是有意义的。

是否有人偶然收集或看到过这样的统计数据?

(我不关注特定的语言或区域设置。请考虑像XML解析器这样的通用解析器。)


3
您需要说明您在搜索的文本领域或种类。有许多不同的文本语料库。当比较法律文件和数学论文时,统计数字将大不相同。但是,我目前无法进行逐字分析。 - Boldewyn
@WalterTross:我的意思是Unicode编码文档中的字符,而不仅仅是“看起来奇怪”的字符。比如说,如果我们从整个互联网上获取所有Unicode编码的HTML文档,去掉所有标记,并将每个字符出现的次数除以总字符数,那么每个字符的频率会是多少? - lexicore
3
如果您天真地执行“除HTML外的所有网页”任务,那么U+0020后跟U+000A将是最常见的。如果需要快速样本,您可以使用包括所有语言的维基百科转储。汉语和表情符号(考虑聊天协议)将受到低估,但这应该是一个不错的开始。 - Boldewyn
2
这可能会有用:https://dev59.com/lG035IYBdhLWcg3wMNCW - Arvindh Mani
我无法给你一个关于哪些文本字符被使用最多的统计数据。但是,也许相反的情况是存在的。在Unicode值范围内有很多空闲的空间。这意味着,在值范围0..2^32中有很多数字尚未被分配用于表示任何内容。你可以找出哪些数字不是文本字符,因此根本没有被使用。 - Sascha Wedler
显示剩余9条评论
2个回答

6
总结当前的研究发现和想法:
- Tom Christiansen为PubMed Open Access Corpus收集了这些统计数据(请参见此问题)。我已经询问他是否可以分享这些统计数据,正在等待答案。 - 正如@Boldewyn和@nwellnhof建议的那样,我可以分析完整的维基百科转储或CommonCrawl数据。我认为这是一个好建议,我可能会选择CommonCrawl。 很抱歉,这不是一个答案,但是是一个好的研究方向。
更新:我编写了一个小的Hadoop作业,并在其中一个CommonCrawl段上运行它。我已经将我的结果发布在电子表格这里。下面是前50个字符:
0x000020    14627262     
0x000065    7492745 e
0x000061    5144406 a
0x000069    4791953 i
0x00006f    4717551 o
0x000074    4566615 t
0x00006e    4296796 n
0x000072    4293069 r
0x000073    4025542 s
0x00000a    3140215 
0x00006c    2841723 l
0x000064    2132449 d
0x000063    2026755 c
0x000075    1927266 u
0x000068    1793540 h
0x00006d    1628606 m
0x00fffd    1579150 
0x000067    1279990 g
0x000070    1277983 p
0x000066    997775  f
0x000079    949434  y
0x000062    851830  b
0x00002e    844102  .
0x000030    822410  0
0x0000a0    797309  
0x000053    718313  S
0x000076    691534  v
0x000077    682472  w
0x000031    648470  1
0x000041    624279  @
0x00006b    555419  k
0x000032    548220  2
0x00002c    513342  ,
0x00002d    510054  -
0x000043    498244  C
0x000054    495323  T
0x000045    455061  E
0x00004d    426545  M
0x000050    423790  P
0x000049    405276  I
0x000052    393218  R
0x000044    381975  D
0x00004c    365834  L
0x000042    353770  B
0x000033    334689  E
0x00004e    325299  N
0x000029    302497  /
0x000028    301057  (
0x000035    298087  5
0x000046    295148  F

说实话,我不确定这些结果是否具有代表性。就像我说的,我只分析了一个部分。对我来说看起来很可信。我们也可以很容易地发现标记已被去除 - 因此分布不直接适用于我的 XML 解析器。但它提供了有价值的提示,可以先检查哪些字符范围。

1
这是典型的英语字符频率,因此与ASCII或Latin-1没有太大区别。OP不清楚他们是否只对英语感兴趣还是所有用法。 - hippietrail
@hippietrail:我想我已经很清楚地表明了“我不专注于特定的语言或区域设置”。确实,最上面的字符就像英语一样。其他字母稍后出现。然而,我不太确定我的CommonCrawl中的片段/文件有多“随机”。分析更多的片段可能是有意义的。 - lexicore
哦,我不是说拉丁字符集比中文或阿拉伯语更高,我是说字母的实际顺序也是英语而不是其他许多使用基本相同字母表的语言。仔细看可能有一点不同。英语典型的顺序是 e t a o n r i s h。但是对于 Unicode,没有带有有趣重音或特殊符号的字符。唯一比纯 ASCII 更 Unicode 的是不间断空格和 0xfffd。 - hippietrail

1
我个人认为,类似问题中的http://emojitracker.com/链接是这方面最有前途的资源。我没有检查过源代码(我不会说Ruby),但从实时Twitter反馈的字符频率来看,我预计结果与静态网页会有很大不同,并且可能会有根本不同的语言分布(在Twitter上,我看到的阿拉伯语和土耳其语比我的日常生活中要多得多)。这可能不完全符合您的要求,但如果我们只看您的问题标题(可能大多数访问者都会遵循此标题进入此页面),那么这就是我建议的答案。
当然,这引出了一个问题,即您试图模拟哪种用法。对于您寻找的静态XML,也许Common Crawl集合才是更好的起点。无论多么非正式的编辑流程,文本输出都与自发文本有很大不同。

到目前为止,建议的选项中,维基百科(和/或维基词典)可能是最容易的选择,因为它足够小,可以本地下载,比随机网页转储更好地标准化(全部使用UTF-8编码,全部正确标记,大多数已按语言正确标记并校对了标记错误、拼写和偶尔的事实),但又足够大(可能已经超出了一个数量级以上的过剩)以提供可信的统计数据。但是,如果域名与您实际想要建模的域名不同,它们可能仍然会出错。


我对CommonCrawl非常感兴趣,这将是我在Hadoop和MapReduce等方面的新经验。你说得对,我正在开发一种基于状态机的XML解析器(没错,在2014年),尤其是对基于状态机的解析器感兴趣。Twitter和表情符号并不完全符合我的需求。维基百科和CommonCrawl似乎更加适合。 - lexicore
顺便说一句,表情符号并不是Twitter动态消息有趣的原因。它们只是一个有趣的演示,但最多只是次要的。 - tripleee
我理解你的担忧,但我不会在这里过于复杂化。由于我首先需要XML语法,所以实际上我不必从HTML中提取文本。我可以将所有内容与标记一起获取。只需计算所有字符,无论是标记还是文本内容。我甚至认为这些结果比仅有文本内容更好。唯一的问题是编码。我必须以某种方式检测编码-否则我将无法从字节中读取正确的字符。然而,我看到了许多现有的方法来解决这个问题,所以我认为这是可以解决的。 - lexicore
以下是几种方法:https://dev59.com/Umox5IYBdhLWcg3wekMs https://dev59.com/FnRA5IYBdhLWcg3w8ikl 所以我认为我甚至不需要在这里发明什么。 - lexicore
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接