您好作者,
对于将jcseg作为elasticsearch的分词器,想实现中文简体和繁体的相互检索,可行的方法是什么呢?希望您能给些思路啊,看介绍说jcseg有简体和繁体的转换工具什么的没有找到啊。
里面确实有个简繁体的转换程序,不过不太精确,比较久前就关闭该功能了。
你可以设置繁体字为简体字的同义词,然后通过同义词合并来实现这个功能,或者反过来。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
写个程序自动生成下面的格式(运行一下也就一两分钟的事情):
简体词条1,转换后的繁体词条1
简体词条2,转换后的繁体词条2
然后通过jcseg的同义词合并功能,繁体词条在索引过程中变成简体词条,检索的时候简体或者繁体词条都会转成简体来检索。
理论上直接设置词条的长度这个方案不不能工作的,这个问题是下个版本的重点。
我不知道你怎么设置的,如果知识通过设置长度工作了,应该是es截取了拼音的长度,会影响检索的结果。
不是的,是bug,jcseg的很多词条的都是机器组成的,难免有些错误。
如果索引没问题,那这样能工作挺好的,分享下你的代码?
@狮子的魂 好的,通过读代码,切分后追加拼音是在/jcseg-core/src/main/java/org/lionsoul/jcseg/tokenizer/ASegment.java类下的方法appendWordFeatures中
我在ASegment.java中声明了两个私有变量
private static int pinyinLengthTmp;
private static String pinyinTmp;
然后对appendWordFeatures方法做了改造:`/**
* check and append the pinyin and the synonyms words of the specified word
*
* @chancelai word
/
protected void appendWordFeatures( IWord word )
{
//add the pinyin to the pool
/ if ( config.APPEND_CJK_PINYIN
&& config.LOAD_CJK_PINYIN && word.getPinyin() != null ) {
IWord pinyin = new Word(word.getPinyin(), IWord.T_CJK_PINYIN);
pinyin.setPosition(word.getPosition());
pinyin.setEntity(word.getEntity());
wordPool.add(pinyin);
}*/
if ( config.APPEND_CJK_PINYIN
&& config.LOAD_CJK_PINYIN && word.getPinyin() != null ) {
pinyinLengthTmp = word.getLength();
pinyinTmp = word.getPinyin();
if (pinyinTmp.contains(" ")) {
IWord pinyin = new Word(pinyinTmp.replace(" ", ""), IWord.T_CJK_PINYIN);
pinyin.setLength(pinyinLengthTmp);
pinyin.setPosition(word.getPosition());
pinyin.setEntity(word.getEntity());
wordPool.add(pinyin);
} else {
IWord pinyin = new Word(pinyinTmp, IWord.T_CJK_PINYIN);
pinyin.setLength(pinyinLengthTmp);
pinyin.setPosition(word.getPosition());
pinyin.setEntity(word.getEntity());
wordPool.add(pinyin);
}
}
//add the synonyms words to the pool
if ( config.APPEND_CJK_SYN
&& config.LOAD_CJK_SYN && word.getSyn() != null ) {
SegKit.appendSynonyms(wordPool, word);
}
}`
提交评论后代码格式乱了,截图如下:
原词和同义词的字数不同高亮问题也可以解决了,我才修改代码测试了下,好使。
登录 后才可以发表评论