搜狗细胞词库:https://pinyin.sogou.com/dict/
其每个小分类例如【自然科学】下的【物理】都有一个“官方推荐”和若干词库。
下载其中一个词库后,得到的是scel格式文件,需要转换成txt才能使用,可使用在线转换工具批量转换:
https://www.toolnb.com/tools/scelto.html
本次我就下载了搜狗官方推荐的物理词库,转换后命名为phy.txt。
接下来进行载入词库操作:
首先需要Maven配置依赖、导入包:
# <dependencies>标签内加入:
<dependency>
<groupId>com.huaban</groupId>
<artifactId>jieba-analysis</artifactId>
<version>1.0.2</version>
</dependency>
import java.nio.file.{Path, Paths}
import com.huaban.analysis.jieba.{JiebaSegmenter, WordDictionary}
然后main方法里:
val path = Paths.get("/home/maples/phy.txt")
WordDictionary.getInstance().loadUserDict(path)
(之前一直报空指针异常,是因为java版jieba加入自定义词库的文章博客寥寥无几,而且全部都一个写法(估计互相抄的):val path = Paths.get(new File(getClass.getClassLoader.getResource("/home/maples/phy.txt").getPath).getAbsolutePath)这样写我后来定睛一看其实就是想把相对路径转化为绝对路径,所以我直接在Paths.get()写绝对路径就解决了,或使用另一种方法转换为绝对路径(下有介绍)。)
完成。
然后再正常分词:
val jieba = new JiebaSegmenter()
val res:String = jieba.sentenceProcess(text).toString()
jieba分词如果不会可以参考我的另一篇博客:https://blog.csdn.net/LOG_IN_ME/article/details/102685005
【注意】
1、jieba新加入词库中的词需要添加词频并且频率比默认词库里的重复词词频高,jieba才会采用自定义词库的词。(我实际上测试的时候发现只要自定义词库词频设为1即可)
2、Paths.get()里面的路径必须是绝对路径,我们可以使用getCanonicalPath()函数或getAbsolutePath()函数将相对路径转换为绝对路径,不过这两个函数的区别在于:
- 对于getCanonicalPath()函数,“."就表示当前的文件夹,而”..“则表示当前文件夹的上一级文件夹。
- 对于getAbsolutePath()函数,则不管”.”、“..”,返回当前的路径加上你在new File()时设定的路径。
详细解读可以参考:https://blog.csdn.net/u010261322/article/details/44219781
例如我写的,new File()相对文件路径是从工程文件夹根目录开始的(WordCut文件夹):
val path = Paths.get(new File("phy.txt").getCanonicalPath())
3、对于自定义词典格式,需要txt格式,且jieba词库内容为每一行是一个词,后面跟词频和词性分别用空格隔开(词频和词性可以没有),搜狗词库就是只有词。
像这样:
阿贝不变量 2
阿贝成象原理 2 n
阿贝尔定理
阿贝尔范畴 1
阿贝尔函数域