发表回复 
 
主题评价:
  • 6 次(票) - 平均星级: 4.5
  • 1
  • 2
  • 3
  • 4
  • 5
[2013] SCWS-1.2.2 发布,BSD协议、支持自定义词库、PHP5.4
2010年01月29日, 14:07 (这个帖子最后修改于: 2013年07月11日 21:03 by hightman.)
Bug [2013] SCWS-1.2.2 发布,BSD协议、支持自定义词库、PHP5.4
2010年,scws 加上了翘首以盼的删减词库功能,该功能通过变通的办法解决,并非直接修改核心词库。下面详细介绍一下 scws-1.1.x 的更新日志及用法举例(示例以PHP扩展语言为例)。

最新版下载地址:[url]http://www.xunsearch.com/scws/download.php[/url]
--
[b]scws-1.2.2 发布于 2013-7-11[/b]
1) 改进中英夹杂的长词复合分法,比如 "奥迪A6/奥迪/A6"
2) 修正 pscws23 演示文件的一些写法与新版 PHP 不兼容
3) 修正一些 configure 检测错误

[b]scws-1.2.1 发布于 2013-1-15[/b]
1) 将源码迁移并托管到 github
2) 改进 C API 中 scws_fork() 的算法,使之更为合理
3) 迁移并修改新版官方主页:http://www.xunsearch.com/scws

[b]scws-1.2.0 发布于 2012-3-29[/b]
1) 修改 php 扩展代码以兼容支持 php 5.4.x
2) 修正 php 扩展中 scws_get_tops 的 limit 参数不允许少于 10 的问题
3) libscws 增加 scws_fork() 从既有的 scws 实例产生分支并共享词典/规则集,主要用于多线程开发。
4) 新增部分版本的 win32 的 dll 扩展,详见下载页面

[b]scws-1.1.9 发布于 2011-12-26[/b]
2011-12-26: SCWS-1.1.9 Released.
1) 明确使用开源协议 New BSD License 发布新版本
2) 深度优化复合分词中的 SCWS_MULTISHORT 选项,更为合理有效,符合全文检索的需求
3) 测试脚本自动加载当前目录下的 dict_user.txt 文本词典
4) 修正 scws.c 中 __PARSE_XATTR__ 宏的 BUG 导致 scws_get_tops 和 scws_get_words 的 xattr 参数工作不正常的问题
5) 移除 scws.c 中关于 jabberd2s10 的注释,已不包含它的代码
6) 为独立使用的 .h 文件添加 C++ 的 extern "C" 标记以便直接使用:xdb.h,xdict.h,xtree.h,pool.h,darray.h

