{"id":13628812,"url":"https://github.com/thunlp/THUCTC","last_synced_at":"2025-04-17T04:32:29.126Z","repository":{"id":40523661,"uuid":"58990008","full_name":"thunlp/THUCTC","owner":"thunlp","description":"An Efficient Chinese Text Classifier","archived":false,"fork":false,"pushed_at":"2018-09-30T10:09:46.000Z","size":1756,"stargazers_count":206,"open_issues_count":4,"forks_count":67,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-04-03T20:22:31.328Z","etag":null,"topics":["chinese-nlp","nlp"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thunlp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-05-17T04:19:02.000Z","updated_at":"2025-02-15T01:10:08.000Z","dependencies_parsed_at":"2022-09-23T12:11:09.694Z","dependency_job_id":null,"html_url":"https://github.com/thunlp/THUCTC","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thunlp%2FTHUCTC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thunlp%2FTHUCTC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thunlp%2FTHUCTC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thunlp%2FTHUCTC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thunlp","download_url":"https://codeload.github.com/thunlp/THUCTC/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249315995,"owners_count":21249870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chinese-nlp","nlp"],"created_at":"2024-08-01T22:00:57.831Z","updated_at":"2025-04-17T04:32:24.115Z","avatar_url":"https://github.com/thunlp.png","language":"Java","funding_links":[],"categories":["Traditional NLP Datasets","人工智能"],"sub_categories":["Text Classification"],"readme":"# THUCTC: 一个高效的中文文本分类工具\r\n\r\n## 目录\r\n* [项目介绍](#项目介绍)\r\n* [使用方法](#使用方法)\r\n* [样例程序](#样例程序)\r\n* [中文文本分类数据集THUCNews](#中文文本分类数据集THUCNews)\r\n* [测试结果](#测试结果)\r\n* [注意事项](#注意事项)\r\n* [开源协议](#开源协议)\r\n* [相关论文](#相关论文)\r\n* [作者](#作者)\r\n\r\n## 项目介绍\r\n\r\nTHUCTC(THU Chinese Text Classification)是由清华大学自然语言处理实验室推出的中文文本分类工具包，能够自动高效地实现用户自定义的文本分类语料的训练、评测、分类功能。文本分类通常包括特征选取、特征降维、分类模型学习三个步骤。如何选取合适的文本特征并进行降维，是中文文本分类的挑战性问题。我组根据多年在中文文本分类的研究经验，在THUCTC中选取二字串bigram作为特征单元，特征降维方法为Chi-square，权重计算方法为tfidf，分类模型使用的是LibSVM或LibLinear。THUCTC对于开放领域的长文本具有良好的普适性，不依赖于任何中文分词工具的性能，具有准确率高、测试速度快的优点。\r\n\r\n## 使用方法\r\n\r\n我们提供了两种方式运行工具包：\r\n\r\n1. 使用java开发工具，例如eclipse，将包括lib\\THUCTC_java_v1.jar在内的lib文件夹下的包导入自己的工程中，仿照Demo.java程序调用函数即可。\r\n\r\n2. 使用根目录下的THUCTC_java_v1_run.jar运行工具包。\r\n\r\n\t使用命令 `java -jar THUCTC_java_v1.jar + 程序参数`\r\n\r\n#### 运行参数 \r\n\r\n* [-c CATEGORY_LIST_FILE_PATH] 从文件中读入类别信息。该文件中每行包含且仅包含一个类别名称。 \r\n* [-train TRAIN_PATH] 进行训练，并设置训练语料文件夹路径。该文件夹下每个子文件夹的名称都对应一个类别名称，内含属于该类别的训练语料。若不设置，则不进行训练。\r\n* [-test EVAL_PATH] 进行评测，并设置评测语料文件夹路径。该文件夹下每个子文件夹的名称都对应一个类别名称，内含属于该类别的评测语料。若不设置，则不进行评测。也可以使用-eval。\r\n* [-classify FILE_PATH] 对一个文件进行分类。\r\n* [-n topN] 设置返回候选分类数，按得分大小排序。默认为1，即只返回最可能的分类。\r\n* [-svm libsvm or liblinear] 选择使用libsvm还是liblinear进行训练和测试，默认使用liblinear。\r\n* [-l LOAD_MODEL_PATH] 设置读取模型路径。\r\n* [-s SAVE_MODEL_PATH] 设置保存模型路径。\r\n* [-f FEATURE_SIZE] 设置保留特征数目，默认为5000。\r\n* [-d1 RATIO] 设置训练集占总文件数比例，默认为0.8。\r\n* [-d2 RATIO] 设置测试集占总文件数比例，默认为0.2。\r\n* [-e ENCODING] 设置训练及测试文件编码，默认为UTF-8。\r\n* [-filter SUFFIX] 设置文件后缀过滤。例如设置“-filter .txt”，则训练和测试时仅考虑文件名后缀为.txt的文件。\r\n\r\n## 样例程序\r\n\r\n我们随工具包提供了一个调用THUCTC的样例代码Demo.java，其中实现了三种功能：\r\n\r\n1. 对文本进行训练并测试(runTrainAndTest)；\r\n2. 读取已经训练好的模型，对文件进行分类(runLoadModelAndUse)；\r\n3. 按照自己的想法添加训练文件，训练模型(AddFilesManuallyAndTrain)；\r\n\r\n### BasicTextClassifier类接口说明\r\n\r\nBasicTextClassifier 是系统的入口类,提供多种设置接口供使用者调用。利用此入口类可以从文件中读入别信息、设置训练语料路径、设置训练参数以及模型保存路径等。\r\n\r\n其中常用的类成员函数包括：\r\n\r\n* `public void Init(String[] args)`\r\n\r\n\t功能：输入运行参数，初始化系统。\r\n\r\n* `public void runAsBigramChineseTextClassifier()`\r\n\r\n\t功能：根据参数，运行系统。\r\n\t\r\n*  `public boolean loadCategoryListFromFile(String filePath)`\r\n\r\n\t功能：从文件中获取分类列表，等同于参数`-c filePath`\r\n\t\r\n*  `public boolean loadCategoryListFromFolder(String folder)`\r\n\r\n\t功能：从文件夹中获取分类列表\r\n\t\r\n*  `public void addTrainingText(String category, String filename)`\r\n\r\n\t功能：给定类别，添加训练文本\r\n\t\r\n*  `public void addfiles(String filename)`\r\n  \t\r\n  \t功能：根据训练文件所在的文件夹名称,自动判别类别并加入训练，等同于参数`-train filename`\r\n  \r\n*  `public ClassifyResult[] classifyFile(String filepath, int topN)`\r\n\r\n\t功能：对一个文件进行分类，返回前 topN 个分类结果。如果输入的 filepath 是文件夹,则只会在 Console 中打印每个子文件的分类结果，返回值是空数组，等同于参数`-classify filepath -n topN`\r\n\r\n*  `public ClassifyResult[] classifyText(String text, int topN)`\r\n\r\n\t功能：对一个文本进行分类,返回前 topN 个分类结果\r\n\r\n*  `public void testfiles(String filename)`\r\n\r\n\t功能：对文件进行自动分类测试，等同于参数`-test filename`\r\n\r\n*  `public double getPrecision()`\r\n\r\n\t功能：获得测试准确率\r\n\r\n\r\n## 中文文本分类数据集THUCNews\r\n\r\nTHUCNews是根据新浪新闻RSS订阅频道2005~2011年间的历史数据筛选过滤生成，包含74万篇新闻文档（2.19 GB），均为UTF-8纯文本格式。我们在原始新浪新闻分类体系的基础上，重新整合划分出14个候选分类类别：财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐。使用THUCTC工具包在此数据集上进行评测，准确率可以达到88.6%。\r\n\r\n数据集请登录[thuctc.thunlp.org](http://thuctc.thunlp.org)网站填写个人信息进行下载。\r\n\r\n## 测试结果\r\n\r\n文本分类的性能评价有多种指标，其中主流的文本分类评价指标包括准确率、召回率、F-measure、微平均与宏平均等。其中，微平均指所有样本的测试结果的算数平均值，宏平均指所有类别的测试结果的算数平均值。我们的测试也主要对这些指标进行测试。\r\n我们选取上节介绍的数据集进行测试，测试时使用以下参数组合`(-d1 -d2),(-f)`:\r\n\r\n* `-d1 0.7 -d2 0.3 -f 5000` 微平均为最优\r\n\r\n\t|类别|正确率|召回率|F-measure|\r\n\t|:----:|----:|----:|----:|\r\n\t|体育|0.979|0.990|0.985|\r\n\t|娱乐|0.946|0.958|0.952|\r\n\t|家具|0.864|0.832|0.848|\r\n\t|彩票|0.813|0.757|0.779|\r\n\t|房产|0.973|0.972|0.973|\r\n\t|教育|0.911|0.879|0.895|\r\n\t|时尚|0.746|0.874|0.805|\r\n\t|时政|0.780|0.901|0.836|\r\n\t|星座|0.816|0.516|0.632|\r\n\t|游戏|0.922|0.594|0.707|\r\n\t|社会|0.836|0.820|0.828|\r\n\t|科技|0.850|0.921|0.884|\r\n\t|股票|0.895|0.833|0.863|\r\n\t|财经|0.772|0.685|0.726|\r\n\t|宏平均|0.861|0.823|0.842|\r\n\t|微平均|0.884|||\r\n\t\r\n\r\n* `-d1 0.8 -d2 0.2 -f 20000` 宏平均为最优\r\n\t\r\n\t|类别|正确率|召回率|F-measure|\r\n\t|:----:|----:|----:|----:|\r\n\t|体育|0.979|0.986|0.983|\r\n\t|娱乐|0.936|0.966|0.951|\r\n\t|家具|0.871|0.883|0.877|\r\n\t|彩票|0.967|0.862|0.911|\r\n\t|房产|0.957|0.953|0.955|\r\n\t|教育|0.887|0.850|0.868|\r\n\t|时尚|0.868|0.881|0.875|\r\n\t|时政|0.764|0.868|0.813|\r\n\t|星座|0.974|0.618|0.756|\r\n\t|游戏|0.922|0.536|0.678|\r\n\t|社会|0.796|0.802|0.799|\r\n\t|科技|0.845|0.882|0.863|\r\n\t|股票|0.858|0.854|0.856|\r\n\t|财经|0.779|0.656|0.713|\r\n\t|宏平均|0.886|0.829|0.856|\r\n\t|微平均|0.875|||\r\n\r\n\r\n## 注意事项\r\n\r\n1. 使用工具进行训练和测试时，训练语料和测试语料请严格按照如下格式放置：\r\n\r\n\t```\r\n\tTrain(Test)\\\r\n\t\t类别1\\\r\n\t\t\t1.txt\r\n\t\t\t2.txt\r\n\t\t\t3.txt\r\n\t\t\t...\r\n\t\t\tn.txt\r\n\t\t类别2\\\r\n\t\t\t...\r\n\t\t...\r\n\t\t类别n\\\r\n\t\t\t...\r\n\t```\r\n\t\t\r\n2. 该工具是通用的中文文本分类工具包，在针对中文文本进行分类时，选取二字串bigram作为特征单元是经过全面的实验分析和比较的。但在针对英文文本进行分类时，我们不保证选取二字串bigram作为特征单元的效果是最优的。\r\n3. 在进行训练模型时，请注意根据自己的语料大小设置相应的使用内存上限。例如语料大小为2GB的时候，至少设置使用内存大小为4GB（-Xmx4096m）。如若程序执行缓慢，请调大使用内存上限。\r\n4. 由于window系统上java使用内存的限制(大约在1GB)，请避免在window系统上使用较大的语料进行训练。\r\n\r\n\r\n## 开源协议\r\n\r\n1. THUCTC面向国内外大学、研究所、企业以及个人研究者免费开放源。\r\n2. 如有机构或个人拟将THUCTC用于商业目的，请发邮件至thunlp@gmail.com洽谈技术许可协议。\r\n3. 欢迎对该工具包的任何宝贵意见和建议，请发邮件至thunlp@gmail.com。\r\n4. 如果您在THUCTC基础上发表论文或取得科研成果，请您在发表论文和申报成果时声明“使用了清华大学THUCTC”，并按如下格式引用：\r\n\t\r\n\t* **中文：郭志芃,赵宇,郑亚斌,司宪策,刘知远,孙茂松. THUCTC：一个高效的中文文本分类工具包. 2016.**\r\n\t\r\n\t* **英文: Zhipeng Guo, Yu Zhao, Yabin Zheng, Xiance Si, Zhiyuan Liu, Maosong Sun. THUCTC: An Efficient Chinese Text Classifier. 2016.**\r\n5. 本工具包采用[LibSVM](http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html)和[Liblinear](https://www.csie.ntu.edu.tw/~cjlin/liblinear/)实现分类算法，特此致谢。该模块遵守[LibSVM](https://www.csie.ntu.edu.tw/~cjlin/libsvm/COPYRIGHT)/[Liblinear](https://www.csie.ntu.edu.tw/~cjlin/liblinear/COPYRIGHT)工具包指定的协议。\r\n   \r\n## 相关论文\r\n\r\n* Jingyang Li, Maosong Sun. Scalable Term Selection for Text Categorization. Proc. of the 2007 Joint Conference on Empirical Methods in Natural Language Processing and Computational Natural Language Learning (EMNLP-CoNLL), Prague, Czech Republic, 2007, pp. 774-782.\r\n\r\n* Jingyang Li, Maosong Sun, Xian Zhang. A Comparison and Semi-Quantitative Analysis of Words and Character-Bigrams as Features in Chinese Text Categorization. Proc. of the 2006 Joint Conference of the International Committee on Computational Linguistics and the Association for Computational Linguistics (COLING-ACL 2006), Sydney, Australia, 2006, pp. 545-552.\r\n\r\n## 作者\r\n\r\n指导教师：Maosong Sun（孙茂松教授）\r\n\r\n贡献者：Zhipeng Guo（郭志芃），Yu Zhao（赵宇），Yabin Zheng（郑亚斌），Xiance Si（司宪策），Zhiyuan Liu（刘知远）.\r\n\r\n使用者如有任何问题、建议和意见，欢迎发邮件至 thunlp@gmail.com 。\r\n\r\n\r\n\t\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthunlp%2FTHUCTC","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthunlp%2FTHUCTC","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthunlp%2FTHUCTC/lists"}