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.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/ext/cppjieba/.gitignore +17 -0
  3. data/ext/cppjieba/.travis.yml +21 -0
  4. data/ext/cppjieba/CMakeLists.txt +28 -0
  5. data/ext/cppjieba/ChangeLog.md +249 -0
  6. data/ext/cppjieba/README.md +289 -0
  7. data/ext/cppjieba/README_EN.md +115 -0
  8. data/ext/cppjieba/appveyor.yml +32 -0
  9. data/ext/cppjieba/deps/CMakeLists.txt +1 -0
  10. data/ext/cppjieba/deps/gtest/CMakeLists.txt +5 -0
  11. data/ext/cppjieba/deps/gtest/include/gtest/gtest-death-test.h +283 -0
  12. data/ext/cppjieba/deps/gtest/include/gtest/gtest-message.h +230 -0
  13. data/ext/cppjieba/deps/gtest/include/gtest/gtest-param-test.h +1421 -0
  14. data/ext/cppjieba/deps/gtest/include/gtest/gtest-param-test.h.pump +487 -0
  15. data/ext/cppjieba/deps/gtest/include/gtest/gtest-printers.h +796 -0
  16. data/ext/cppjieba/deps/gtest/include/gtest/gtest-spi.h +232 -0
  17. data/ext/cppjieba/deps/gtest/include/gtest/gtest-test-part.h +176 -0
  18. data/ext/cppjieba/deps/gtest/include/gtest/gtest-typed-test.h +259 -0
  19. data/ext/cppjieba/deps/gtest/include/gtest/gtest.h +2155 -0
  20. data/ext/cppjieba/deps/gtest/include/gtest/gtest_pred_impl.h +358 -0
  21. data/ext/cppjieba/deps/gtest/include/gtest/gtest_prod.h +58 -0
  22. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-death-test-internal.h +308 -0
  23. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-filepath.h +210 -0
  24. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-internal.h +1226 -0
  25. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-linked_ptr.h +233 -0
  26. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-param-util-generated.h +4822 -0
  27. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
  28. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-param-util.h +619 -0
  29. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-port.h +1788 -0
  30. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-string.h +350 -0
  31. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-tuple.h +968 -0
  32. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-tuple.h.pump +336 -0
  33. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-type-util.h +3330 -0
  34. data/ext/cppjieba/deps/gtest/include/gtest/internal/gtest-type-util.h.pump +296 -0
  35. data/ext/cppjieba/deps/gtest/src/.deps/.dirstamp +0 -0
  36. data/ext/cppjieba/deps/gtest/src/.deps/gtest-all.Plo +681 -0
  37. data/ext/cppjieba/deps/gtest/src/.deps/gtest_main.Plo +509 -0
  38. data/ext/cppjieba/deps/gtest/src/.dirstamp +0 -0
  39. data/ext/cppjieba/deps/gtest/src/gtest-all.cc +48 -0
  40. data/ext/cppjieba/deps/gtest/src/gtest-death-test.cc +1234 -0
  41. data/ext/cppjieba/deps/gtest/src/gtest-filepath.cc +380 -0
  42. data/ext/cppjieba/deps/gtest/src/gtest-internal-inl.h +1038 -0
  43. data/ext/cppjieba/deps/gtest/src/gtest-port.cc +746 -0
  44. data/ext/cppjieba/deps/gtest/src/gtest-printers.cc +356 -0
  45. data/ext/cppjieba/deps/gtest/src/gtest-test-part.cc +110 -0
  46. data/ext/cppjieba/deps/gtest/src/gtest-typed-test.cc +110 -0
  47. data/ext/cppjieba/deps/gtest/src/gtest.cc +4898 -0
  48. data/ext/cppjieba/deps/gtest/src/gtest_main.cc +39 -0
  49. data/ext/cppjieba/deps/limonp/ArgvContext.hpp +70 -0
  50. data/ext/cppjieba/deps/limonp/BlockingQueue.hpp +49 -0
  51. data/ext/cppjieba/deps/limonp/BoundedBlockingQueue.hpp +67 -0
  52. data/ext/cppjieba/deps/limonp/BoundedQueue.hpp +65 -0
  53. data/ext/cppjieba/deps/limonp/Closure.hpp +206 -0
  54. data/ext/cppjieba/deps/limonp/Colors.hpp +31 -0
  55. data/ext/cppjieba/deps/limonp/Condition.hpp +38 -0
  56. data/ext/cppjieba/deps/limonp/Config.hpp +103 -0
  57. data/ext/cppjieba/deps/limonp/FileLock.hpp +74 -0
  58. data/ext/cppjieba/deps/limonp/ForcePublic.hpp +7 -0
  59. data/ext/cppjieba/deps/limonp/LocalVector.hpp +139 -0
  60. data/ext/cppjieba/deps/limonp/Logging.hpp +76 -0
  61. data/ext/cppjieba/deps/limonp/Md5.hpp +411 -0
  62. data/ext/cppjieba/deps/limonp/MutexLock.hpp +51 -0
  63. data/ext/cppjieba/deps/limonp/NonCopyable.hpp +21 -0
  64. data/ext/cppjieba/deps/limonp/StdExtension.hpp +157 -0
  65. data/ext/cppjieba/deps/limonp/StringUtil.hpp +365 -0
  66. data/ext/cppjieba/deps/limonp/Thread.hpp +44 -0
  67. data/ext/cppjieba/deps/limonp/ThreadPool.hpp +86 -0
  68. data/ext/cppjieba/dict/README.md +31 -0
  69. data/ext/cppjieba/dict/hmm_model.utf8 +34 -0
  70. data/ext/cppjieba/dict/idf.utf8 +258826 -0
  71. data/ext/cppjieba/dict/jieba.dict.utf8 +348982 -0
  72. data/ext/cppjieba/dict/pos_dict/char_state_tab.utf8 +6653 -0
  73. data/ext/cppjieba/dict/pos_dict/prob_emit.utf8 +166 -0
  74. data/ext/cppjieba/dict/pos_dict/prob_start.utf8 +259 -0
  75. data/ext/cppjieba/dict/pos_dict/prob_trans.utf8 +5222 -0
  76. data/ext/cppjieba/dict/stop_words.utf8 +1534 -0
  77. data/ext/cppjieba/dict/user.dict.utf8 +4 -0
  78. data/ext/cppjieba/include/cppjieba/DictTrie.hpp +277 -0
  79. data/ext/cppjieba/include/cppjieba/FullSegment.hpp +93 -0
  80. data/ext/cppjieba/include/cppjieba/HMMModel.hpp +129 -0
  81. data/ext/cppjieba/include/cppjieba/HMMSegment.hpp +190 -0
  82. data/ext/cppjieba/include/cppjieba/Jieba.hpp +130 -0
  83. data/ext/cppjieba/include/cppjieba/KeywordExtractor.hpp +153 -0
  84. data/ext/cppjieba/include/cppjieba/MPSegment.hpp +137 -0
  85. data/ext/cppjieba/include/cppjieba/MixSegment.hpp +109 -0
  86. data/ext/cppjieba/include/cppjieba/PosTagger.hpp +77 -0
  87. data/ext/cppjieba/include/cppjieba/PreFilter.hpp +54 -0
  88. data/ext/cppjieba/include/cppjieba/QuerySegment.hpp +89 -0
  89. data/ext/cppjieba/include/cppjieba/SegmentBase.hpp +46 -0
  90. data/ext/cppjieba/include/cppjieba/SegmentTagged.hpp +23 -0
  91. data/ext/cppjieba/include/cppjieba/TextRankExtractor.hpp +190 -0
  92. data/ext/cppjieba/include/cppjieba/Trie.hpp +174 -0
  93. data/ext/cppjieba/include/cppjieba/Unicode.hpp +227 -0
  94. data/ext/cppjieba/test/CMakeLists.txt +5 -0
  95. data/ext/cppjieba/test/demo.cpp +80 -0
  96. data/ext/cppjieba/test/load_test.cpp +54 -0
  97. data/ext/cppjieba/test/testdata/curl.res +1 -0
  98. data/ext/cppjieba/test/testdata/extra_dict/jieba.dict.small.utf8 +109750 -0
  99. data/ext/cppjieba/test/testdata/gbk_dict/hmm_model.gbk +34 -0
  100. data/ext/cppjieba/test/testdata/gbk_dict/jieba.dict.gbk +348982 -0
  101. data/ext/cppjieba/test/testdata/jieba.dict.0.1.utf8 +93 -0
  102. data/ext/cppjieba/test/testdata/jieba.dict.0.utf8 +93 -0
  103. data/ext/cppjieba/test/testdata/jieba.dict.1.utf8 +67 -0
  104. data/ext/cppjieba/test/testdata/jieba.dict.2.utf8 +64 -0
  105. data/ext/cppjieba/test/testdata/load_test.urls +2 -0
  106. data/ext/cppjieba/test/testdata/review.100 +100 -0
  107. data/ext/cppjieba/test/testdata/review.100.res +200 -0
  108. data/ext/cppjieba/test/testdata/server.conf +19 -0
  109. data/ext/cppjieba/test/testdata/testlines.gbk +9 -0
  110. data/ext/cppjieba/test/testdata/testlines.utf8 +8 -0
  111. data/ext/cppjieba/test/testdata/userdict.2.utf8 +1 -0
  112. data/ext/cppjieba/test/testdata/userdict.english +2 -0
  113. data/ext/cppjieba/test/testdata/userdict.utf8 +8 -0
  114. data/ext/cppjieba/test/testdata/weicheng.utf8 +247 -0
  115. data/ext/cppjieba/test/unittest/CMakeLists.txt +24 -0
  116. data/ext/cppjieba/test/unittest/gtest_main.cpp +39 -0
  117. data/ext/cppjieba/test/unittest/jieba_test.cpp +133 -0
  118. data/ext/cppjieba/test/unittest/keyword_extractor_test.cpp +79 -0
  119. data/ext/cppjieba/test/unittest/pos_tagger_test.cpp +41 -0
  120. data/ext/cppjieba/test/unittest/pre_filter_test.cpp +43 -0
  121. data/ext/cppjieba/test/unittest/segments_test.cpp +256 -0
  122. data/ext/cppjieba/test/unittest/textrank_test.cpp +86 -0
  123. data/ext/cppjieba/test/unittest/trie_test.cpp +177 -0
  124. data/ext/cppjieba/test/unittest/unicode_test.cpp +43 -0
  125. data/lib/cppjieba_rb/version.rb +1 -1
  126. metadata +125 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f8b1b4fce6119123112a8df6fa2cfca0857cb215a0985344c2d1b4ee88387cd
