当前位置: 首页 > 软件库 > 程序开发 > 中文分词库 >

ctbparser

中文句法分析器
授权协议 LGPL
开发语言 C/C++
所属分类 程序开发、 中文分词库
软件类型 开源软件
地区 国产
投 递 者 农诚
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

一个用C++实现的 中文句法分析 工具包,采用的是中文宾州树库标准(Chinese Tree Bank),并提供源代码。 可以对原始的文档(GBK编码)进行自动繁简转换,分句,分词,词性标注,依存句法分析。

该句法分析工具采用了标准的图模型算法,即最大生成树算法(projective Maximum Spanning Tree)。该算法由Eisner于96年提出,复杂度为句子长度的三次方。详情可参见论文[1]

句法分析目前尚属于研究阶段,离实际应用还有很长的距离。其关键问题在于句法分析速度太慢。远远落后于分词和词性标注,因此无法处理海量数据。正因 为这样,本工具包不提供更加耗时的高阶解码算法(Higher order projective parsing),并采用新的数据结构[2],在无损精度的前提下,提高句法分析的速度。

系统框架:

整个句法分析分为5步:
1、繁简、半全角转换并切句:所有繁体字通过一张对应表转成简体字,所有的半角符号转成全角。比如'a'就转成'a'。对转换好的句子,用简单的规则进行切句。
2、命名实体识别:采用条件随机场模型标出句中的人名、地名。
3、分词:采用条件随机场模型进行分词,人名、地名被强制独立成词。此外,采用最短路的方法匹配出字典中的词。
4、词性标注:采用条件随机场模型进行词性标注,字典匹配出的词,其词性和字典一致。
5、句法分析:采用最优生成树算法,对句子进行句法分析。

评测:
在CTB6标准测试集上,ctbparser分词得到95.3% F1值,词性标注精度94.27%,句法分析精度81%。处理速度(包括分词、词性标注、句法分析)的速度是每秒30句,内存占用为270M。(操作系 统:64位CentOS 5,CPU: Intel(R) Xeon(R) E5405, 2.00GHz)

具体使用说明在工具包readme_cn.html文件中,这里就不提了。

参考文献:

[1] Mark A. Paskin, "Cubic-time Parsing and Learning Algorithms for Grammatical Bigram Models", technique report, 2001

[2] Xian Qian, Qi Zhang, Xuangjing Huang and Lide Wu. "2D Trie for fast parsing ", COLING 2010

 相关资料
  • 我需要使用斯坦福NLP工具对关于特定主题的新闻文章进行情感分析。 这样的工具只允许基于句子的情感分析,而我想提取关于我的主题的整个文章的情感评价。 例如,如果我的主题是苹果,我想知道关于苹果的新闻文章的观点。 另一方面,将我的句子过滤到只包含Apple这个词的句子中,会遗漏类似“Apple的产品A很好。但是,它缺乏以下关键功能:...”的文章。在这种情况下,如果我只使用包含Apple这个词的句子,

  • 句法分析 先来解释一下句法分析。句法分析分为句法结构分析和依存关系分析。 句法结构分析也就是短语结构分析,比如提取出句子中的名次短语、动词短语等,最关键的是人可以通过经验来判断的短语结构,那么怎么由机器来判断呢? (有关依存关系分析的内容,具体可以看《自己动手做聊天机器人 十二-教你如何利用强大的中文语言技术平台做依存句法和语义依存分析》) 句法分析树 样子如下:          -吃(v)-

  • 前面的章节重点关注词:如何识别它们,分析它们的结构,分配给他们词汇类别,以及获得它们的含义。我们还看到了如何识别词序列或n-grams中的模式。然而,这些方法只触碰到支配句子的复杂约束的表面。我们需要一种方法处理自然语言中显著的歧义。我们还需要能够应对这样一个事实,句子有无限的可能,而我们只能写有限的程序来分析其结构和发现它们的含义。 本章的目的是要回答下列问题: 我们如何使用形式化语法来描述无限

  • 输入文本为2020年2月20日 以下代码块抛出,其中包含无法分析的消息文本“28Feb2020”,在索引7中找到未分析的文本:

  • 我的功能文件如下 end2end_test.feature 我的runner.java文件如下所示 testRunner.java

  • 我一直在尝试用java编写一个简单的词法分析器。 File Token.java如下: Lexer如下:Lexer。JAVA 并且可以用Try.java测试如下: 说出输入。txt有 我期望的输出是 但我面临的问题是:它把每个数字都当作 而且它不能识别实数。我得到: 意外符号:'.' 为了达到预期的效果,需要做哪些改变?