Closed ghost closed 8 years ago
因为当时考虑对于中文来说,16位的unicode码足够了,性能也更高。
刚才我用了 utf8::utf8to32,硬把位数提升,结果加载词典时直接爆内存退出了。汗……
正常,因为你没有改变Unicode类型。
你的代码是哪个版本的,你可以试试改一下 Unicode的类型,从 uint16_t
改成 uint32_t
master 分支的,类型也是改好的。Trie.hpp
那个 BASE_SIZE
会受字符位数影响吗?我怀疑是那里被我乱改后溢出了。
你猜对了,BASE_SIZE确实受字符位数影响,只能是 uint16_t
的最大值:65536
看来你不能使用master分支的代码了,你使用 v3.1.0
版本的代码吧,那个时候Trie树没有BASE_SIZE
这回事。
还有就是建议其实对于非中文的其他偏远字符,为什么要扔进分词里面呢?
谢谢,3.1.0 果然能改好。
其实就是个人在处理一些繁体语料,总是要对特殊字符特殊处理有点麻烦。也正在和 Python 版做做比较,看哪个对繁体效果更好。感觉两个都差不多吧,不过你这个支持同一个词多个词性,Python 版的直接覆盖原有词性了。
Oh, no. 看来我刚才没看认真,你这个也不支持多词性…… :scream:
之前的代码是只支持 16bit 的 unicode,最新版本 v4.5.0 开始支持 32bit 的 unicode。
https://github.com/yanyiwu/cppjieba/blob/aed1c8f4a6557c807c3c69e2cb9527ec18bb2fcf/src/Limonp/StringUtil.hpp#L165
爲何不直接支持 24 位的 Unicode 碼呢?