4
- data.tar.gz: 3a899dba1a80ab484158e1920d94b7929a272f8fd8d82c6ea40cc32c152bbf0e
3
+ metadata.gz: 74faf109bce12cd386acb5d2ad03ab4fde55a68cdb07a723a5af1f5b2528f3d5
4
+ data.tar.gz: c4a58470ef8e352cad688b9814080c37b332e46a93987e536387a94304ad1383
5
5
  SHA512:
6
- metadata.gz: 388472322a715c6d562493e5b435c940b5fc3d93b8f4fd9bd5e96d170a456946495dca36b22d49c76ce11e25be56f5ef51a4e44cab0d1b9045c03bddfdcea082
7
- data.tar.gz: c830ab67838d564435b3acc019cbe02e12ba69f5b93591df458375844c3dc017554ca0d355313b686ab3ef786a90234c6985fecaaab8a49eb0826db45a9aaf2d
6
+ metadata.gz: 925ba793289f09a922451f6717b18a769080be4ab132a23edb236e4b91760251b67237dc2b6505c1aa39988d60294ff1ac07638c40a46916f6064be2cd71a425
7
+ data.tar.gz: e5f9dfcd2d341dd880bfc9aceee265abf6cf1e1d1a3428f807b1cd810691bab8e24946c974fef1260f89aebf03e82e85e518fd961905fd1150eac3ad6108c7ca
@@ -0,0 +1,17 @@
1
+ tags
2
+ *.demo
3
+ *swp
4
+ *.out
5
+ *.o
6
+ *.d
7
+ *.ut
8
+ log
9
+ main
10
+ lib*.a
11
+ *_demo
12
+ segdict*
13
+ prior.gbk
14
+ tmp
15
+ t.*
16
+ *.pid
17
+ build
@@ -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
+