[b]scws-1.1.8 发布于 2011-07-30[/b]
1) win32/目录新增 vc9 工程文件, 默认为 php-5.3.x 提供的 php_scws.dll 采用 VC9(thread-safety) 编译
2) 修改英语专有名词的识别方式, 原先 X.Y.Z 必须字母全大写,现也允许小写
3) 修改 congiure.in 在 ---enable-developer 选项的处理方式,不覆盖预设的 CFLAGS
4) 改变数字字母单独成词时的规则,当其中同时包含2个连续字母以及2个连续数字时强制拆分。例:原先单独的 iso9001 是整词,新规则切为 iso+9001 而 i9001 则保持不变仍为。这样做更有利于全文检索。
[b]scws-1.1.7 发布于 2011-05-21[/b]
1) 删除 __PARSE_XATTR__ 宏中企图修改 xattr 的内容的作法, 当 xattr 为常量字符串时会出错.
2) 调整 config.h 的包含方式移入 .c 文件而非 .h 文件
3) 增加一些PHP测试脚本, 位于phpext/scws_test.php, 精选了一些岐义较多的语句进行测试。
4) 修正 scws_has_word() 的一处内存汇露 (感谢lauxinz)
5) 修改调试模式的编译选项,去除-O2避免源码和代码无法对应。 (感谢lauxinz)
[b]scws-1.1.6 发布于 2011-04-20[/b]
修正夹杂在汉字中间的1-2个英文字符的词性为 en 而不是原来的 un 导致清除符号时消失.
调整将数字后面的独立 % 纳入整词作为百分比,如 33.3% 作为整词而不再是 33.3 和 %
修改连字符(-)和下划线(_)的规则,当出现在字母单词之间时视为同一词而不再强行切开,此时如果激活复合分词的 DUALITY 选项,则仍能将符号切开作为复合词。
修正浮点数的识别规则,避免将IPv4地址识别为2个小数的尴尬,比如 192.168.1.1 以前会被切成 192.168 和1.1 2个数字,现在不会了。
libscws 安装后将所有的头文件(*.h)按装到 $prefix/include/scws 而不是以前的 $prefix/include,故采用C API开发时头部建议写 #include <scws/scws.h>
--
[b]scws-1.1.5 发布于 2010-12-31[/b]
修正 1.1.4 的 xdb.c 270行处由于书写错误导致的严重错误, 1.1.4版作废应及时升为 1.1.5
--
[b]scws-1.1.4 发布于 2010-12-30[/b]
修正 xdb.c 中存在的一处缓冲区溢出, 感谢论坛网友 hovea.
修正 phpext/ 中 scws_get_result() 参数解析里多了一个z 的问题,感谢网友(阿男)告知
修正 scws.c 中某些字符在ignore symbol设置下无效的问题
--
[b]scws-1.1.3 发布于 2010-09-15 [/b]
将 cli/ 下的工具程序命名下划线改成连接线(减号), gen_scws_dict 改为 gen-scws-dict
消除 php5.3 的警告信息, 重写 phpext/ 中的部分zend API, 统一采用 zend_parse_parameters()
--
[b]scws-1.1.2 发布于 2010-5-9[/b]
这是一个小bug修正版,修正在非内存模式词库时会导致人名识别失败的bug.

--
[b]scws-1.1.1 发布于 2010-3-4[/b]
这是一个bug修正版,1.1.0 中存在内存泄露的重大bug。
--
[b]scws-1.1.0 发布于 2010-1-29[/b]
项目主页:[url=http://www.ftphp.com/scws]http://www.ftphp.com/scws[/url]
项目演示:[url=http://www.ftphp.com/scws/demo/v4.php]http://www.ftphp.com/scws/demo/v4.php[/url](含自定词汇功能)
TF/IDF简易查询计算器:[url=http://www.ftphp.com/scws/demo/get_tfidf.php]http://www.ftphp.com/scws/demo/get_tfidf.php [/url](用于新词添加时不知怎么设tf,idf的话)
基于SCWS自动分类演示:[url=http://www.ftphp.com/scws/demo/a.php]http://www.ftphp.com/scws/demo/a.php[/url](输入一段文字系统自动给出最合适的分类建议)

[size=x-large]-- [color=#DAA520]新增或变动的 API [/color]--[/size]
1. [libscws] scws_set_dict(scws_t s, const char *fpath, int mode); scws_add_dict(scws_t s, const char *fpath, int mode);
scws_set_dict 为原有功能,scws_add_dict 是新增功能,2者功能相当接近,只是 scws_set_dict 会把 scws handler 现存的词库表
清空,并设为当前的词库,而 scws_add_dict 只是将该词库添加到 scws handler 的词库表中,并优先使用。

scws_add_dict 添加的词库,越后面添加的查询优先级越高,即相当于可以覆盖前面的词库。
参数 mode 包括三个值:SCWS_XDICT_XDB, SCWS_XDICT_MEM, SCWS_XDICT_TXT,
TXT意未着 fpath 指向的词库文件为纯文本文件, 可以通过按位与(|)与另2项链接表示是否强制将词库加载到内存.
除TXT外只支持XDB格式的词库了。

2个函数的返回值均为 int,成功为1 失败是0。此外,词库的字符集必须和 scws_set_charset()指定的相匹配,以免出错。

** 详解 TXT 词库的写法 (TXT词库目前已兼容 cli/scws_gen_dict 所用的文本词库) **
1) 每行一条记录,以 # 或 分号开头的相当于注释,忽略跳过。
2) 每行由4个字段组成,依次为“词语"(由中文字或3个以下的字母合成), "TF", "IDF", "词性", 字段时间用空格或制表符分开,数量不限,可自行对齐以美化。
3) 除“词语”外,其它字段可忽略不写。若忽略,TF和IDF默认值为 1.0 而 词性为 "@"
4) 由于 txt 库动态加载(内部监测文件修改时间自动转换成 xdb 存于系统临时目录),故建议TXT词库不要过大!
5) [b]删除词作法[/b],请将词性设为“!“,则表示该词设为无效,即使在其它核心库中存在该词也视为无效。

