Skip to content
更好的jieba java版
Java Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
conf base stage Mar 21, 2018
src 算法修正 Apr 19, 2018
.gitignore 更改 gitignore Mar 22, 2018
LICENSE base stage Mar 21, 2018
README.md Update README.md Mar 26, 2018
pom.xml 更改reademe.md和pom.xml Mar 22, 2018

README.md

better-jieba 基于原结巴分词(java版)的功能扩展版

首先感谢jieba (java)版分词原作者huaban,没有他的辛勤工作,就不会有jieba java版了,更不会有现在的功能扩展版了。

如何安装

  1. 下载本项目
  2. 导航到项目根目录下
  3. 执行mvn clean && mvn install -DskipTests即可安装到本地仓库
  4. 通过在pom.xml文件中设置如下依赖即可使用
<dependency>
  <groupId>org.manlier</groupId>
  <artifactId>better-jieba</artifactId>
  <version>1.0.0-SNAPSHOT</version>
</dependency>

功能扩展

本项目为原java版添加了一些api,和python原版的功能一致,具体如下:

添加/修改的api

  • 获得建议的频率

    1. long suggestFreq(boolean tune, String segment)
    2. long suggestFreq(boolean tune, String... segments)
  • 添加词语到字典,若字典已存在该词语,则修改它的频率

    1. void addWord(String word, long actualFreq)
    2. void addWord(String word)
  • 从字典中删除词语

    • void delWord(String word)
  • 导入用户字典

    • void loadUserDict(DictSource dictSource) throws IOException
  • 分词可控制是否启用HMM新词发现,默认开启

    1. List<SegToken> process(String paragraph, SegMode mode)
    2. List<SegToken> process(String paragraph, SegMode mode, boolean HMM)
    3. Listt<String> sentenceProcess(String sentence)
    4. Listt<String> sentenceProcess(String sentence, boolean HMM)

以上api的用法均可在jieba 的READEME.md文件中找到

将字典加载功能抽象到DictSource类中

为了方便对各种字典源进行导入,将此功能进行了抽象。默认提供了 InputStreamDictSourceFileDictSourcePureDictSource,使用方式如下所示:

示例 1:InputStreamDictSource的使用

wordDict.loadUserDict(new InputStreamDictSource(Files.newInputStream("user.dict")));

示例 2:FileDictSource的使用

wordDict.loadUserDict(new FileDictSource(Paths.get("conf")));

FileDictSource接受的参数可为目录或文件路径,若为目录,它会寻找指定目录下后缀名为.dict的文件,它并不支持递归搜索

示例 3:PureDictSource的使用

List<String> records = new ArrayList<>();

records.add("台北 5");
records.add("台中 3");

wordDict.loadUserDict(new PureDictSource(records));

若要导入其他字典源,可继承DictSource接口。

禁用默认字典

通过System.setProperty("jieba.defaultDict", "false")或者设置环境参数-Djieba.defaultDict=false可禁用默认字典。

示例:

System.setProperty("jieba.defaultDict", "false");

WordDictionary wordDict = WordDictionary.getInstance();

Assert.assertTrue(!wordDict.isUseDefaultDict());

wordDict.loadUserDict(new FileDictSource(Paths.get("conf")));

注意: 禁用之后必须载入用户字典,java版本目前不能在没有字典的情况下完美运行

可注册订阅者

借用rxjava2,你可以注册订阅者,用于在词典发生变更时发送通知,这对于来自数据库的字典源来说非常重要。

例如:

JiebaSegmenter segmenter = new JiebaSegmenter();

Disposable disposable = segmenter.subscribe(System.out::println);

segmenter.suggestFreq(true,"", "");

将收到如下的输出,表示词中将的频率发生变化,变为了494

[Candidate [key=中将, freq=494.0]]

相关项目

better-jieba-solr better-jieba到solr的适配包,支持HBase字典源导入 jieba python原版

You can’t perform that action at this time.