-
Notifications
You must be signed in to change notification settings - Fork 1k
为ltp贡献代码
该程风格是对
Google 开源项目风格指南
针对LTP进行的本土化。
所有头文件都应该使用 #define 防止头文件被多重包含,命名格式为: __LTP_<SUBMODULE>_<FILE>_H__
。
举分词模块配置头文件为例src/segmentor/settings.h
#ifndef __LTP_SEGMENTOR_SETTINGS_H__
#define __LTP_SEGMENTOR_SETTINGS_H__
...
#endif // end for __LTP_SEGMENTOR_SETTINGS_H__
项目内头文件应按照项目源代码目录树结构排列, 避免使用 UNIX 特殊的快捷目录 . (当前目录) 或 .. (上级目录). 例如, ltp/src/utils/logging.hpp
应该按如下方式包含:
#include "utils/logging.hpp"
各子模块的实现需要使用命名空间
namespace ltp {
namespace submodule { // 不缩进
...
} // end for namespace submodule [必须]
} // end for namespace ltp [必须]
保护。
注意:使用拼音命名是一种被厌恶的行为
推荐使用unix命名风格,例如:
int num_recall_words;
不推荐使用匈牙利命名风格中的,m_MemberFunction
。
对于函数,推荐使用如下风格的注释
/**
* <a long description to your function>
*
* @param[<in, out or in/out>] <arg-name> <type-name> <argument description>
* ...
* @return <type-name> <return value description>
*/
这种注释被doxygen理解,可以便捷地产生文档。效果参考:http://oneplus.github.io/ltp-doxygen/
80 个字符是最大值. 这样一个考虑是22inch显示器分两屏可以同时显示两份代码或显示代码的同时进行编译测试。
实际在中文文本处理程序里,非ASCII字符是难以避免的。然而这种问题通常来自于汉字的字典或表,分句模块要用到比如句子结束符字典。 对于这个问题,推荐的方法是将非ASCII字符单独存为头文件,同时将其转换为十六进制编码。
注意:不允许在项目中使用中文注释
现阶段,LTP开发者使用cppcheck进行静态检查。
cppcheck --enable=all -f src/ >& cppcheck.report
请尽可能解决cppcheck.report中提到的performance相关的问题。
现阶段,LTP开发者使用valgrind进行内存检查。
在编译并部署ltp_data之后,请运行
valgrind --tool=memcheck --leak-check=full ./bin/ltp_test conf/ltp.cnf srl test_data/test_utf8.txt >& valgrind.report
获得valgrind测试结果。
由于分词、词性标注、命名实体识别以及依存句法分析模块使用了单件模式抽取特征,测试报告中会提示这部分的内存definitely lost,可以忽略。
在编译并部署ltp_data之后,请运行,可以测试ltp_server是否正常工作,以及返回值是否正常。
这个脚本会向ltp_server发起不同类型(正确请求、编码错误等)。
在ltp_server运行的条件下,运行
python request_ltp.py
当前版本的LTP使用boost.regex
,boost.program_options
,boost.algorithm.string
四个库。