THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点:
能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。
准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。
速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。
THULAC在线演示平台thulac.thunlp.org/demo
C++版
在当前路径下运行
make
会在当前目录下得到thulac和train_c
(thulac需要模型的支持,需要将下载的模型放到当前目录下)
java版
可直接按照分词程序命令格式运行可执行的jar包
自行编译需要安装Gradle, 然后在项目根目录执行gradle build, 生成文件在build/libs下
(thulac需要模型的支持,需要将下载的模型放到当前目录下)
python版(兼容python2.x和python3.x)
源代码下载
将thulac文件放到目录下,通过 import thulac 来引用
thulac需要模型的支持,需要将下载的模型放到thulac目录下。
pip下载
sudo pip install thulac
通过 import thulac 来引用
C++版(接口调用参见1.5)
./thulac [-t2s] [-seg_only] [-deli delimeter] [-user userword.txt] 从命令行输入输出
./thulac [-t2s] [-seg_only] [-deli delimeter] [-user userword.txt]
java版
java -jar THULAC_lite_java_run.jar [-t2s] [-seg_only] [-deli delimeter] [-user userword.txt] 从命令行输入输出
java -jar THULAC_lite_java_run.jar [-t2s] [-seg_only] [-deli delimeter] [-user userword.txt] -input input_file -output output_file 从文本文件输入输出(注意均为UTF8文本)
python版(兼容python2.x和python3.x)
通过python程序import thulac
,新建thulac.thulac(args)
类,其中args为程序的参数。之后可以通过调用thulac.cut()
进行单句分词。
具体接口参数可查看python版接口参数
代码示例
代码示例1
import thulac
thu1 = thulac.thulac() #默认模式
text = thu1.cut("我爱北京天安门", text=True) #进行一句话分词
print(text)
代码示例2
thu1 = thulac.thulac(seg_only=True) #只进行分词,不进行词性标注
thu1.cut_f("input.txt", "output.txt") #对input.txt文件内容进行分词,输出到output.txt
-t2s 将句子从繁体转化为简体
-seg_only 只进行分词,不进行词性标注
-deli delimeter 设置词与词性间的分隔符,默认为下划线_
-filter 使用过滤器去除一些没有意义的词语,例如“可以”。
-user userword.txt 设置用户词典,用户词典中的词会被打上uw标签。词典中每一个词一行,UTF8编码(python版暂无)
-model_dir dir 设置模型文件所在文件夹,默认为models/
-input input_file 设置从文件读入,默认为命令行输入
-output output_file 设置输出到文件中,默认为命令行输出
thulac(user_dict=None, model_path=None, T2S=False, seg_only=False, filt=False)
初始化程序,进行自定义设置
user_dict 设置用户词典,用户词典中的词会被打上uw标签。词典中每一个词一行,UTF8编码
T2S 默认False, 是否将句子从繁体转化为简体
seg_only 默认False, 时候只进行分词,不进行词性标注
filt 默认False, 是否使用过滤器去除一些没有意义的词语,例如“可以”。
model_path 设置模型文件所在文件夹,默认为models/
cut(文本, text=False)
对一句话进行分词
text 默认为False, 是否返回文本,不返回文本则返回一个二维数组([[word, tag]..]),tag_only模式下tag为空字符。
cut_f(输入文件, 输出文件)
对文件进行分词
run()
命令行交互式分词(屏幕输入、屏幕输出)
首先需要实例化THULAC类,然后可以调用以下接口:
int init(const char* model_path = NULL, const char* user_path = NULL, int just_seg = 0, int t2s = 0, int ufilter = 0, char separator = '_');
初始化程序,进行自定义设置
user_path 设置用户词典,用户词典中的词会被打上uw标签。词典中每一个词一行,UTF8编码
t2s 默认False, 是否将句子从繁体转化为简体
just_seg 默认False, 时候只进行分词,不进行词性标注
ufilter 默认False, 是否使用过滤器去除一些没有意义的词语,例如“可以”。
model_path 设置模型文件所在文件夹,默认为models/
separator 默认为‘_’, 设置词与词性之间的分隔符
THULAC需要分词和词性标注模型的支持,用户可以在下载列表中下载THULAC模型 Models_v1.zip
,并放到THULAC的根目录即可,或者使用参数-model_dir dir
指定模型的位置。
THULAC工具包提供模型训练程序train_c,用户可以使用train_c训练获得THULAC的所需的模型。
./train_c [-s separator] [-b bigram_threshold] [-i iteration] training_filename model_filename
使用training_filename为训练集,训练出来的模型名字为model_filename
-s 设置词与词性间的分隔符,默认为斜线/
-b 设置二字串的阈值,默认为1
-i 设置训练迭代的轮数,默认为15
我们使用默认的分隔符(斜线/)作为例子,训练集内容应为
我/r 爱/vm 北京/ns 天安门/ns
类似的已经进行词性标注的句子。
若要训练出只分词的模型,使用默认的分隔符(斜线/)作为例子,训练集内容应为
我/ 爱/ 北京/ 天安门/
类似的句子。
将训练出来的模型覆盖原来models中的对应模型,之后执行分词程序即可使用训练出来的模型。
我们选择LTP-3.2.0 、ICTCLAS(2015版) 、jieba(C++版)等国内具代表性的分词软件与THULAC做性能比较。我们选择Windows作为测试环境,根据第二届国际汉语分词测评(The Second International Chinese Word Segmentation Bakeoff)发布的国际中文分词测评标准,对不同软件进行了速度和准确率测试。
在第二届国际汉语分词测评中,共有四家单位提供的测试语料(Academia Sinica、 City University 、Peking University 、Microsoft Research), 在评测提供的资源icwb2-data中包含了来自这四家单位的训练集(training)、测试集(testing), 以及根据各自分词标准而提供的相应测试集的标准答案(icwb2-data/scripts/gold).在icwb2-data/scripts目录下含有对分词进行自动评分的perl脚本score。
我们在统一测试环境下,对上述流行分词软件和THULAC进行了测试,使用的模型为各分词软件自带模型。THULAC使用的是随软件提供的简单模型Model_1。评测环境为 Intel Core i5 2.4 GHz 评测结果如下:
msr_test(560KB)
Algorithm | Time | Precision | Recall | F-Measure |
---|---|---|---|---|
LTP-3.2.0 | 3.21s | 0.867 | 0.896 | 0.881 |
ICTCLAS(2015版) | 0.55s | 0.869 | 0.914 | 0.891 |
jieba(C++版) | 0.26s | 0.814 | 0.809 | 0.811 |
THULAC_lite | 0.62s | 0.877 | 0.899 | 0.888 |
pku_test(510KB)
Algorithm | Time | Precision | Recall | F-Measure |
---|---|---|---|---|
LTP-3.2.0 | 3.83s | 0.960 | 0.947 | 0.953 |
ICTCLAS(2015版) | 0.53s | 0.939 | 0.944 | 0.941 |
jieba(C++版) | 0.23s | 0.850 | 0.784 | 0.816 |
THULAC_lite | 0.51s | 0.944 | 0.908 | 0.926 |
除了以上在标准测试集上的评测,我们也对各个分词工具在大数据上的速度进行了评测,结果如下:
CNKI_journal.txt(51 MB)
Algorithm | Time | Speed |
---|---|---|
LTP-3.2.0 | 348.624s | 149.80KB/s |
ICTCLAS(2015版) | 106.461s | 490.59KB/s |
jieba(C++版) | 22.558s | 2314.89KB/s |
THULAC_lite | 42.625s | 1221.05KB/s |
n/名词 np/人名 ns/地名 ni/机构名 nz/其它专名
m/数词 q/量词 mq/数量词 t/时间词 f/方位词 s/处所词
v/动词 a/形容词 d/副词 h/前接成分 k/后接成分 i/习语
j/简称 r/代词 c/连词 p/介词 u/助词 y/语气助词
e/叹词 o/拟声词 g/语素 w/标点 x/其它
为了方便在分词和词性标注后的过滤,在v1_2版本,我们增加了两种词性,如果需要可以下载使用。
vm/能愿动词 vd/趋向动词
我们随THULAC源代码附带了简单的分词模型Model_1,仅支持分词功能。该模型由人民日报分词语料库训练得到。
我们随THULAC源代码附带了分词和词性标注联合模型Model_2,支持同时分词和词性标注功能。该模型由人民日报分词和词性标注语料库训练得到。
我们还提供更复杂、完善和精确的分词和词性标注联合模型Model_3和分词词表。该模型是由多语料联合训练训练得到(语料包括来自多文体的标注文本和人民日报标注文本等)。由于模型较大,如有机构或个人需要,请填写“资源申请表.doc”,并发送至 thunlp@gmail.com ,通过审核后我们会将相关资源发送给联系人。
THULAC工具包分成两个部分组成。第一部分为算法源代码部分,可以通过网站上下载
或者从github获取最新基础版代码
,无需注册;第二部分为算法模型部分,THULAC需要分词和词性标注模型的支持,可以从2.算法模型
注册后获得。
Source | Version | Description | Size | Date | Download |
---|---|---|---|---|---|
THULAC_lite | lite版 | THULAC_lite分词源代码(C++版) | 799KB | 2017-04-11 | download |
THULAC_lite分词源代码(python版) | 44KB | 2017-04-11 | |||
THULAC_lite分词源代码(java版) | 588KB | 2017-01-13 | |||
THULAC_lite分词java版可执行的jar包 | 55KB | 2017-04-11 | |||
THULAC模型,包括分词模型和词性标注模型(lite版) | 58.2MB | 2016-01-10 | |||
v1_2 | THULAC_lite_v1_2分词源代码(C++版) | 799KB | 2017-04-11 | download | |
THULAC_lite_v1_2分词源代码(java版) | 588KB | 2017-01-13 | |||
THULAC_lite_v1_2分词java版可执行的jar包 | 55KB | 2017-04-11 | |||
THULAC模型,包括分词模型和词性标注模型(v1_2) | 58.3MB | 2016-07-10 |
Source | Description | Link |
---|---|---|
THULAC_lite_C++ | THULAC_lite分词源代码(C++版) | link |
THULAC_lite_Python | THULAC_lite分词源代码(python版) | link |
THULAC_lite_Java | THULAC_lite分词源代码(java版) | link |
THULAC_lite.So | THULAC_lite分词源代码(So版) | link |
Source | Description | Size | Date | Download |
---|---|---|---|---|
THULAC_lite_Model | THULAC模型,包括分词模型和词性标注模型(lite版) | 58.2MB | 2016-01-10 | download |
THULAC_pro_c++_v1.zip | THULAC模型,包括更复杂完善的分词和词性标注模型以及分词词表 | 162MB | 2016-01-10 | download |
该工具目前仅处理UTF8编码中文文本,之后会逐渐增加支持其他编码的功能,敬请期待。
地址:http://thulac.thunlp.org/
浙大90后女黑客在GeekPwn2017上秒破人脸识别系统!