最近思考下對(duì)于單詞分割的想法,思考得來可能不同的語言對(duì)于單詞的分割是不同的,那我以空格等分割符作為基礎(chǔ),以不同語言的正則表達(dá)式去匹配,豈不是就可以獲取到單個(gè)單詞,妙啊妙啊,在網(wǎng)上沖浪的過程中也找到了和我思路一致的實(shí)現(xiàn),參考下面的參考文檔1,然而事實(shí)并沒有我想象中的那么簡單。
項(xiàng)目中發(fā)現(xiàn)了對(duì)于韓語字?jǐn)?shù)的特殊統(tǒng)計(jì)規(guī)則,感覺驚奇,難道韓語的字分割規(guī)則不同嗎?于是根據(jù)參考文章2學(xué)習(xí)了下,發(fā)現(xiàn)還真是不同的!原因就在于韓語本身是可以由一些基礎(chǔ)的表音字符拼接組成,在unicode中就體現(xiàn)為多個(gè)unicode,雖然正常來說,韓語也是使用自己單獨(dú)的unicode碼點(diǎn)來表示字,但是一旦使用了表音字符來組合成字,那么使用單獨(dú)的正則表達(dá)式分割來查找字就不足夠了。并且這還只是韓語,不同的語音在分割單詞這塊兒規(guī)則肯定略有不同
這激起了我對(duì)單詞分割的興趣,遂了解了單詞分割的規(guī)則,以下為簡版規(guī)則,真正完備的規(guī)則參考下文中的文檔3
分割單詞的規(guī)則
- 文本不為空的情況下,開頭和結(jié)尾是一個(gè)分割的標(biāo)記
- cr/lf這樣的換行符應(yīng)該當(dāng)成一個(gè)
- 換行符作為詞的分割線
- 用zwj連接起來的emoji字符,形成的單獨(dú)的emoji不應(yīng)該被分開
- 忽略格式化字符
- 大部分正常的字符不應(yīng)該分開
- 數(shù)字的序列不分開,或者數(shù)字臨接字母的不分開,比如”3a”
- 片假名之間不分開
- 其他的情況都分開
以上為通用規(guī)則,不同的語言之間可能還會(huì)有自己的補(bǔ)充,比如上面說的韓語,以及日語片假名等等。
由此可見,人生苦短,使用icu庫來幫我們處理這些細(xì)節(jié)吧??
參考文檔
- 如何設(shè)計(jì)多語言詞分隔
https://medium.com/@byn9826/multi-languages-words-count-3498e5b0fdc3
- 韓語書寫規(guī)則
http://gernot-katzers-spice-pages.com/var/korean_hangul_unicode.html
- 詞的邊界