C++自然语言处理工具库
KNLP
是一个header-only的C++
库,只需要包含组件的头文件即可使用
KNLP
所有的组件均可以灵活配置,并且提供了训练、预测、以及持久化接口。以混合分词组件为例,混合分词组件可以组合一个DAG分词器和一个序列标注分词器,从而用户可以在分词速度和精度之间权衡,下面是一个组合了Unigram
的DAG分词器和HMM
序列标注分词器的例子:
using UnigramSegmenter = DAGSegmenter<UnigramLanguageModel>;
using HMMMixedSegmenter = MixedSegmenter<UnigramSegmenter, HMMSegmenter>;
std::shared_ptr<UnigramLanguageModel> _unigram_model;
std::shared_ptr<UnigramSegmenter> _dag_segmenter;
std::shared_ptr<HMMSegmenter> _hmm_segmenter;
std::shared_ptr<HMMMixedSegmenter> _mixed_segmenter;
_unigram_model = std::make_shared<UnigramLanguageModel>();
_unigram_model->fit("../../dic.txt");//训练语言模型
_hmm_segmenter = std::make_shared<HMMSegmenter>();
_hmm_segmenter->fit("../../corpus.txt");//训练HMM序列标注
_dag_segmenter = std::make_shared<UnigramSegmenter>(*_unigram_model);//训练DAG分词器
_mixed_segmenter = std::make_shared<HMMMixedSegmenter>(*_dag_segmenter, *_hmm_segmenter); //组合混合分词器
std::vector<std::wstring> words;
_mixed_segmenter->segment(L"买水果然后去世博园", words);
//输出: [L"买",L"水果",L"然后",L"去",L"世博园"]
为了方便用户使用,KNLP
也提供了默认工厂类用于快速获取默认配置的组件,例如SegmenterFactory
则可以用来获取默认配置的分词组件