2. [libscws] 新增 int scws_has_word(const char *xattr); 和 scws_top_t scws_get_words(const char *xattr); 两个函数
1. 参数 xattr 和 scws_get_tops 的参数是一样的,指定词性,多个词性之间用逗号(,)分隔,若以 ~ 开头则表示不在该词性列表中即可。
2. 两个函数均应在 scws_send_text 之后调用,scws_has_word 用于判断文本中是否包含 xattr 词性的词汇,常用于脏词判断,将脏词统一设为一个词性。
3. scws_get_words 返回词性属于 xattr 的词汇列表,返回顺序为词出现的先后顺序,词的结构和 get_tops 一样,包含 weight, times 的统计。

3. 以后上新或改动的 api 同步反应在 php 扩展中,对应的原型如下:
函数调用形式:bool scws_set_dict(Resource scws_handler, string filepath[, int mode = SCWS_XDICT_XDB]);
bool scws_add_dict(Resource scws_handler, string filepath[, int mode = SCWS_XDICT_XDB]);
bool scws_has_word(Resource scws_handler, string xattr);
Array scws_get_words(Resource scws_handler, string xattr); 若不存在返回空数组,而不是 false

对象调用形式:bool scws->set_dict(string filepath[, int mode = SCWS_XDICT_XDB]);
bool scws->add_dict(string filepath[, int mode = SCWS_XDICT_XDB]);
bool scws->has_word(string xattr);
Array scws->get_words(string xattr); 若不存在返回空数组,而不是 false

特别注意,原 scws 在不指定任何词库的情况下会自动搜索 ini(scws.default.fpath) 底下的 dict.xdb/dict.utf8.xdb,如果调用过 add_dict 或 set_dict
则不会再触发该功能,故采用额外词库时原核心词库必须显式地调用才行。

-- [color]新功能用法示例[/color] (php为例) --
1. 自定义词库,含新增核心库不存在的词汇及删除核心库存在词汇的功能
1) 创建相应字符集的词库文件 dict_extra.txt
2) TF/IDF 参考值查询,为方便大家我作了一个工具自动查询!!( [url=http://www.ftphp.com/scws/demo/get_tfidf.php]http://www.ftphp.com/scws/demo/get_tfidf.php[/url])
3) 切记要删除的词用 ! 作为词性,比如以下文件:
代码:
; dict_extra.txt
我是新增词     2.0
再试一个       1.0       1.0    @
; 以下词为删除项
删除           1.0      1.0    !
4) 然后将 dict_extra.txt 在原核心库后加载,如:
$cws->add_dict(init_get("scws.default.fpath").'/dict.xdb');
$cws->add_dict("/path/to/dict_extra.txt", SCWS_XDICT_TXT);
...

