在自然语境中,一个意思可以有多种表现。比如“我喜欢你”“我喜欢隔壁班的你”“你被我偷偷的喜欢着”都表达了“我喜欢你”。搜索引擎如果机械地按照词频算法检索的话,会误解为“我喜欢隔壁班”“你喜欢我”,毕竟词频一样,顺序也差不多。

利用依存关系可以提取句子的主要成分(也就是小学和公务员考试中出现的“提取主干”),可以实现语义上的智能理解。在中文里,我的感受是,大部分句子都有主谓宾,很少缺主语或宾语,三个全缺的几乎没有。所以我猜可以利用主谓宾短语来作为句子的主干,检索的时候主干匹配的话则给予更高的分数,或者用于智能推荐。

开源项目

收到了开源的请求,于是将其开源在Github上:https://github.com/hankcs/MainPartExtractor

请使用Maven编译,会自动下载依赖jar。

对斯坦福的代码失去兴趣,不再维护!

事实上,句法分析和语义理解是个深刻的命题,并不是我这一两个Class可以解决清楚的。而且目前中文句法分析的准确率只有80%左右,在真实语境中的准确率更低。所以能否将其用于生产环境,还请各位读者自己衡量。

本项目的句法分析依赖于Stanford Parser实现,一般来说,大学做的东西都是服务于论文。只要论文上的准确率高出一两个百分点,牺牲再多的性能,再多的可读性都无所谓。我认为,真正要将语义分析导入商用应用,现在还为时过早,这篇文章和这个项目可做尝鲜。

测试用例

 
  1. String[] testCaseArray = {
  2. "我一直很喜欢你",
  3. "你被我喜欢",
  4. "美丽又善良的你被卑微的我深深的喜欢着……",
  5. "只有自信的程序员才能把握未来",
  6. "主干识别可以提高检索系统的智能",
  7. "这个项目的作者是hankcs",
  8. "hankcs是一个无门无派的浪人",
  9. "搜索hankcs可以找到我的博客",
  10. "静安区体育局2013年部门决算情况说明",
  11. };

这里仅仅以一个被字句“你被我喜欢”为例说明。注意句子应当是单句,不含逗号等分句标点。

分词

分词没什么可说的,停用词也不用费心。

 
  1. 分词结果为:你 被 我 喜欢

句法树(依存关系)分析

这里可以利用开源项目Stanford Parser,得到如下结果:

 
  1. 句法树:(ROOT [28.316]
  2. (IP
  3. (NP (PN 你))
  4. (VP (LB 被)
  5. (IP
  6. (NP (PN 我))
  7. (VP (VV 喜欢))))))

画成图是这个样子:

同时得到依存关系:

 
  1. 依存关系:[nsubjpass(喜欢-4, 你-1), pass(喜欢-4, 被-2), nsubj(喜欢-4, 我-3), root(ROOT-0, 喜欢-4)]

其中root表示中心词,nsubjpass表示被动的名词主语,nsubj表示名词主语。更加详细的标签含义可以查看附录。有了依存关系之后,就可以判断谁是主语谁是宾语了。

测试结果:

我一直很喜欢你 我喜欢你
你被我喜欢 我喜欢你
美丽又善良的你被卑微的我深深的喜欢着…… 我喜欢你
只有自信的程序员才能把握未来 程序员把握未来
主干识别可以提高检索系统的智能 主干识别提高智能
这个项目的作者是hankcs 作者是hankcs
hankcs是一个无门无派的浪人 hankcs是浪人
搜索hankcs可以找到我的博客 搜索hankcs找博客
静安区体育局2013年部门决算情况说明 决算情况说明

附录:

ROOT:要处理文本的语句

