最近思考下对于单词分割的想法,思考得来可能不同的语言对于单词的分割是不同的,那我以空格等分割符作为基础,以不同语言的正则表达式去匹配,岂不是就可以获取到单个单词,妙啊妙啊,在网上冲浪的过程中也找到了和我思路一致的实现,参考下面的参考文档1,然而事实并没有我想象中的那么简单。
项目中发现了对于韩语字数的特殊统计规则,感觉惊奇,难道韩语的字分割规则不同吗?于是根据参考文章2学习了下,发现还真是不同的!原因就在于韩语本身是可以由一些基础的表音字符拼接组成,在unicode中就体现为多个unicode,虽然正常来说,韩语也是使用自己单独的unicode码点来表示字,但是一旦使用了表音字符来组合成字,那么使用单独的正则表达式分割来查找字就不足够了。并且这还只是韩语,不同的语音在分割单词这块儿规则肯定略有不同
这激起了我对单词分割的兴趣,遂了解了单词分割的规则,以下为简版规则,真正完备的规则参考下文中的文档3
分割单词的规则
- 文本不为空的情况下,开头和结尾是一个分割的标记
- cr/lf这样的换行符应该当成一个
- 换行符作为词的分割线
- 用zwj连接起来的emoji字符,形成的单独的emoji不应该被分开
- 忽略格式化字符
- 大部分正常的字符不应该分开
- 数字的序列不分开,或者数字临接字母的不分开,比如”3a”
- 片假名之间不分开
- 其他的情况都分开
以上为通用规则,不同的语言之间可能还会有自己的补充,比如上面说的韩语,以及日语片假名等等。
由此可见,人生苦短,使用icu库来帮我们处理这些细节吧😭
参考文档
- 如何设计多语言词分隔
https://medium.com/@byn9826/multi-languages-words-count-3498e5b0fdc3
- 韩语书写规则
http://gernot-katzers-spice-pages.com/var/korean_hangul_unicode.html
- 词的边界
网友评论