1. 我想用php做一个聊天机器人,我调用别人的API实现了中文分词,我要怎样构建自己的数据库呢
可以用SimSimi API:http://developer.simsimi.com/(不需要数据库)。
根据提示进行注册(注册地址:http://developer.simsimi.com/signUp)。
登录后访问:http://developer.simsimi.com/apps,
点击[Get a 7 days Trial Key],你就会获得一个Trial Key(有效期为7天),然后直接
$key='';//你的TrialKey
$lang='';//语言
$msg='';//用户说的话
$res=file_get_contents('http://sandbox.api.simsimi.com/request.p?key='.$key.'&lc='.$lang.'&ft=1.0&text='.$msg);
或者你要购买一个Paid Key,也可以。
在http://developer.simsimi.com/apps中,点击[Get Paid Key],就可以购买。
只是代码要改为(响应地址不同):
$key='';//你的PaidKey
$lang='';//语言
$msg='';//用户说的话
$res=file_get_contents('http://api.simsimi.com/request.p??key='.$key.'&lc='.$lang.'&ft=1.0&text='.$msg);
就可以了。注意php.ini中,allow_url_fopen要为On:
allow_url_fopen=On
然后会返回一个JSON字符串,与下面类似:
{
"result":100,
"response":"SimSimi的回答",
"id":本次会话的标识符(int),
"msg":"响应描述"
}
相应描述与result的值相关。
100:OK.//成功
400:BadRequest.//参数错误
401:Unauthorized.//Key不存在
404:Notfound.//页面不存在
500:ServerError.//服务器出错
参见:SimSimi API:http://developer.simsimi.com/api
谢谢!
2. 中文分词的常见项目
功能性能 功能描述:1.新词自动识别
对词典中不存在的词,可以自动识别,对词典的依赖较小;
2.词性输出
分词结果中带有丰富的词性;
3.动态词性输出
分词结果中的词性并非固定,会根据不同的语境,赋予不同的词性;
4.特殊词识别
比如化学、药品等行业词汇,地名、品牌、媒体名等;
5.智能歧义解决
根据内部规则,智能解决常见分词歧义问题;
6.多种编码识别
自动识别各种单一编码,并支持混合编码;
7.数词量词优化
自动识别数量词; 性能介绍:处理器:AMD Athlon II x2 250 3GHZ
单线程大于833KB/s,多线程安全。 一个PHP函数实现中文分词。使分词更容易,使用如下图:
Paoding(庖丁解牛分词)基于java的开源中文分词组件,提供lucene和solr 接口,具有极 高效率和 高扩展性。引入隐喻,采用完全的面向对象设计,构思先进。
高效率:在PIII 1G内存个人机器上,1秒可准确分词 100万汉字。
采用基于 不限制个数的词典文件对文章进行有效切分,使能够将对词汇分类定义。
能够对未知的词汇进行合理解析。
仅支持Java语言。 MMSEG4J基于Java的开源中文分词组件,提供lucene和solr 接口:
1.mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。
2.MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。 盘古分词是一个基于.net 平台的开源中文分词组件,提供lucene(.net 版本) 和HubbleDotNet的接口
高效:Core Duo 1.8 GHz 下单线程 分词速度为 390K 字符每秒
准确:盘古分词采用字典和统计结合的分词算法,分词准确率较高。
功能:盘古分词提供中文人名识别,简繁混合分词,多元分词,英文词根化,强制一元分词,词频优先分词,停用词过滤,英文专名提取等一系列功能。 jcseg是使用Java开发的一个中文分词器,使用流行的mmseg算法实现。
1。mmseg四种过滤算法,分词准确率达到了98.4%以上。
2。支持自定义词库。在lexicon文件夹下,可以随便添加/删除/更改词库和词库内容,并且对词库进行了分类,词库整合了《现代汉语词典》和cc-cedict辞典。
3。词条拼音和同义词支持,jcseg为所有词条标注了拼音,并且词条可以添加同义词集合,jcseg会自动将拼音和同义词加入到分词结果中。
4。中文数字和分数识别,例如:"四五十个人都来了,三十分之一。"中的"四五十"和"三十分之一",并且jcseg会自动将其转换为对应的阿拉伯数字。
5。支持中英混合词的识别。例如:B超,x射线。
6。支持基本单字单位的识别,例如2012年。
7。良好的英文支持,自动识别电子邮件,网址,分数,小数,百分数……。
8。智能圆角半角转换处理。
9。特殊字母识别:例如:Ⅰ,Ⅱ
10。特殊数字识别:例如:①,⑩
11。配对标点内容提取:例如:最好的Java书《java编程思想》,‘畅想杯黑客技术大赛’,被《,‘,“,‘标点标记的内容。
12。智能中文人名识别。中文人名识别正确率达94%以上。
jcseg佩带了jcseg.properties配置文档,使用文本编辑器就可以自主的编辑其选项,配置适合不同应用场合的分词应用。例如:最大匹配分词数,是否开启中文人名识别,是否载入词条拼音,是否载入词条同义词……。 friso是使用c语言开发的一个中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入到其他程序中,例如:MySQL,PHP等。并且提供了一个php中文分词扩展robbe。
1。只支持UTF-8编码。【源码无需修改就能在各种平台下编译使用,加载完20万的词条,内存占用稳定为14M。】。
2。mmseg四种过滤算法,分词准确率达到了98.41%。
3。支持自定义词库。在dict文件夹下,可以随便添加/删除/更改词库和词库词条,并且对词库进行了分类。
4。词库使用了friso的Java版本jcseg的简化词库。
5。支持中英混合词的识别。例如:c语言,IC卡。
7。很好的英文支持,电子邮件,网址,小数,分数,百分数。
8。支持阿拉伯数字基本单字单位的识别,例如2012年,5吨,120斤。
9。自动英文圆角/半角,大写/小写转换。
并且具有很高的分词速度:简单模式:3.7M/秒,复杂模式:1.8M/秒。
3. php 内搜索,中文字符拆分
这个估计就要用到分词库了.有点难度.单就你这个例子来说简单,但是要写的适用其他情况就难了.
4. jieba分词如何只使用自定义词典(php)
最复杂的就是这一行了:
(word for word in jieba.cut(line,HMM=True)if word not in stop and len(word.strip())>1)
jieba.cut(line)将一行字符串,分割成一个个单词
word for word in jieba.cut(line,HMM=True)是一个Python的表理解,相当于for循环遍历分割好的一个个单词
if word not in stop and len(word.strip())>1这仍然是表理解的一部分,如果满足条件,就把单词加入到一个新的列表中,如果不满足就丢弃,
word not in stop单词不在停用词当中
len(word.strip())>1单词去掉首尾的空格、标点符号后的长度大于1。
5. sphinx和solr哪个更适合php站点
## ES 缺点
基于java,会有一些java的常见问题需要注意,比如gc
单纯执行速度上比C写的sphinx慢
## sphinx 优点
纯粹,没有什么花哨的其他功能
C写的,速度快
新版本加了分布式索引、动态更新索引等功能
## 下面列举Es比sphinx优秀的部分
1、部署简单,虽然sphinx部署也挺简单,但是在书写配置的时候,你会发现,sphinx的配置是要写好后,重启sphinx,而Elasticsearch针对某个索引的配置,是可以动态写入的。
2、调试简单,sphinx有命令行工具可以调试,而Elasticsearch使用的是http接口进行调试,不需要专门的API类,几行php代码就可以写一个Elasticsearch的API。
3、可视化工具比较多,有收费的,也有免费的,比如kibana head marvel。
4、提供结构化的JSON查询语句,易读性强
5、Es可以保留源数据(可选),也就是说,你可以不需要mysql的支持,就可以完成整个搜索过程,即使你不需要这个功能,在调试的时候,还是让人感到非常便利,不用将查询结果到数据库匹配一下。
6、Es可以动态更新全文索引,动态更新单个记录,而不像sphinx一样需要重建全部
7、对UTF8的支持是不需要单独配置的,天生为各种自然语言设计,而不仅仅是欧系语言
## 从中文分词上来说
首先我觉得分词最重要的基本都是词库,分词算法两个工具基本都可以使用。
lucene 支持很多分词工具,比如
word https://github.com/ysc/word
比如ik https://github.com/medcl/elasticsearch-analysis-ik
这两个工具最近都很活跃,因为Es更新2.0 和 2.1
比较分词区别(sphinx可能有误):
sphinx分词 我不太熟悉它的机制,多数情况下我使用scws分词,发送给sphinx,然后设置匹配规则,比如最大匹配
Es的全文索引是基于分词的,也就是事先分好词,每个词对应某些记录,自动进行TF/IDF的运算,得到一个评分后返回,当然这个评分可以改(sphinx同样支持修改评分)
另一方面ES也支持类似sphinx的匹配方式,模糊匹配,一般会一起使用,一个词不在分词库中的时候,或者用户写错了,就用fuzzy,所以Es在功能上,应该和sphinx不会有太多差别,而且要更多。
## 后期维护上:
sphinx的配置文件在mysql分表之后,维护起来是比较麻烦的,你可以用php脚本当做配置文件,这样会好很多。
Es的索引是可以主动发给它去建立的(通过http接口),分表之后,它不关心数据库状态和结构。新增字段可以热更新。
## 扩展性上:
Es和sphinx都支持分布式索引,扩展性都没有问题
两者都支持别名,Es的别名加上动态建立索引,使得更换索引结构或者重建索引后,支持0宕机时间。而sphinx的rotate选项可以动态更新索引(不知道能不能动态创建索引,因为sphinx我在使用的时候,索引都要求写在配置文件里。
性能方面没有测试数据。从直观感受上sphinx要快一些。
## 文档方面
感觉两个工具都差不多,中文资料一般般,英文资料很全。
6. 中文分词 词库下载
北大论坛资料,可以一看:
http://www.pkucn.com/viewthread.php?tid=141164&extra=page%
3D1&page=2
亦可参看台湾(中文词知识库小组)的资料:
http://rocling.iis.sinica.e.tw/CKIP/publication.htm
希望合用。
7. php 要从文章内容,提取关键词,要怎么写!
提取关键词,你必须得有个词库。然后根据词库匹配文章内容。词库越多效率越低,文章内容长度越长效率越低。
网上针对php有相干的分词算法,你可以搜
”SCWS
中文分词“
来看一下。你可以根据里面的例子来做扩展
8. php+mysql中拆分搜索问题
你这个需求描述不清,麻烦说清楚!这个关键词分割有什么要求,从你举的列子看看不出你的要求,有歧义!可以有多种理解方式,第一种:尽量让A少分割 第二种:将A 2个字符分割,没有就再分!
这个分割的规则你没说明白!
9. php如何实现离线翻译,包括逐词,逐句,最好可以全文翻译(不需要进行预翻译的那种)欢迎各种大虾指教。
那就得需要离线词库的支持。而现在应该没有免费的。
10. php 同义词互换 伪原创
预处理我就跳过了,其实主要是用到str_replace(find, replace, str);
<?php
$toWords=array("恳求","悲悼","悲痛","悲伤","顺序","受饿","靠拢");
$fromWords=array("哀求","哀伤","哀思","哀痛","挨次","挨饿","挨近");
$str="我哀伤地哀求她,她只是哀痛地哀思,挨次把我们挨饿的事情一一说来,我觉得死神正在挨近...";
echo$str."<br/> ";
$str1=str_replace($fromWords,$toWords,$str);
echo$str1;
?>