2. 非法关键词的判断及获取(可用于过滤。。)
1) 将非法词汇收集整理,作成 txt 格式文件,统一将其属性设为 '*' 即可
2) 按步骤最后加载黑词词库
3) 在 $cws->send_text($text); 之后
调用 $cws->has_word("*"); 来判断是否包含黑词, 该函数效率较高, 只要判断到一个黑词即返回true
调用 $cws->get_words("*"); 则可以获取黑词清单,显式地告诉用户它的内容包含了哪些非法词汇。。。
查找这个用户的全部帖子
引用并回复
2010年07月20日, 16:39
RE: [2010] SCWS-1.1.2 发布,支持文本词典实现自定义词库啦!!
你好,有在吗,请问你们的程序能不能包装一个c版本的dll,让别的程序调用.不只是PHP
查找这个用户的全部帖子
引用并回复
2010年09月19日, 09:36
RE: [2010] SCWS-1.1.3 发布,支持文本词典实现自定义词库啦!!
下了最新的1.1.3,但是我在windows下winrar解开,里面空的,这个压缩包是不是有问题啊?1.1.2是正常的。呢个对应的ut8的压缩包也不对
访问这个用户的网站 查找这个用户的全部帖子
引用并回复
2010年09月19日, 11:04
RE: [2010] SCWS-1.1.3 发布,支持文本词典实现自定义词库啦!!
你说的是哪个包解开是空的啊,是软件包还是词典,谢谢
查找这个用户的全部帖子
引用并回复
2010年09月19日, 15:03
RE: [2010] SCWS-1.1.3 发布,支持文本词典实现自定义词库啦!!
[quote='hightman' pid='3722' dateline='1284865451']
你说的是哪个包解开是空的啊,是软件包还是词典,谢谢
[/quote]

刚才又下载试了下,1.1.3的软件包没问题了,但是utf8的字典包还是有问题,下下来只有100多k,网站上标明有3M多的
访问这个用户的网站 查找这个用户的全部帖子
引用并回复
2010年09月22日, 09:34
RE: [2010] SCWS-1.1.3 发布,支持文本词典实现自定义词库啦!!
[quote='zfzeng' pid='3723' dateline='1284879784']
[quote='hightman' pid='3722' dateline='1284865451']
你说的是哪个包解开是空的啊,是软件包还是词典,谢谢
[/quote]

刚才又下载试了下,1.1.3的软件包没问题了,但是utf8的字典包还是有问题,下下来只有100多k,网站上标明有3M多的
[/quote]

可能是网速问题导致下载不全。
查找这个用户的全部帖子
引用并回复
2010年10月21日, 22:50
RE: [2010] SCWS-1.1.3 发布,支持文本词典实现自定义词库啦!!
你好,我测试了一下,消除标点符号时":"还会显示,其它标点就可以。[hr]
“{}]好像这几个都清不了
引用并回复
2010年10月22日, 19:30 (这个帖子最后修改于: 2010年10月22日 19:38 by admin.)
RE: [2010] SCWS-1.1.3 发布,支持文本词典实现自定义词库啦!!
代码里特殊定义了这些字符不过滤,原因是跟搜索引擎配套开发时,这些字符都有特殊含义用于搜索,所以当时强制没有过滤。

下一版本会纳入,如需自行修改请按以下方式修改:
代码:
*** scws.c      8 May 2010 17:28:30 -0000       1.17
--- scws.c      22 Oct 2010 11:09:46 -0000      1.18
***************
*** 1035,1041 ****
        /* try to parse the sentence */
        s->off = off;
        ch = txt[off];
