庖丁中文分词出现的问题
来源:互联网 发布:中文相似度 算法 编辑:程序博客网 时间:2024/05/21 21:36
安装庖丁会出现一系列问题,最后找到这篇文章来装庖丁:http://blog.163.com/sky_jun1016/blog/static/29994156201071274459377/,问题确实少了不少,最后要发布时发现搜索欢迎您、不锈钢等3个字的词时发现页面不见了,搜索共和国、圆明园之类的词时有页面,记录为0。
剖析:当你抓取的页面数据中含有3字词(如我搜索的欢迎您、不锈钢等)时,返回的结果没有页面。当你抓取的页面数据中不含3字词时,返回0记录的页面。
具体看后台报的错误,逐步追踪发现是Query有问题,追踪过程花了好长时间,因为nutch的匹配过程是多线程处理的,......
定位到了query,最后查到它的源头是在org.apache.nutch.analysis.NutchAnalysis的final public Query parseByLucene(Configuration conf) throws ParseException方法中,看代码:
Query query = new Query(conf);
if (queryString.length() > 0) {
// lucene分词
org.apache.lucene.queryParser.QueryParser parserLucene =
new org.apache.lucene.queryParser.QueryParser("", analyzer);
org.apache.lucene.search.Query q = null;
try {
q = parserLucene.parse(queryString); <<=========================================================中文分词截取
} catch (org.apache.lucene.queryParser.ParseException e) {
e.printStackTrace();
}
String termStrings = q.toString();
if (termStrings.indexOf(" ") > -1)
termStrings = termStrings.substring(1, termStrings.length()-1);
String[] terms = termStrings.split(" ");
for (int i = 0; i < terms.length; i++) {
String[] tems = {terms[i]};
query.addRequiredPhrase(tems, Clause.DEFAULT_FIELD);
}
}
return query; 《===========================================返回分词
跟踪发现query中得到的值是:不锈 不锈钢,有两个以致于后面的程序会出现String index out of range: -2的错误。
再往前跟踪,最上面的query的值为不锈钢、q的值为不锈 不锈钢,找到解决办法了。修改代码如下:
final public Query parseByLucene(Configuration conf) throws ParseException {
Query query = new Query(conf);
System.out.println("queryString="+queryString);
if (queryString.length() > 0) {
// lucene
org.apache.lucene.queryParser.QueryParser parserLucene = new org.apache.lucene.queryParser.QueryParser(
"", analyzer);
org.apache.lucene.search.Query q = null;
try {
q = parserLucene.parse(queryString);
System.out.println("q="+q);
} catch (org.apache.lucene.queryParser.ParseException e) {
e.printStackTrace();
}
String termStrings = q.toString();
if (termStrings.indexOf(" ") > -1)
termStrings = termStrings.substring(1, termStrings.length() - 1);
String[] terms = termStrings.split(" ");
List<String> list = new ArrayList<String>();
for(int i = 0; i < terms.length; i++){//判断字符串包含问题
if(i < terms.length-1){
if(terms[i+1].indexOf(terms[i]) <= -1)//terms[i]不被terms[i+1]包含,收录terms[i]
list.add(terms[i]);
}else{
list.add(terms[i]);
}
}
if(null != list){
for (String term : list) {
String[] tems = { term };
query.addRequiredPhrase(tems, Clause.DEFAULT_FIELD);
}
}
}
System.out.println("---------------------------|query:" + query + "|-------------------------------");
return query;
}
好吧,就这样!
还需要注意一点:添加自定义分词后,需要删除.compiled文件夹。
- 庖丁中文分词出现的问题
- Lucene加入庖丁分词器对中文的支持
- Nutch 中文分词 庖丁分词组件
- 庖丁系统的分词原理
- 庖丁分词的源码分析
- 庖丁系统的分词原理
- 中文分词的应用 新浪和庖丁两种方式对比
- 基于庖丁分词的TFIDF计算
- 庖丁中文分词入门(一) 效果体验
- 基于hadoop的分布式分词程序(庖丁分词)
- 中文分词的核心问题
- 庖丁分词实例中遇到的错误及解决方案
- 使用Python+jieba和java+庖丁分词在Spark集群上进行中文分词统计
- 使用Python+jieba和java+庖丁分词在Spark集群上进行中文分词统计
- hadoop下利用庖丁分词实现分词+wordcount的环境配置
- solr配置中文分词遇到的问题
- 基于Syntaxnet的中文分词问题
- IKAnalyzer和庖丁分词性能对比
- Java虚拟机(JVM)中的内存设置详解
- jquery hover IE9
- maps和multimaps
- varchar排序
- 压缩感知的几位鼻祖
- 庖丁中文分词出现的问题
- MFC程序执行过程剖析
- svn 解锁 使用TortoiseSVN
- windos下的文件到linux下用脚本处理
- 移动支付公司Beamit获240万美元投资 贝佐斯及施密特等参投
- 公布Windows Azure新的数据中心选择
- DispatchAction
- Android中的httpClient使用及JSON格式数据的解析方法
- GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue、Adj...