IP:简单从句
NP:名词短语
VP:动词短语
PU:断句符,通常是句号、问号、感叹号等标点符号
LCP:方位词短语
PP:介词短语
CP:由‘的’构成的表示修饰性关系的短语
DNP:由‘的’构成的表示所属关系的短语
ADVP:副词短语
ADJP:形容词短语
DP:限定词短语
QP:量词短语
NN:常用名词
NR:固有名词
NT:时间名词
PN:代词
VV:动词
VC:是
CC:表示连词
VE:有
VA:表语形容词
AS:内容标记(如:了)
VRD:动补复合词
CD: 表示基数词
DT: determiner 表示限定词
EX: existential there 存在句
FW: foreign word 外来词
IN: preposition or conjunction, subordinating 介词或从属连词
JJ: adjective or numeral, ordinal 形容词或序数词
JJR: adjective, comparative 形容词比较级
JJS: adjective, superlative 形容词最高级
LS: list item marker 列表标识
MD: modal auxiliary 情态助动词
PDT: pre-determiner 前位限定词
POS: genitive marker 所有格标记
PRP: pronoun, personal 人称代词
RB: adverb 副词
RBR: adverb, comparative 副词比较级
RBS: adverb, superlative 副词最高级
RP: particle 小品词 
SYM: symbol 符号
TO:”to” as preposition or infinitive marker 作为介词或不定式标记 
WDT: WH-determiner WH限定词
WP: WH-pronoun WH代词
WP$: WH-pronoun, possessive WH所有格代词
WRB:Wh-adverb WH副词
 
关系表示
abbrev: abbreviation modifier,缩写
acomp: adjectival complement,形容词的补充;
advcl : adverbial clause modifier,状语从句修饰词
advmod: adverbial modifier状语
agent: agent,代理,一般有by的时候会出现这个
amod: adjectival modifier形容词
appos: appositional modifier,同位词
attr: attributive,属性
aux: auxiliary,非主要动词和助词,如BE,HAVE SHOULD/COULD等到
auxpass: passive auxiliary 被动词
cc: coordination,并列关系,一般取第一个词
ccomp: clausal complement从句补充
complm: complementizer,引导从句的词好重聚中的主要动词
conj : conjunct,连接两个并列的词。
cop: copula。系动词(如be,seem,appear等),(命题主词与谓词间的)连系
csubj : clausal subject,从主关系
csubjpass: clausal passive subject 主从被动关系
dep: dependent依赖关系
det: determiner决定词,如冠词等
dobj : direct object直接宾语
expl: expletive,主要是抓取there
infmod: infinitival modifier,动词不定式
iobj : indirect object,非直接宾语,也就是所以的间接宾语;
mark: marker,主要出现在有“that” or “whether”“because”, “when”,
mwe: multi-word expression,多个词的表示
neg: negation modifier否定词
nn: noun compound modifier名词组合形式
npadvmod: noun phrase as adverbial modifier名词作状语
nsubj : nominal subject,名词主语
nsubjpass: passive nominal subject,被动的名词主语
num: numeric modifier,数值修饰
number: element of compound number,组合数字
parataxis: parataxis: parataxis,并列关系
partmod: participial modifier动词形式的修饰
pcomp: prepositional complement,介词补充
pobj : object of a preposition,介词的宾语
poss: possession modifier,所有形式,所有格,所属
possessive: possessive modifier,这个表示所有者和那个’S的关系
preconj : preconjunct,常常是出现在 “either”, “both”, “neither”的情况下
predet: predeterminer,前缀决定,常常是表示所有
prep: prepositional modifier
prepc: prepositional clausal modifier
prt: phrasal verb particle,动词短语
punct: punctuation,这个很少见,但是保留下来了,结果当中不会出现这个
purpcl : purpose clause modifier,目的从句
quantmod: quantifier phrase modifier,数量短语
rcmod: relative clause modifier相关关系
ref : referent,指示物,指代
rel : relative
root: root,最重要的词,从它开始,根节点
tmod: temporal modifier
xcomp: open clausal complement
xsubj : controlling subject 掌控者

中心语为谓词
  subj — 主语
 nsubj — 名词性主语(nominal subject) (同步,建设)
   top — 主题(topic) (是,建筑)
npsubj — 被动型主语(nominal passive subject),专指由“被”引导的被动句中的主语,一般是谓词语义上的受事 (称作,镍)
 csubj — 从句主语(clausal subject),中文不存在
 xsubj — x主语,一般是一个主语下面含多个从句 (完善,有些)

