|
[2010] SCWS-1.1.2 发布,支持文本词典实现自定义词库啦!!
|
|
2010-01-29, 02:07 PM
(这个帖子最后修改于: 2010-05-09 02:16 AM by hightman.)
帖数: #1
|
|||
|
|||
|
2010年,scws 长了一岁,加上了翘首以盼的删减词库功能,该功能通过变通的办法解决,并非直接修改核心词库。下面详细介绍一下 scws-1.1.0 的更新日志及用法举例(示例以PHP扩展语言为例)。
-- scws-1.1.2 发布于 2010-5-9 这是一个小bug修正版,修正在非内存模式词库时会导致人名识别失败的bug. -- scws-1.1.1 发布于 2010-3-4 这是一个bug修正版,1.1.0 中存在内存泄露的重大bug。 -- scws-1.1.0 发布于 2010-1-29 项目主页:http://www.ftphp.com/scws 项目演示:http://www.ftphp.com/scws/demo/v4.php(含自定词汇功能) TF/IDF简易查询计算器:http://www.ftphp.com/scws/demo/get_tfidf.php (用于新词添加时不知怎么设tf,idf的话) 基于SCWS自动分类演示:http://www.ftphp.com/scws/demo/a.php(输入一段文字系统自动给出最合适的分类建议) -- 新增或变动的 API -- 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) 删除词作法,请将词性设为“!“,则表示该词设为无效,即使在其它核心库中存在该词也视为无效。 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 参考值查询,为方便大家我作了一个工具自动查询!!( http://www.ftphp.com/scws/demo/get_tfidf.php) 3) 切记要删除的词用 ! 作为词性,比如以下文件: 代码: ; 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, 04:39 PM
帖数: #2
|
|||
|
|||
|
RE: [2010] SCWS-1.1.2 发布,支持文本词典实现自定义词库啦!!
你好,有在吗,请问你们的程序能不能包装一个c版本的dll,让别的程序调用.不只是PHP
|
|||
|
|
| 可能相关的主题... | |||||
| 主题: | 作者 | 回复数: | 人气: | 最近发表 | |
| 2010.5.12更新了规则集,包含在最新的1.1.2包中 | hightman | 3 | 2,420 |
2010-05-13 09:50 PM 最近发表: xiaolan |
|
| 2008/12 发布 scws-1.0.1 修订版, 并推出 scws 项目站点 | hightman | 2 | 16,649 |
2009-08-17 11:15 PM 最近发表: yueliangdao0608 |
|

搜索
会员列表
日历
帮助