!       if (SCWS_CHAR_TOKEN(ch))
        {
                s->off++;
                SCWS_PUT_RES(off, 0.0, 1, attr_un);
--- 1035,1041 ----
        /* try to parse the sentence */
        s->off = off;
        ch = txt[off];
!       if (SCWS_CHAR_TOKEN(ch) && !(s->mode & SCWS_IGN_SYMBOL))
        {
                s->off++;
                SCWS_PUT_RES(off, 0.0, 1, attr_un);
查找这个用户的全部帖子
引用并回复
2010年10月29日, 12:33
RE: [2010] SCWS-1.1.3 发布,支持文本词典实现自定义词库啦!!
学习 scws 先顶下 哈哈天使
访问这个用户的网站 查找这个用户的全部帖子
引用并回复
2010年11月13日, 10:43 (这个帖子最后修改于: 2010年11月13日 10:47 by RogerSeal.)
RE: [2010] SCWS-1.1.3 发布,支持文本词典实现自定义词库啦!!
[quote='hightman' pid='3425' dateline='1264745243']
2010年,scws 长了一岁,加上了翘首以盼的删减词库功能,该功能通过变通的办法解决,并非直接修改核心词库。下面详细介绍一下 scws-1.1.0 的更新日志及用法举例(示例以PHP扩展语言为例)。

--
[b]scws-1.1.3 发布于 2010-09-15 [/b]
将 cli/ 下的工具程序命名下划线改成连接线(减号), gen_scws_dict 改为 gen-scws-dict
消除 php5.3 的警告信息, 重写 phpext/ 中的部分zend API, 统一采用 zend_parse_parameters()
--
[b]scws-1.1.2 发布于 2010-5-9[/b]
这是一个小bug修正版,修正在非内存模式词库时会导致人名识别失败的bug.

--
[b]scws-1.1.1 发布于 2010-3-4[/b]
这是一个bug修正版,1.1.0 中存在内存泄露的重大bug。
--
[b]scws-1.1.0 发布于 2010-1-29[/b]
项目主页:[url=http://www.ftphp.com/scws]http://www.ftphp.com/scws[/url]
项目演示:[url=http://www.ftphp.com/scws/demo/v4.php]http://www.ftphp.com/scws/demo/v4.php[/url](含自定词汇功能)
TF/IDF简易查询计算器:[url=http://www.ftphp.com/scws/demo/v4.php]http://www.ftphp.com/scws/demo/get_tfidf.php [/url](用于新词添加时不知怎么设tf,idf的话)
基于SCWS自动分类演示:[url=http://www.ftphp.com/scws/demo/a.php]http://www.ftphp.com/scws/demo/a.php[/url](输入一段文字系统自动给出最合适的分类建议)

[size=x-large]-- [color=#DAA520]新增或变动的 API [/color]--[/size]
1. [libscws] scws_set_dict(scws_t s, const char *fpath, int mode); scws_add_dict(scws_t s, const char *fpath, int mode);
scws_set_dict 为原有功能,scws_add_dict 是新增功能,2者功能相当接近,只是 scws_set_dict 会把 scws handler 现存的词库表
清空,并设为当前的词库,而 scws_add_dict 只是将该词库添加到 scws handler 的词库表中,并优先使用。

scws_add_dict 添加的词库,越后面添加的查询优先级越高,即相当于可以覆盖前面的词库。
参数 mode 包括三个值:SCWS_XDICT_XDB, SCWS_XDICT_MEM, SCWS_XDICT_TXT,
TXT意未着 fpath 指向的词库文件为纯文本文件, 可以通过按位与(|)与另2项链接表示是否强制将词库加载到内存.
除TXT外只支持XDB格式的词库了。

2个函数的返回值均为 int,成功为1 失败是0。此外,词库的字符集必须和 scws_set_charset()指定的相匹配,以免出错。

** 详解 TXT 词库的写法 (TXT词库目前已兼容 cli/scws_gen_dict 所用的文本词库) **
1) 每行一条记录,以 # 或 分号开头的相当于注释,忽略跳过。
2) 每行由4个字段组成,依次为“词语"(由中文字或3个以下的字母合成), "TF", "IDF", "词性", 字段时间用空格或制表符分开,数量不限,可自行对齐以美化。
3) 除“词语”外,其它字段可忽略不写。若忽略,TF和IDF默认值为 1.0 而 词性为 "@"
4) 由于 txt 库动态加载(内部监测文件修改时间自动转换成 xdb 存于系统临时目录),故建议TXT词库不要过大!
5) [b]删除词作法[/b],请将词性设为“!“,则表示该词设为无效,即使在其它核心库中存在该词也视为无效。

2. [libscws] 新增 int scws_has_word(const char *xattr); 和 scws_top_t scws_get_words(const char *xattr); 两个函数
1. 参数 xattr 和 scws_get_tops 的参数是一样的,指定词性,多个词性之间用逗号(,)分隔,若以 ~ 开头则表示不在该词性列表中即可。
2. 两个函数均应在 scws_send_text 之后调用,scws_has_word 用于判断文本中是否包含 xattr 词性的词汇,常用于脏词判断,将脏词统一设为一个词性。
3. scws_get_words 返回词性属于 xattr 的词汇列表,返回顺序为词出现的先后顺序,词的结构和 get_tops 一样,包含 weight, times 的统计。

3. 以后上新或改动的 api 同步反应在 php 扩展中,对应的原型如下:
函数调用形式:bool scws_set_dict(Resource scws_handler, string filepath[, int mode = SCWS_XDICT_XDB]);
bool scws_add_dict(Resource scws_handler, string filepath[, int mode = SCWS_XDICT_XDB]);
bool scws_has_word(Resource scws_handler, string xattr);
Array scws_get_words(Resource scws_handler, string xattr); 若不存在返回空数组,而不是 false

对象调用形式:bool scws->set_dict(string filepath[, int mode = SCWS_XDICT_XDB]);
bool scws->add_dict(string filepath[, int mode = SCWS_XDICT_XDB]);
bool scws->has_word(string xattr);
Array scws->get_words(string xattr); 若不存在返回空数组,而不是 false

特别注意,原 scws 在不指定任何词库的情况下会自动搜索 ini(scws.default.fpath) 底下的 dict.xdb/dict.utf8.xdb,如果调用过 add_dict 或 set_dict
则不会再触发该功能,故采用额外词库时原核心词库必须显式地调用才行。

-- [color]新功能用法示例[/color] (php为例) --
1. 自定义词库,含新增核心库不存在的词汇及删除核心库存在词汇的功能
1) 创建相应字符集的词库文件 dict_extra.txt
2) TF/IDF 参考值查询,为方便大家我作了一个工具自动查询!!( [url=http://www.ftphp.com/scws/demo/get_tfidf.php]http://www.ftphp.com/scws/demo/get_tfidf.php[/url])
3) 切记要删除的词用 ! 作为词性,比如以下文件:
代码:
; dict_extra.txt
我是新增词     2.0
再试一个       1.0       1.0    @
; 以下词为删除项
删除           1.0      1.0    !
4) 然后将 dict_extra.txt 在原核心库后加载,如:
$cws->add_dict(init_get("scws.default.fpath").'/dict.xdb');
$cws->add_dict("/path/to/dict_extra.txt", SCWS_XDICT_TXT);
...

2. 非法关键词的判断及获取(可用于过滤。。)
1) 将非法词汇收集整理,作成 txt 格式文件,统一将其属性设为 '*' 即可
2) 按步骤最后加载黑词词库
3) 在 $cws->send_text($text); 之后
调用 $cws->has_word("*"); 来判断是否包含黑词, 该函数效率较高, 只要判断到一个黑词即返回true
调用 $cws->get_words("*"); 则可以获取黑词清单,显式地告诉用户它的内容包含了哪些非法词汇。。。
[/quote][hr]
你好,请问你。utf8 的词库为什么用不上啊。还有 gbk 词库 和 utf8 的容量区别也很大。有没有跟gbk 编码的一样 utf8词库呢?
查找这个用户的全部帖子
引用并回复
发表回复 


论坛跳转:


正在浏览该主题的用户: 1 个游客