中心语为谓词或介词   
   obj — 宾语
  dobj — 直接宾语 (颁布,文件)
  iobj — 间接宾语(indirect object),基本不存在
 range — 间接宾语为数量词,又称为与格 (成交,元)
  pobj — 介词宾语 (根据,要求)
  lobj — 时间介词 (来,近年)

中心语为谓词
  comp — 补语
 ccomp — 从句补语,一般由两个动词构成,中心语引导后一个动词所在的从句(IP) (出现,纳入)
 xcomp — x从句补语(xclausal complement),不存在   
 acomp — 形容词补语(adjectival complement)
 tcomp — 时间补语(temporal complement) (遇到,以前)
lccomp — 位置补语(localizer complement) (占,以上)
       — 结果补语(resultative complement)

中心语为名词
   mod — 修饰语(modifier)
  pass — 被动修饰(passive)
  tmod — 时间修饰(temporal modifier)
 rcmod — 关系从句修饰(relative clause modifier) (问题,遇到)
 numod — 数量修饰(numeric modifier) (规定,若干)
ornmod — 序数修饰(numeric modifier)
   clf — 类别修饰(classifier modifier) (文件,件)
  nmod — 复合名词修饰(noun compound modifier) (浦东,上海)
  amod — 形容词修饰(adjetive modifier) (情况,新)
advmod — 副词修饰(adverbial modifier) (做到,基本)
  vmod — 动词修饰(verb modifier,participle modifier)
prnmod — 插入词修饰(parenthetical modifier)
   neg — 不定修饰(negative modifier) (遇到,不)
   det — 限定词修饰(determiner modifier) (活动,这些)
 possm — 所属标记(possessive marker),NP
  poss — 所属修饰(possessive modifier),NP
  dvpm — DVP标记(dvp marker),DVP (简单,的)
dvpmod — DVP修饰(dvp modifier),DVP (采取,简单)
  assm — 关联标记(associative marker),DNP (开发,的)
assmod — 关联修饰(associative modifier),NP|QP (教训,特区)
  prep — 介词修饰(prepositional modifier) NP|VP|IP(采取,对)
 clmod — 从句修饰(clause modifier) (因为,开始)
 plmod — 介词性地点修饰(prepositional localizer modifier) (在,上)
   asp — 时态标词(aspect marker) (做到,了)
partmod– 分词修饰(participial modifier) 不存在
   etc — 等关系(etc) (办法,等)

中心语为实词
  conj — 联合(conjunct)
   cop — 系动(copula) 双指助动词????
    cc — 连接(coordination),指中心词与连词 (开发,与)

其它
  attr — 属性关系 (是,工程)
cordmod– 并列联合动词(coordinated verb compound) (颁布,实行)
  mmod — 情态动词(modal verb) (得到,能)
    ba — 把字关系
tclaus — 时间从句 (以后,积累)
       — semantic dependent
   cpm — 补语化成分(complementizer),一般指“的”引导的CP (振兴,的)

Reference

http://nlp.stanford.edu/nlp/javadoc/javanlp/overview-summary.html

http://blog.csdn.net/cuixianpeng/article/details/16864785

http://blog.csdn.net/tanzhangwen/article/details/8262049

