我的桌面搜索系统
中文分词想做到这样就差不多了,毕竟是自己用。目的就是搜索“土人”不要把“风土人情”相关的内容搜出来就行。

接下来该做英文分词了。也不管动词时态和名词复数等问题了,能分开就行。因为全英文的数据基本都是程序代码。

把中英文分词都做完后,就该考虑如何建立索引了。
Current language: Chinese (Simplified)
第三次修改后中文分词程序的分词速度
程序改动:不使用 PHP 中的 Multi-Byte String 函数,自己判断汉字

分词方法:逆向最大匹配分词法,只对中文字符进行分词

词库大小:73,226 个词

编写语言:PHP

分词速度:

99% 中文 —— 211 KB —— 2s —— 105.50KB/s (+ 92.32KB/s)

45% 中文 —— 2, 100 KB —— 22s —— 95.45KB/s (+ 66.69KB/s)

00% 中文 —— 413 KB —— 6s —— 68.83KB/s (+ 9.83KB/s)
Current language: Chinese (Simplified)
GBK 汉字内码扩展规范 之 码位分配及顺序
GBK 采用双字节表示,总体编码范围为 0x8140 - 0xFEFE,首字节在 0x81 - 0xFE 之间,尾字节在 0x40 - 0xFE 之间,剔除 0xXX7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。

全部编码分为三大部分:

1. 汉字区。包括:
  A. GB 2312 汉字区。即 GBK/2: 0xB0A1 - 0xF7FE。收录 GB 2312 汉字 6763 个,按原顺序排列。
  B. GB 13000.1 扩充汉字区。包括:
    (1) GBK/3: 0x8140 - 0xA0FE。收录 GB 13000.1 中的 CJK 汉字 6080 个。
    (2) GBK/4: 0xAA40 - 0xFEA0。收录 CJK 汉字和增补的汉字 8160 个。

2. 图形符号区。包括:
  A. GB 2312 非汉字符号区。即 GBK/1: 0xA1A1 - 0xA9FE。其中除 GB 2312 的符号外,还有 10 个小写罗马数字和 GB 12345 增补的符号。计符号 717 个。
  B. GB 13000.1 扩充非汉字区。即 GBK/5: 0xA840 - 0xA9A0。BIG-5 非汉字符号、结构符和“○”排列在此区。计符号 166 个。

3. 用户自定义区:分为(1)(2)(3)三个小区。
    (1) 0xAAA1 - 0xAFFE,码位 564 个。
    (2) 0xF8A1 - 0xFEFE,码位 658 个。
    (3) 0xA140 - 0xA7A0,码位 672 个。
  第(3)区尽管对用户开放,但限制使用,因为不排除未来在此区域增补新字符的可能性。
Current language: Chinese (Simplified)
我的中文分词程序现在存在的主要问题
为了避免出现乱码,我的中文分词程序使用了 PHP 中的 Multi-Byte String 函数。先通过 mb_strlen() 函数取得字符串的长度,然后利用 mb_substr() 把每个字符都存到一个数组里,再进行匹配。

这样效率就会降低很多。如果不使用 Multi-Byte String 函数,而是逐个判断每个字符是单字节还是双字节的,效率应该可以提高不少。

待有时间再研究汉字编码吧。
Current language: Chinese (Simplified)
第二次修改后中文分词程序的分词速度
分词方法:逆向最大匹配分词法,只对中文字符进行分词

词库大小:73,226 个词(增加了 29,289 个词,但去除了单字和四字以上的词语)

编写语言:PHP

分词速度:

99% 中文 —— 211 KB —— 16s —— 13.18KB/s (+ 10.08KB/s)

45% 中文 —— 2, 100 KB —— 73s —— 28.76KB/s (+ 23.82KB/s)

00% 中文 —— 413 KB —— 7s —— 59.00KB/s (- 9.83KB/s)
Current language: Chinese (Simplified)
More entries: [1] ... [14] [15] [16] [17] [18] [19] [20] [21]
« Previous page · Next page »