cppjieba_rb 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/cppjieba/.gitignore +17 -0
- data/ext/cppjieba/.travis.yml +21 -0
- data/ext/cppjieba/CMakeLists.txt +28 -0
- data/ext/cppjieba/ChangeLog.md +249 -0
- data/ext/cppjieba/README.md +289 -0
- data/ext/cppjieba/README_EN.md +115 -0
- data/ext/cppjieba/appveyor.yml +32 -0
- data/ext/cppjieba/deps/CMakeLists.txt +1 -0
- data/ext/cppjieba/deps/gtest/CMakeLists.txt +5 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest-death-test.h +283 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest-message.h +230 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest-param-test.h +1421 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest-param-test.h.pump +487 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest-printers.h +796 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest-spi.h +232 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest-test-part.h +176 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest-typed-test.h +259 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest.h +2155 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest_pred_impl.h +358 -0
- data/ext/cppjieba/deps/gtest/include/gtest/gtest_prod.h +58 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-death-test-internal.h +308 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-filepath.h +210 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-internal.h +1226 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-linked_ptr.h +233 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-param-util-generated.h +4822 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-param-util.h +619 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-port.h +1788 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-string.h +350 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-tuple.h +968 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-tuple.h.pump +336 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-type-util.h +3330 -0
- data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-type-util.h.pump +296 -0
- data/ext/cppjieba/deps/gtest/src/.deps/.dirstamp +0 -0
- data/ext/cppjieba/deps/gtest/src/.deps/gtest-all.Plo +681 -0
- data/ext/cppjieba/deps/gtest/src/.deps/gtest_main.Plo +509 -0
- data/ext/cppjieba/deps/gtest/src/.dirstamp +0 -0
- data/ext/cppjieba/deps/gtest/src/gtest-all.cc +48 -0
- data/ext/cppjieba/deps/gtest/src/gtest-death-test.cc +1234 -0
- data/ext/cppjieba/deps/gtest/src/gtest-filepath.cc +380 -0
- data/ext/cppjieba/deps/gtest/src/gtest-internal-inl.h +1038 -0
- data/ext/cppjieba/deps/gtest/src/gtest-port.cc +746 -0
- data/ext/cppjieba/deps/gtest/src/gtest-printers.cc +356 -0
- data/ext/cppjieba/deps/gtest/src/gtest-test-part.cc +110 -0
- data/ext/cppjieba/deps/gtest/src/gtest-typed-test.cc +110 -0
- data/ext/cppjieba/deps/gtest/src/gtest.cc +4898 -0
- data/ext/cppjieba/deps/gtest/src/gtest_main.cc +39 -0
- data/ext/cppjieba/deps/limonp/ArgvContext.hpp +70 -0
- data/ext/cppjieba/deps/limonp/BlockingQueue.hpp +49 -0
- data/ext/cppjieba/deps/limonp/BoundedBlockingQueue.hpp +67 -0
- data/ext/cppjieba/deps/limonp/BoundedQueue.hpp +65 -0
- data/ext/cppjieba/deps/limonp/Closure.hpp +206 -0
- data/ext/cppjieba/deps/limonp/Colors.hpp +31 -0
- data/ext/cppjieba/deps/limonp/Condition.hpp +38 -0
- data/ext/cppjieba/deps/limonp/Config.hpp +103 -0
- data/ext/cppjieba/deps/limonp/FileLock.hpp +74 -0
- data/ext/cppjieba/deps/limonp/ForcePublic.hpp +7 -0
- data/ext/cppjieba/deps/limonp/LocalVector.hpp +139 -0
- data/ext/cppjieba/deps/limonp/Logging.hpp +76 -0
- data/ext/cppjieba/deps/limonp/Md5.hpp +411 -0
- data/ext/cppjieba/deps/limonp/MutexLock.hpp +51 -0
- data/ext/cppjieba/deps/limonp/NonCopyable.hpp +21 -0
- data/ext/cppjieba/deps/limonp/StdExtension.hpp +157 -0
- data/ext/cppjieba/deps/limonp/StringUtil.hpp +365 -0
- data/ext/cppjieba/deps/limonp/Thread.hpp +44 -0
- data/ext/cppjieba/deps/limonp/ThreadPool.hpp +86 -0
- data/ext/cppjieba/dict/README.md +31 -0
- data/ext/cppjieba/dict/hmm_model.utf8 +34 -0
- data/ext/cppjieba/dict/idf.utf8 +258826 -0
- data/ext/cppjieba/dict/jieba.dict.utf8 +348982 -0
- data/ext/cppjieba/dict/pos_dict/char_state_tab.utf8 +6653 -0
- data/ext/cppjieba/dict/pos_dict/prob_emit.utf8 +166 -0
- data/ext/cppjieba/dict/pos_dict/prob_start.utf8 +259 -0
- data/ext/cppjieba/dict/pos_dict/prob_trans.utf8 +5222 -0
- data/ext/cppjieba/dict/stop_words.utf8 +1534 -0
- data/ext/cppjieba/dict/user.dict.utf8 +4 -0
- data/ext/cppjieba/include/cppjieba/DictTrie.hpp +277 -0
- data/ext/cppjieba/include/cppjieba/FullSegment.hpp +93 -0
- data/ext/cppjieba/include/cppjieba/HMMModel.hpp +129 -0
- data/ext/cppjieba/include/cppjieba/HMMSegment.hpp +190 -0
- data/ext/cppjieba/include/cppjieba/Jieba.hpp +130 -0
- data/ext/cppjieba/include/cppjieba/KeywordExtractor.hpp +153 -0
- data/ext/cppjieba/include/cppjieba/MPSegment.hpp +137 -0
- data/ext/cppjieba/include/cppjieba/MixSegment.hpp +109 -0
- data/ext/cppjieba/include/cppjieba/PosTagger.hpp +77 -0
- data/ext/cppjieba/include/cppjieba/PreFilter.hpp +54 -0
- data/ext/cppjieba/include/cppjieba/QuerySegment.hpp +89 -0
- data/ext/cppjieba/include/cppjieba/SegmentBase.hpp +46 -0
- data/ext/cppjieba/include/cppjieba/SegmentTagged.hpp +23 -0
- data/ext/cppjieba/include/cppjieba/TextRankExtractor.hpp +190 -0
- data/ext/cppjieba/include/cppjieba/Trie.hpp +174 -0
- data/ext/cppjieba/include/cppjieba/Unicode.hpp +227 -0
- data/ext/cppjieba/test/CMakeLists.txt +5 -0
- data/ext/cppjieba/test/demo.cpp +80 -0
- data/ext/cppjieba/test/load_test.cpp +54 -0
- data/ext/cppjieba/test/testdata/curl.res +1 -0
- data/ext/cppjieba/test/testdata/extra_dict/jieba.dict.small.utf8 +109750 -0
- data/ext/cppjieba/test/testdata/gbk_dict/hmm_model.gbk +34 -0
- data/ext/cppjieba/test/testdata/gbk_dict/jieba.dict.gbk +348982 -0
- data/ext/cppjieba/test/testdata/jieba.dict.0.1.utf8 +93 -0
- data/ext/cppjieba/test/testdata/jieba.dict.0.utf8 +93 -0
- data/ext/cppjieba/test/testdata/jieba.dict.1.utf8 +67 -0
- data/ext/cppjieba/test/testdata/jieba.dict.2.utf8 +64 -0
- data/ext/cppjieba/test/testdata/load_test.urls +2 -0
- data/ext/cppjieba/test/testdata/review.100 +100 -0
- data/ext/cppjieba/test/testdata/review.100.res +200 -0
- data/ext/cppjieba/test/testdata/server.conf +19 -0
- data/ext/cppjieba/test/testdata/testlines.gbk +9 -0
- data/ext/cppjieba/test/testdata/testlines.utf8 +8 -0
- data/ext/cppjieba/test/testdata/userdict.2.utf8 +1 -0
- data/ext/cppjieba/test/testdata/userdict.english +2 -0
- data/ext/cppjieba/test/testdata/userdict.utf8 +8 -0
- data/ext/cppjieba/test/testdata/weicheng.utf8 +247 -0
- data/ext/cppjieba/test/unittest/CMakeLists.txt +24 -0
- data/ext/cppjieba/test/unittest/gtest_main.cpp +39 -0
- data/ext/cppjieba/test/unittest/jieba_test.cpp +133 -0
- data/ext/cppjieba/test/unittest/keyword_extractor_test.cpp +79 -0
- data/ext/cppjieba/test/unittest/pos_tagger_test.cpp +41 -0
- data/ext/cppjieba/test/unittest/pre_filter_test.cpp +43 -0
- data/ext/cppjieba/test/unittest/segments_test.cpp +256 -0
- data/ext/cppjieba/test/unittest/textrank_test.cpp +86 -0
- data/ext/cppjieba/test/unittest/trie_test.cpp +177 -0
- data/ext/cppjieba/test/unittest/unicode_test.cpp +43 -0
- data/lib/cppjieba_rb/version.rb +1 -1
- metadata +125 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74faf109bce12cd386acb5d2ad03ab4fde55a68cdb07a723a5af1f5b2528f3d5
|
4
|
+
data.tar.gz: c4a58470ef8e352cad688b9814080c37b332e46a93987e536387a94304ad1383
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 925ba793289f09a922451f6717b18a769080be4ab132a23edb236e4b91760251b67237dc2b6505c1aa39988d60294ff1ac07638c40a46916f6064be2cd71a425
|
7
|
+
data.tar.gz: e5f9dfcd2d341dd880bfc9aceee265abf6cf1e1d1a3428f807b1cd810691bab8e24946c974fef1260f89aebf03e82e85e518fd961905fd1150eac3ad6108c7ca
|
@@ -0,0 +1,21 @@
|
|
1
|
+
language: cpp
|
2
|
+
before_install:
|
3
|
+
- if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get install cmake; fi
|
4
|
+
script:
|
5
|
+
- mkdir build
|
6
|
+
- cd build
|
7
|
+
- cmake ..
|
8
|
+
- make
|
9
|
+
- make test
|
10
|
+
os:
|
11
|
+
- linux
|
12
|
+
- osx
|
13
|
+
compiler:
|
14
|
+
- clang
|
15
|
+
- gcc
|
16
|
+
notifications:
|
17
|
+
recipients:
|
18
|
+
- i@yanyiwu.com
|
19
|
+
email:
|
20
|
+
on_success: change
|
21
|
+
on_failure: always
|
@@ -0,0 +1,28 @@
|
|
1
|
+
PROJECT(CPPJIEBA)
|
2
|
+
|
3
|
+
CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
|
4
|
+
|
5
|
+
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/deps
|
6
|
+
${PROJECT_SOURCE_DIR}/include)
|
7
|
+
|
8
|
+
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
9
|
+
set (CMAKE_INSTALL_PREFIX "/usr/local/cppjieba" CACHE PATH "default install path" FORCE )
|
10
|
+
endif()
|
11
|
+
|
12
|
+
ADD_DEFINITIONS(-O3 -Wall -g)
|
13
|
+
IF(APPLE) # mac os
|
14
|
+
ADD_DEFINITIONS(-std=c++0x)
|
15
|
+
endif()
|
16
|
+
|
17
|
+
# cmake .. -DENC=GBK
|
18
|
+
# IF (DEFINED ENC)
|
19
|
+
# ADD_DEFINITIONS(-DCPPJIEBA_${ENC})
|
20
|
+
# ENDIF()
|
21
|
+
|
22
|
+
ADD_SUBDIRECTORY(deps)
|
23
|
+
ADD_SUBDIRECTORY(test)
|
24
|
+
|
25
|
+
ENABLE_TESTING()
|
26
|
+
ADD_TEST(NAME ./test/test.run COMMAND ./test/test.run)
|
27
|
+
ADD_TEST(NAME ./load_test COMMAND ./load_test)
|
28
|
+
ADD_TEST(NAME ./demo COMMAND ./demo)
|
@@ -0,0 +1,249 @@
|
|
1
|
+
# CppJieba ChangeLog
|
2
|
+
|
3
|
+
## v5.0.3
|
4
|
+
|
5
|
+
+ Upgrade [limonp](https://github.com/yanyiwu/limonp) -> v0.6.3
|
6
|
+
|
7
|
+
## v5.0.2
|
8
|
+
|
9
|
+
+ Upgrade [limonp](https://github.com/yanyiwu/limonp) -> v0.6.1
|
10
|
+
|
11
|
+
## v5.0.1
|
12
|
+
|
13
|
+
+ Make Compiler Happier.
|
14
|
+
+ Add PHP, DLang Links.
|
15
|
+
|
16
|
+
## v5.0.0
|
17
|
+
|
18
|
+
+ Notice(**api changed**) : Jieba class 3 arguments -> 5 arguments, and use KeywordExtractor in Jieba
|
19
|
+
|
20
|
+
## v4.8.1
|
21
|
+
|
22
|
+
+ add TextRankExtractor by [@questionfish] in [pull request 65](https://github.com/yanyiwu/cppjieba/pull/65)
|
23
|
+
+ add Jieba::ResetSeparators api for some special situation, for example in [issue67](https://github.com/yanyiwu/cppjieba/issues/67)
|
24
|
+
+ fix [issue70](https://github.com/yanyiwu/cppjieba/issues/70)
|
25
|
+
+ support (word, freq, tag) format in user_dict, see details in [pr74](https://github.com/yanyiwu/cppjieba/pull/74)
|
26
|
+
|
27
|
+
## v4.8.0
|
28
|
+
|
29
|
+
+ rewrite QuerySegment, make `Jieba::CutForSearch` behaves the same as [jieba] `cut_for_search` api
|
30
|
+
+ remove Jieba::SetQuerySegmentThreshold
|
31
|
+
|
32
|
+
## v4.7.0
|
33
|
+
|
34
|
+
api changes:
|
35
|
+
|
36
|
+
+ override Cut functions, add location information into Word results;
|
37
|
+
+ remove LevelSegment;
|
38
|
+
+ remove Jieba::Locate;
|
39
|
+
|
40
|
+
upgrade:
|
41
|
+
|
42
|
+
+ limonp -> v0.6.1
|
43
|
+
|
44
|
+
## v4.6.0
|
45
|
+
|
46
|
+
+ Change Jieba::Locate(deprecated) to be static function.
|
47
|
+
+ Change the return value of KeywordExtractor::Extract from bool to void.
|
48
|
+
+ Add KeywordExtractor::Word and add more overrided KeywordExtractor::Extract
|
49
|
+
|
50
|
+
## v4.5.3
|
51
|
+
|
52
|
+
+ Upgrade limonp to v0.6.0
|
53
|
+
|
54
|
+
## v4.5.2
|
55
|
+
|
56
|
+
+ Upgrade limonp to v0.5.6 to fix hidden trouble.
|
57
|
+
|
58
|
+
## v4.5.1
|
59
|
+
|
60
|
+
+ Upgrade limonp to v0.5.5 to solve macro name conficts in some special case.
|
61
|
+
|
62
|
+
## v4.5.0
|
63
|
+
|
64
|
+
+ 在 Trie 中去除之前糟糕的针对 uint16 优化的用数组代替 map 的设计,
|
65
|
+
该设计的主要问题是前提 unicode 每个字符必须是 uint16 ,则无法更全面得支持 unicode 多国字符。
|
66
|
+
+ Rune 类型从 16bit 更改为 32bit ,支持更多 Unicode 字符,包括一些罕见汉字。
|
67
|
+
|
68
|
+
## v4.4.1
|
69
|
+
|
70
|
+
+ 使用 valgrind 检查内存泄露的问题,定位出一个HMM模型初始化的问题导致内存泄露的bug,不过此内存泄露不是致命问题,
|
71
|
+
因为只会在词典载入的时候发生,而词典载入通常情况下只会被运行一次,故不会导致严重问题。
|
72
|
+
+ 感谢 [qinwf] 帮我发现这个bug,非常感谢。
|
73
|
+
|
74
|
+
## v4.4.0
|
75
|
+
|
76
|
+
+ 加代码容易删代码难,思索良久,还是决定把 Server 功能的源码剥离出这个项目。
|
77
|
+
+ 让 [cppjieba] 回到当年情窦未开时清纯的感觉,删除那些无关紧要的server代码,让整个项目轻装上阵,专注分词的核心代码。
|
78
|
+
+ By the way, 之前的 server 相关的代码,如果你真的需要它,就去新的项目仓库 [cppjieba-server](https://github.com/yanyiwu/cppjieba-server) 找它们。
|
79
|
+
|
80
|
+
## v4.3.3
|
81
|
+
|
82
|
+
+ Yet Another Incompatibility Problem Repair: Upgrade [limonp] to version v0.5.3, fix incompatibility problem in Windows
|
83
|
+
|
84
|
+
## v4.3.2
|
85
|
+
|
86
|
+
+ Upgrade [limonp] to version v0.5.2, fix incompatibility problem in Windows
|
87
|
+
|
88
|
+
## v4.3.1
|
89
|
+
|
90
|
+
+ 重载 KeywordExtractor 的构造函数,可以传入 Jieba 进行字典和模型的构造。
|
91
|
+
|
92
|
+
## v4.3.0
|
93
|
+
|
94
|
+
源码目录布局调整:
|
95
|
+
|
96
|
+
1. src/ -> include/cppjieba/
|
97
|
+
2. src/limonp/ -> deps/limonp/
|
98
|
+
3. server/husky -> deps/husky/
|
99
|
+
4. test/unittest/gtest -> deps/gtest
|
100
|
+
|
101
|
+
依赖库升级:
|
102
|
+
|
103
|
+
1. [limonp] to version v0.5.1
|
104
|
+
2. [husky] to version v0.2.0
|
105
|
+
|
106
|
+
## v4.2.1
|
107
|
+
|
108
|
+
1. Upgrade [limonp] to version v0.4.1, [husky] to version v0.2.0
|
109
|
+
|
110
|
+
## v4.2.0
|
111
|
+
|
112
|
+
1. 修复[issue50]提到的多词典分隔符在Windows环境下存在的问题,从':'修改成'|'或';'。
|
113
|
+
|
114
|
+
## v4.1.2
|
115
|
+
|
116
|
+
1. 新增 Jieba::Locate 函数接口,作为计算分词结果的词语位置信息,在某些场景下有用,比如搜索结果高亮之类的。
|
117
|
+
|
118
|
+
## v4.1.1
|
119
|
+
|
120
|
+
1. 在 class Jieba 中新增词性标注的接口函数 Jieba::Tag
|
121
|
+
|
122
|
+
## v4.1.0
|
123
|
+
|
124
|
+
1. QuerySegment切词时加一层判断,当长词满足IsAllAscii(比如英文单词)时,不进行细粒度分词。
|
125
|
+
2. QuerySegment新增SetMaxWordLen和GetMaxWordLen接口,用来设置二次分词条件被触发的词长阈值。
|
126
|
+
3. Jieba新增SetQuerySegmentThreshold设置CutForSearch函数的词长阈值。
|
127
|
+
|
128
|
+
## v4.0.0
|
129
|
+
|
130
|
+
1. 支持多个userdict载入,多词典路径用英文冒号(:)作为分隔符,就当是向环境变量PATH致敬,哈哈。
|
131
|
+
2. userdict是不带权重的,之前对于新的userword默认设置词频权重为最大值,现已支持可配置,默认使用中位值。
|
132
|
+
3. 【兼容性预警】修改一些代码风格,比如命名空间小写化,从CppJieba变成cppjieba。
|
133
|
+
4. 【兼容性预警】弃用Application.hpp, 取而代之使用Jieba.hpp ,接口也进行了大幅修改,函数风格更统一,和python版本的Jieba分词更一致。
|
134
|
+
|
135
|
+
## v3.2.1
|
136
|
+
|
137
|
+
1. 修复 Jieba.hpp 头文件保护写错导致的 bug。
|
138
|
+
|
139
|
+
## v3.2.0
|
140
|
+
|
141
|
+
1. 使用工程上比较 tricky 的 Trie树优化办法。废弃了之前的 `Aho-Corasick-Automation` 实现,可读性更好,性能更高。
|
142
|
+
2. 新增层次分词器: LevelSegment 。
|
143
|
+
3. 增加MPSegment的细粒度分词功能。
|
144
|
+
4. 增加 class Jieba ,提供可读性更好的接口。
|
145
|
+
5. 放弃了统一接口ISegment,因为统一的接口限制了分词方式的灵活性,限制了一些功能的增加。
|
146
|
+
6. 增加默认开启新词发现功能的可选参数hmm,让MixSegment和QuerySegment都支持开关新词发现功能。
|
147
|
+
|
148
|
+
## v3.1.0
|
149
|
+
|
150
|
+
1. 新增可动态增加词典的API: insertUserWord
|
151
|
+
2. cut函数增加默认参数,默认使用Mix切词算法。关于切词算法详见README.md
|
152
|
+
|
153
|
+
## v3.0.1
|
154
|
+
|
155
|
+
1. 提升兼容性,修复在某些特定环境下的编译错误问题。
|
156
|
+
|
157
|
+
## v3.0.0
|
158
|
+
|
159
|
+
1. 使得 QuerySegment 支持自定义词典(可选参数)。
|
160
|
+
2. 使得 KeywordExtractor 支持自定义词典(可选参数)。
|
161
|
+
3. 修改 Code Style ,参照 google code style 。
|
162
|
+
4. 增加更详细的错误日志,在初始化过程中合理使用LogFatal。
|
163
|
+
5. 增加 Application 这个类,整合了所有CppJieba的功能进去,以后用户只需要使用这个类即可。
|
164
|
+
6. 修改 cjserver 服务,可以通过http参数使用不同切词算法进行切词。
|
165
|
+
7. 修改 make install 的安装目录,统一安装到同一个目录 /usr/local/cppjieba 。
|
166
|
+
|
167
|
+
## v2.4.4
|
168
|
+
|
169
|
+
1. 修改两条更细粒度的特殊过滤规则,将连续的数字(包括浮点数)和连续的字母单独切分出来(而不会混在一起)。
|
170
|
+
2. 修改最大概率法时动态规划过程需要使用的 DAG 数据结构(同时也修改 Trie 的 DAG 查询函数),提高分词速度 8% 。
|
171
|
+
3. 使用了 `Aho-Corasick-Automation` 算法提速 Trie 查找的过程等优化,提升性能。
|
172
|
+
4. 增加词性标注的两条特殊规则。
|
173
|
+
|
174
|
+
## v2.4.3
|
175
|
+
|
176
|
+
1. 更新 [husky] 服务代码,新 [husky] 为基于线程池的服务器简易框架。并且修复当 HTTP POST 请求时 body 过长数据可能丢失的问题。
|
177
|
+
2. 修改 PosTagger 的参数结构,删除暂时无用的参数。并添加使用自定义字典的参数,也就是支持 **自定义词性**。
|
178
|
+
3. 更好的支持 `mac osx` (原谅作者如此屌丝,这么晚才买 `mac` )。
|
179
|
+
4. 支持 `Docker` ,具体请见 `Dockerfile` 。
|
180
|
+
|
181
|
+
## v2.4.2
|
182
|
+
|
183
|
+
1. 适当使用 `vector`, 的基础上,使用`limonp/LocalVector.hpp`作为`Unicode`的类型等优化,约提高性能 `30%`。
|
184
|
+
2. 使 `cjserver` 支持用户自定义词典,通过在 `conf/server.conf` 里面配置 `user_dict_path` 来实现。
|
185
|
+
3. 修复 `MPSegment` 切词时,当句子中含有特殊字符时,切词结果不完整的问题。
|
186
|
+
4. 修改 `FullSegment` 减少内存使用。
|
187
|
+
5. 修改 `-std=c++0x` 或者 `-std=c++11` 时编译失败的问题。
|
188
|
+
|
189
|
+
## v2.4.1
|
190
|
+
|
191
|
+
1. 完善一些特殊字符和字母串的切词效果。
|
192
|
+
2. 提高关键词抽取的速度。
|
193
|
+
3. 提供用户自定义词典的接口。
|
194
|
+
4. 将server相关的代码独立出来,单独放在`server/`目录下。
|
195
|
+
5. 修复用户自定义词典中单字会被MixSegment的新词发现功能给忽略的问题。也就是说,现在的词典是用户词典优先级最高,其次是自带的词典,再其次是新词发现出来的词。
|
196
|
+
|
197
|
+
## v2.4.0
|
198
|
+
|
199
|
+
1. 适配更低级版本的`g++`和`cmake`,已在`g++ 4.1.2`和`cmake 2.6`上测试通过。
|
200
|
+
2. 修改一些测试用例的文件,减少测试时编译的时间。
|
201
|
+
3. 修复`make install`相关的问题。
|
202
|
+
4. 增加HTTP服务的POST请求接口。
|
203
|
+
5. 拆分`Trie.hpp`成`DictTrie.hpp`和`Trie.hpp`,将trie树这个数据结构抽象出来,并且修复Trie这个类潜在的bug并完善单元测试。
|
204
|
+
6. 重写cjserver的启动和停止,新启动和停止方法详见README.md。
|
205
|
+
|
206
|
+
## v2.3.4
|
207
|
+
|
208
|
+
1. 修改了设计上的问题,删除了`TrieManager`这个类,以避免造成一些可能的隐患。
|
209
|
+
2. 增加`stop_words.utf8`词典,并修改`KeywordExtractor`的初始化函数用以使用此词典。
|
210
|
+
3. 优化了`Trie`树相关部分代码结构。
|
211
|
+
|
212
|
+
## v2.3.3
|
213
|
+
|
214
|
+
1. 修复因为使用unordered_map导致的在不同机器上结果不一致的问题。
|
215
|
+
2. 将部分数据结果从unordered_map改为map,提升了差不多1/6的切词速度。(因为unordered_map虽然查找速度快,但是在范围迭代的效率较低。)
|
216
|
+
|
217
|
+
## v2.3.2
|
218
|
+
|
219
|
+
1. 修复单元测试的问题,有些case在x84和x64中结果不一致。
|
220
|
+
2. merge进词性标注的简单版本。
|
221
|
+
|
222
|
+
## v2.3.1
|
223
|
+
|
224
|
+
1. 修复安装时的服务启动问题(不过安装切词服务只是linux下的一个附加功能,不影响核心代码。)
|
225
|
+
|
226
|
+
## v2.3.0
|
227
|
+
|
228
|
+
1. 增加`KeywordExtractor.hpp`来进行关键词抽取。
|
229
|
+
2. 使用`gtest`来做单元测试。
|
230
|
+
|
231
|
+
## v2.2.0
|
232
|
+
|
233
|
+
1. 性能优化,提升切词速度约6倍。
|
234
|
+
2. 其他暂时也想不起来了。
|
235
|
+
|
236
|
+
## v2.1.1 (v2.1.1之前的统统一起写在 v2.1.1里面了)
|
237
|
+
|
238
|
+
1. 完成__最大概率分词算法__和__HMM分词算法__,并且将他们结合起来成效果最好的`MixSegment`。
|
239
|
+
2. 进行大量的代码重构,将主要的功能性代码都写成了hpp文件。
|
240
|
+
3. 使用`cmake`工具来管理项目。
|
241
|
+
4. 使用 [limonp]作为工具函数库,比如日志,字符串操作等常用函数。
|
242
|
+
5. 使用 [husky] 搭简易分词服务的服务器框架。
|
243
|
+
|
244
|
+
[limonp]:http://github.com/yanyiwu/limonp.git
|
245
|
+
[husky]:http://github.com/yanyiwu/husky.git
|
246
|
+
[issue50]:https://github.com/yanyiwu/cppjieba/issues/50
|
247
|
+
[qinwf]:https://github.com/yanyiwu/cppjieba/pull/53#issuecomment-176264929
|
248
|
+
[jieba]:https://github.com/fxsjy/jieba
|
249
|
+
[@questionfish]:https://github.com/questionfish
|
@@ -0,0 +1,289 @@
|
|
1
|
+
# CppJieba [English](README_EN.md)
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/yanyiwu/cppjieba.png?branch=master)](https://travis-ci.org/yanyiwu/cppjieba)
|
4
|
+
[![Author](https://img.shields.io/badge/author-@yanyiwu-blue.svg?style=flat)](http://yanyiwu.com/)
|
5
|
+
[![Donate](https://img.shields.io/badge/donate-eos_gitdeveloper-orange.svg)](https://eosflare.io/account/gitdeveloper)
|
6
|
+
[![Platform](https://img.shields.io/badge/platform-Linux,%20OS%20X,%20Windows-green.svg?style=flat)](https://github.com/yanyiwu/cppjieba)
|
7
|
+
[![Performance](https://img.shields.io/badge/performance-excellent-brightgreen.svg?style=flat)](http://yanyiwu.com/work/2015/06/14/jieba-series-performance-test.html)
|
8
|
+
[![Tag](https://img.shields.io/github/v/tag/yanyiwu/cppjieba.svg)](https://github.com/yanyiwu/cppjieba/releases)
|
9
|
+
[![License](https://img.shields.io/badge/license-MIT-yellow.svg?style=flat)](http://yanyiwu.mit-license.org)
|
10
|
+
[![Build status](https://ci.appveyor.com/api/projects/status/wl30fjnm2rhft6ta/branch/master?svg=true)](https://ci.appveyor.com/project/yanyiwu/cppjieba/branch/master)
|
11
|
+
|
12
|
+
|
13
|
+
[![logo](http://images.yanyiwu.com/CppJiebaLogo-v1.png)](https://github.com/yanyiwu/cppjieba)
|
14
|
+
|
15
|
+
## 简介
|
16
|
+
|
17
|
+
CppJieba是"结巴(Jieba)"中文分词的C++版本
|
18
|
+
|
19
|
+
## 特性
|
20
|
+
|
21
|
+
+ 源代码都写进头文件`include/cppjieba/*.hpp`里,`include`即可使用。
|
22
|
+
+ 支持`utf8`编码。
|
23
|
+
+ 项目自带较为完善的单元测试,核心功能中文分词(utf8)的稳定性接受过线上环境检验。
|
24
|
+
+ 支持载自定义用户词典,多路径时支持分隔符'|'或者';'分隔。
|
25
|
+
+ 支持 `Linux` , `Mac OSX`, `Windows` 操作系统。
|
26
|
+
|
27
|
+
## 用法
|
28
|
+
|
29
|
+
### 依赖软件
|
30
|
+
|
31
|
+
* `g++ (version >= 4.1 is recommended) or clang++`;
|
32
|
+
* `cmake (version >= 2.6 is recommended)`;
|
33
|
+
|
34
|
+
### 下载和编译
|
35
|
+
|
36
|
+
```sh
|
37
|
+
git clone --depth=10 --branch=master git://github.com/yanyiwu/cppjieba.git
|
38
|
+
cd cppjieba
|
39
|
+
mkdir build
|
40
|
+
cd build
|
41
|
+
cmake ..
|
42
|
+
make
|
43
|
+
```
|
44
|
+
|
45
|
+
有兴趣的可以跑跑测试(可选):
|
46
|
+
|
47
|
+
```
|
48
|
+
make test
|
49
|
+
```
|
50
|
+
|
51
|
+
## Demo
|
52
|
+
|
53
|
+
```
|
54
|
+
./demo
|
55
|
+
```
|
56
|
+
|
57
|
+
结果示例:
|
58
|
+
|
59
|
+
```
|
60
|
+
[demo] Cut With HMM
|
61
|
+
他/来到/了/网易/杭研/大厦
|
62
|
+
[demo] Cut Without HMM
|
63
|
+
他/来到/了/网易/杭/研/大厦
|
64
|
+
我来到北京清华大学
|
65
|
+
[demo] CutAll
|
66
|
+
我/来到/北京/清华/清华大学/华大/大学
|
67
|
+
小明硕士毕业于中国科学院计算所,后在日本京都大学深造
|
68
|
+
[demo] CutForSearch
|
69
|
+
小明/硕士/毕业/于/中国/科学/学院/科学院/中国科学院/计算/计算所/,/后/在/日本/京都/大学/日本京都大学/深造
|
70
|
+
[demo] Insert User Word
|
71
|
+
男默/女泪
|
72
|
+
男默女泪
|
73
|
+
[demo] CutForSearch Word With Offset
|
74
|
+
[{"word": "小明", "offset": 0}, {"word": "硕士", "offset": 6}, {"word": "毕业", "offset": 12}, {"word": "于", "offset": 18}, {"word": "中国", "offset": 21}, {"word": "科学", "offset": 27}, {"word": "学院", "offset": 30}, {"word": "科学院", "offset": 27}, {"word": "中国科学院", "offset": 21}, {"word": "计算", "offset": 36}, {"word": "计算所", "offset": 36}, {"word": ",", "offset": 45}, {"word": "后", "offset": 48}, {"word": "在", "offset": 51}, {"word": "日本", "offset": 54}, {"word": "京都", "offset": 60}, {"word": "大学", "offset": 66}, {"word": "日本京都大学", "offset": 54}, {"word": "深造", "offset": 72}]
|
75
|
+
[demo] Tagging
|
76
|
+
我是拖拉机学院手扶拖拉机专业的。不用多久,我就会升职加薪,当上CEO,走上人生巅峰。
|
77
|
+
[我:r, 是:v, 拖拉机:n, 学院:n, 手扶拖拉机:n, 专业:n, 的:uj, 。:x, 不用:v, 多久:m, ,:x, 我:r, 就:d, 会:v, 升职:v, 加薪:nr, ,:x, 当上:t, CEO:eng, ,:x, 走上:v, 人生:n, 巅峰:n, 。:x]
|
78
|
+
[demo] Keyword Extraction
|
79
|
+
我是拖拉机学院手扶拖拉机专业的。不用多久,我就会升职加薪,当上CEO,走上人生巅峰。
|
80
|
+
[{"word": "CEO", "offset": [93], "weight": 11.7392}, {"word": "升职", "offset": [72], "weight": 10.8562}, {"word": "加薪", "offset": [78], "weight": 10.6426}, {"word": "手扶拖拉机", "offset": [21], "weight": 10.0089}, {"word": "巅峰", "offset": [111], "weight": 9.49396}]
|
81
|
+
```
|
82
|
+
|
83
|
+
详细请看 `test/demo.cpp`.
|
84
|
+
|
85
|
+
### 分词结果示例
|
86
|
+
|
87
|
+
**MPSegment**
|
88
|
+
|
89
|
+
Output:
|
90
|
+
```
|
91
|
+
我来到北京清华大学
|
92
|
+
我/来到/北京/清华大学
|
93
|
+
|
94
|
+
他来到了网易杭研大厦
|
95
|
+
他/来到/了/网易/杭/研/大厦
|
96
|
+
|
97
|
+
小明硕士毕业于中国科学院计算所,后在日本京都大学深造
|
98
|
+
小/明/硕士/毕业/于/中国科学院/计算所/,/后/在/日本京都大学/深造
|
99
|
+
|
100
|
+
```
|
101
|
+
|
102
|
+
**HMMSegment**
|
103
|
+
|
104
|
+
```
|
105
|
+
我来到北京清华大学
|
106
|
+
我来/到/北京/清华大学
|
107
|
+
|
108
|
+
他来到了网易杭研大厦
|
109
|
+
他来/到/了/网易/杭/研大厦
|
110
|
+
|
111
|
+
小明硕士毕业于中国科学院计算所,后在日本京都大学深造
|
112
|
+
小明/硕士/毕业于/中国/科学院/计算所/,/后/在/日/本/京/都/大/学/深/造
|
113
|
+
|
114
|
+
```
|
115
|
+
|
116
|
+
**MixSegment**
|
117
|
+
|
118
|
+
```
|
119
|
+
我来到北京清华大学
|
120
|
+
我/来到/北京/清华大学
|
121
|
+
|
122
|
+
他来到了网易杭研大厦
|
123
|
+
他/来到/了/网易/杭研/大厦
|
124
|
+
|
125
|
+
小明硕士毕业于中国科学院计算所,后在日本京都大学深造
|
126
|
+
小明/硕士/毕业/于/中国科学院/计算所/,/后/在/日本京都大学/深造
|
127
|
+
|
128
|
+
```
|
129
|
+
|
130
|
+
**FullSegment**
|
131
|
+
|
132
|
+
```
|
133
|
+
我来到北京清华大学
|
134
|
+
我/来到/北京/清华/清华大学/华大/大学
|
135
|
+
|
136
|
+
他来到了网易杭研大厦
|
137
|
+
他/来到/了/网易/杭/研/大厦
|
138
|
+
|
139
|
+
小明硕士毕业于中国科学院计算所,后在日本京都大学深造
|
140
|
+
小/明/硕士/毕业/于/中国/中国科学院/科学/科学院/学院/计算/计算所/,/后/在/日本/日本京都大学/京都/京都大学/大学/深造
|
141
|
+
|
142
|
+
```
|
143
|
+
|
144
|
+
**QuerySegment**
|
145
|
+
|
146
|
+
```
|
147
|
+
我来到北京清华大学
|
148
|
+
我/来到/北京/清华/清华大学/华大/大学
|
149
|
+
|
150
|
+
他来到了网易杭研大厦
|
151
|
+
他/来到/了/网易/杭研/大厦
|
152
|
+
|
153
|
+
小明硕士毕业于中国科学院计算所,后在日本京都大学深造
|
154
|
+
小明/硕士/毕业/于/中国/中国科学院/科学/科学院/学院/计算所/,/后/在/中国/中国科学院/科学/科学院/学院/日本/日本京都大学/京都/京都大学/大学/深造
|
155
|
+
|
156
|
+
```
|
157
|
+
|
158
|
+
以上依次是MP,HMM,Mix三种方法的效果。
|
159
|
+
|
160
|
+
可以看出效果最好的是Mix,也就是融合MP和HMM的切词算法。即可以准确切出词典已有的词,又可以切出像"杭研"这样的未登录词。
|
161
|
+
|
162
|
+
Full方法切出所有字典里的词语。
|
163
|
+
|
164
|
+
Query方法先使用Mix方法切词,对于切出来的较长的词再使用Full方法。
|
165
|
+
|
166
|
+
### 自定义用户词典
|
167
|
+
|
168
|
+
自定义词典示例请看`dict/user.dict.utf8`。
|
169
|
+
|
170
|
+
没有使用自定义用户词典时的结果:
|
171
|
+
|
172
|
+
```
|
173
|
+
令狐冲/是/云/计算/行业/的/专家
|
174
|
+
```
|
175
|
+
|
176
|
+
使用自定义用户词典时的结果:
|
177
|
+
|
178
|
+
```
|
179
|
+
令狐冲/是/云计算/行业/的/专家
|
180
|
+
```
|
181
|
+
|
182
|
+
### 关键词抽取
|
183
|
+
|
184
|
+
```
|
185
|
+
我是拖拉机学院手扶拖拉机专业的。不用多久,我就会升职加薪,当上CEO,走上人生巅峰。
|
186
|
+
["CEO:11.7392", "升职:10.8562", "加薪:10.6426", "手扶拖拉机:10.0089", "巅峰:9.49396"]
|
187
|
+
```
|
188
|
+
|
189
|
+
详细请见 `test/demo.cpp`.
|
190
|
+
|
191
|
+
### 词性标注
|
192
|
+
|
193
|
+
```
|
194
|
+
我是蓝翔技工拖拉机学院手扶拖拉机专业的。不用多久,我就会升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰。
|
195
|
+
["我:r", "是:v", "拖拉机:n", "学院:n", "手扶拖拉机:n", "专业:n", "的:uj", "。:x", "不用:v", "多久:m", ",:x", "我:r", "就:d", "会:v", "升职:v", "加薪:nr", ",:x", "当上:t", "CEO:eng", ",:x", "走上:v", "人生:n", "巅峰:n", "。:x"]
|
196
|
+
```
|
197
|
+
|
198
|
+
详细请看 `test/demo.cpp`.
|
199
|
+
|
200
|
+
支持自定义词性。
|
201
|
+
比如在(`dict/user.dict.utf8`)增加一行
|
202
|
+
|
203
|
+
```
|
204
|
+
蓝翔 nz
|
205
|
+
```
|
206
|
+
|
207
|
+
结果如下:
|
208
|
+
|
209
|
+
```
|
210
|
+
["我:r", "是:v", "蓝翔:nz", "技工:n", "拖拉机:n", "学院:n", "手扶拖拉机:n", "专业:n", "的:uj", "。:x", "不用:v", "多久:m", ",:x", "我:r", "就:d", "会:v", "升职:v", "加薪:nr", ",:x", "当:t", "上:f", "总经理:n", ",:x", "出任:v", "CEO:eng", ",:x", "迎娶:v", "白富美:x", ",:x", "走上:v", "人生:n", "巅峰:n", "。:x"]
|
211
|
+
```
|
212
|
+
|
213
|
+
## 其它词典资料分享
|
214
|
+
|
215
|
+
+ [dict.367W.utf8] iLife(562193561 at qq.com)
|
216
|
+
|
217
|
+
## 应用
|
218
|
+
|
219
|
+
+ [GoJieba] go语言版本的结巴中文分词。
|
220
|
+
+ [NodeJieba] Node.js 版本的结巴中文分词。
|
221
|
+
+ [simhash] 中文文档的的相似度计算
|
222
|
+
+ [exjieba] Erlang 版本的结巴中文分词。
|
223
|
+
+ [jiebaR] R语言版本的结巴中文分词。
|
224
|
+
+ [cjieba] C语言版本的结巴分词。
|
225
|
+
+ [jieba_rb] Ruby 版本的结巴分词。
|
226
|
+
+ [iosjieba] iOS 版本的结巴分词。
|
227
|
+
+ [SqlJieba] MySQL 全文索引的结巴中文分词插件。
|
228
|
+
+ [pg_jieba] PostgreSQL 数据库的分词插件。
|
229
|
+
+ [simple] SQLite3 FTS5 数据库的分词插件。
|
230
|
+
+ [gitbook-plugin-search-pro] 支持中文搜索的 gitbook 插件。
|
231
|
+
+ [ngx_http_cppjieba_module] Nginx 分词插件。
|
232
|
+
+ [cppjiebapy] 由 [jannson] 开发的供 python 模块调用的项目 [cppjiebapy], 相关讨论 [cppjiebapy_discussion] .
|
233
|
+
+ [cppjieba-py] 由 [bung87] 基于 pybind11 封装的 python 模块,使用体验上接近于原jieba。
|
234
|
+
+ [KeywordServer] 50行搭建一个中文关键词抽取服务。
|
235
|
+
+ [cppjieba-server] CppJieba HTTP 服务器。
|
236
|
+
+ [phpjieba] php版本的结巴分词扩展。
|
237
|
+
+ [perl5-jieba] Perl版本的结巴分词扩展。
|
238
|
+
+ [jieba-dlang] D 语言的结巴分词 Deimos Bindings。
|
239
|
+
|
240
|
+
## 线上演示
|
241
|
+
|
242
|
+
[Web-Demo](http://cppjieba-webdemo.herokuapp.com/)
|
243
|
+
(建议使用chrome打开)
|
244
|
+
|
245
|
+
## 性能评测
|
246
|
+
|
247
|
+
[Jieba中文分词系列性能评测]
|
248
|
+
|
249
|
+
## Sponsorship
|
250
|
+
|
251
|
+
[![sponsorship](http://images.gitads.io/cppjieba)](https://tracking.gitads.io/?campaign=gitads&repo=cppjieba&redirect=gitads.io)
|
252
|
+
|
253
|
+
## Contributors
|
254
|
+
|
255
|
+
### Code Contributors
|
256
|
+
|
257
|
+
This project exists thanks to all the people who contribute.
|
258
|
+
<a href="https://github.com/yanyiwu/cppjieba/graphs/contributors"><img src="https://opencollective.com/cppjieba/contributors.svg?width=890&button=false" /></a>
|
259
|
+
|
260
|
+
[GoJieba]:https://github.com/yanyiwu/gojieba
|
261
|
+
[CppJieba]:https://github.com/yanyiwu/cppjieba
|
262
|
+
[jannson]:https://github.com/jannson
|
263
|
+
[cppjiebapy]:https://github.com/jannson/cppjiebapy
|
264
|
+
[bung87]:https://github.com/bung87
|
265
|
+
[cppjieba-py]:https://github.com/bung87/cppjieba-py
|
266
|
+
[cppjiebapy_discussion]:https://github.com/yanyiwu/cppjieba/issues/1
|
267
|
+
[NodeJieba]:https://github.com/yanyiwu/nodejieba
|
268
|
+
[jiebaR]:https://github.com/qinwf/jiebaR
|
269
|
+
[simhash]:https://github.com/yanyiwu/simhash
|
270
|
+
[代码详解]:https://github.com/yanyiwu/cppjieba/wiki/CppJieba%E4%BB%A3%E7%A0%81%E8%AF%A6%E8%A7%A3
|
271
|
+
[issue25]:https://github.com/yanyiwu/cppjieba/issues/25
|
272
|
+
[exjieba]:https://github.com/falood/exjieba
|
273
|
+
[KeywordServer]:https://github.com/yanyiwu/keyword_server
|
274
|
+
[ngx_http_cppjieba_module]:https://github.com/yanyiwu/ngx_http_cppjieba_module
|
275
|
+
[dict.367W.utf8]:https://github.com/qinwf/BigDict
|
276
|
+
[cjieba]:http://github.com/yanyiwu/cjieba
|
277
|
+
[jieba_rb]:https://github.com/altkatz/jieba_rb
|
278
|
+
[iosjieba]:https://github.com/yanyiwu/iosjieba
|
279
|
+
[SqlJieba]:https://github.com/yanyiwu/sqljieba
|
280
|
+
[Jieba中文分词系列性能评测]:http://yanyiwu.com/work/2015/06/14/jieba-series-performance-test.html
|
281
|
+
[pg_jieba]:https://github.com/jaiminpan/pg_jieba
|
282
|
+
[gitbook-plugin-search-pro]:https://plugins.gitbook.com/plugin/search-pro
|
283
|
+
[cppjieba-server]:https://github.com/yanyiwu/cppjieba-server
|
284
|
+
[phpjieba]:https://github.com/jonnywang/phpjieba
|
285
|
+
[perl5-jieba]:https://metacpan.org/pod/distribution/Lingua-ZH-Jieba/lib/Lingua/ZH/Jieba.pod
|
286
|
+
[jieba-dlang]:https://github.com/shove70/jieba
|
287
|
+
[simple]:https://github.com/wangfenjin/simple
|
288
|
+
|
289
|
+
|