提取中文句子主谓宾的Java实现相关推荐

  1. php 主谓宾分词,主谓宾英语句子30个

    经常有学生和家长搜索主谓宾英语句子30个,对于这一问题,小编整理了以下回答,希望能帮助学生和家长! 1  主谓宾英语句子30个主谓宾句子举例英语 1. The rain has stopped. 雨停 ...

  2. 工程实践:基于规则句法的事件关系与主谓宾三元组抽取项目实现

    目前,知识图谱在学术界如火如荼地进行,但受限于知识图谱各个环节中的性能问题,还尚未能够在工业界大规模运用.而与知识图谱中以实体为知识节点,实体关系为实体关系边对知识进行组织不同,以事件作为节点,事件关 ...

  3. 浅析英语五大成分-主谓宾定状

    浅析英语五大成分-主谓宾定状 以下就我个人对英语的理解阐述英语中五大成分的基本概念,仅代表我个人看法. 主谓宾 在说主谓宾之前,我先来阐述一下我所认为的世界: 我认为世界由事物及其相互作用组成.&qu ...

  4. 重温主谓宾,主系表语法从入门到精通

    一.什么是主谓宾? 在中文语法中,主谓宾是一种基本的句子结构.它由三个核心要素组成:主语.谓语和宾语.主语是执行动作的人.物或概念:谓语是描述主语动作或状态的部分:宾语是受到动作影响的人.物或概念. ...

  5. 三大句型:主谓宾句型

    一.什么句子是主谓宾句型(判断方式) 判断方式 主语后面是(动词) (身体)看,跑,吃,喝 (心理)想,爱,思念,决定 二.用主谓宾句型翻译句子 1.我 爱 你 I + love + you. 2.他 ...

  6. 主谓宾定状补口诀及练习题

    学语文,有口诀 主谓宾.定状补,主干枝叶分清楚. 定语必居主宾前,谓前为状谓后补. 状语有时位主前,逗号分开心有数. 基本成分主谓宾,连带成分定状补.定语必居主宾前,谓前为状谓后补. 六者关系难分辨, ...

  7. 程序员英语语法学习(1)句子成分有八个,你却只知主谓宾?

    句子成分有八个,你却只知主谓宾? 在这之前, 我们讲了语法需搞定三个部分, 我们了解了句子, 今天我们继续来了解, 何谓句子成分? 其实就是组成句子的各个部分. 句子成分有八个, 莫方,莫走, 想学好 ...

  8. 主谓宾定状补......

    [size=medium]近期做搜索方面的项目需要用到语义分析... 悲剧啊,工作了还要被这些该死的"主谓宾定状补"烦 :x 例子理解 [color=darkred] 聪明的 小明 ...

  9. 区分主谓宾补和主谓宾宾

    主谓宾补 检验 主谓宾补 的方法 – 在宾语和补语之间加上一个be动词进去,看看能否变成 主系表 的结构.补语 一般为 形容词或者不定式. 例: I find the dress pretty. 在宾 ...

最新文章

  1. asp.net 2.0中的弹出对话框
  2. 视学算法第五轮送书活动获奖名单
  3. MySQL 千万级数据表 partition 实战应用
  4. 微信小程序-控制文本只显示若干行多余隐藏
  5. 二级c语言题型分数,计算机二级C语言题型和评分标准
  6. 一个非常有用的辅助类 -- 阈值类的实现
  7. esp8266 at接收数据中断时间_关于嵌入式系统中断优先级的一点思考
  8. 怎么用Linux查看服务器日志,Linux查看服务器日志
  9. ArrayList的使用方法
  10. html论坛发帖案例
  11. 品牌的成功取决于质量的好坏
  12. Apache 防盗链(Apache Anti-Leech)技术的简单实现
  13. Java经典面试题答案解析(1-80题)
  14. NavCat15安装教程
  15. macos 虚拟镜像文件_如何在macOS中使用虚拟文件测试网络或硬盘速度
  16. GO语言 | go work 神一般的管理 多个module没烦恼
  17. BigPipe理解及用法
  18. 开发者实验室体验之文智自然语言处理SDK by python
  19. Matlab机器人工具箱(0)——旋转与平移变换
  20. AD20和立创EDA设计(5)立创EDA导出3D模型放入AD20使用

热门文章

  1. parentNode,parentElement,childNodes,children之间的区别
  2. unity3D游戏开发实战(五)——声音
  3. 东西方文化溯源和比较
  4. 硬盘有坏块的数据恢复方法
  5. Springboot发送邮件实现注册激活
  6. 噩梦系列篇之Player的动画播放控制
  7. 基于java的五子棋游戏
  8. POSTGRES 15 流复制搭建主备
  9. 基于MSP430单片机的微功耗中文人机界面设计
  10. 涂料选购小秘诀 环保涂料品牌哪些好