1. jar包不存在于maven仓库 需要添加到仓库中 或者使用本地依赖 。
2. 在使用solr配置IK和pinyin4j的组合时,发现IKAnalyzer2012FF_u1 中并没有TokenizerFactory ,无法生成拼音自动分词转换的fired ,因为项目时间紧,后来放弃了给Ik编写一个TokenizerFactory 加到Jar包的想法(其实就是编译好麻烦) ,然后直接在solr中设置一个普通域 在服务器分词之后放入solr域的形式
依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/** * solr用方法 * 讲文字转换为拼音 * 字符串为 拼接 中间使用 分割 每个字符串转换为首字母与全拼形势 * 例: 文字 ==》 wenzi wz * 2017/4/6 更改 首字母拼写放弃使用 * * @param initString * @return * @throws IOException */ @Override public String pinYinAnalysis(String initString) throws IOException { StringBuffer sb = new StringBuffer(); if(StringUtils.isBlank(initString)){ return ""; } StringReader sr=new StringReader(initString); IKSegmenter ik=new IKSegmenter(sr, true); Lexeme lex=null; while((lex=ik.next())!=null){ String lexemeText = lex.getLexemeText(); //匹配年份 if (lexemeText.matches("(19[0-9][0-9]|200|201[0-9])")){ lexemeText = lexemeText.replaceAll("[^0-9]",""); } sb.append( PinYinUtils.cnToPinYin(lex.getLexemeText())).append(" "); // .append(PinYinUtils.cnToFirstSpell(lex.getLexemeText())).append(" "); } return sb.toString(); }
|
3 。 拼音转换工具类
/、、、、、、、、、、、、、、、、、、、、、、、
package com.maizhong.common.utils;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
/**
* chinese2pinyin 工具包 提供汉字转换拼音功能
*
* Created by YangF on 2017/4/6.
*/
public class PinYinUtils {
public static void main(String[] args) {
cnToPinYin("她在说谎");
}
/**
* 获取汉字串拼音,英文字符不变
*
* @param chinese 汉字串
* @return 汉语拼音
*/
public static String cnToPinYin(String chinese) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 128) {
try {
pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(arr[i]);
}
}
return pybf.toString();
}
/**
* 获取汉字串拼音首字母,英文字符不变
*
* @param chinese 汉字串
* @return 汉语拼音首字母
*/
public static String cnToFirstSpell(String chinese) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 128) {
try {
String[] _t = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
if (_t != null) {
pybf.append(_t[0].charAt(0));
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(arr[i]);
}
}
return pybf.toString().replaceAll("\\W", "").trim();
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、在网上找到factory代码 但是并没有测试 先记录一下 代码来自 http://bbs.csdn.net/topics/390982377
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package org.wltea.analyzer.lucene;
import java.io.Reader;
import java.util.Map;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.util.TokenizerFactory;
import org.apache.lucene.util.AttributeFactory;
public class IKTokenizerFactory extends TokenizerFactory{
private final boolean useSmart;
public IKTokenizerFactory(Map
super (args);
this .useSmart = getBoolean(args, "useSmart" , false );
}
@Override
public Tokenizer create(AttributeFactory factory, Reader in) {
return new IKTokenizer(in, this .useSmart);
}
}
|
1
2
3
4
5
6
7
8
9
10
|
< fieldType name = "ik_cn" class = "solr.TextField" >
< analyzer >
< tokenizer class = "org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart = "true" />
< filter class = "solr.StopFilterFactory" ignoreCase = "true" words = "org/apache/lucene/analysis/cn/smart/stopwords.txt" />
< filter class = "solr.SynonymFilterFactory" synonyms = "synonyms.txt" ignoreCase = "true" expand = "true" />
analyzer >
fieldType >
|
上方代码来自 http://bbs.csdn.net/topics/390982377