Stanford Corenlp—词性标注

关于词性标记

动词,形容词(4种):VA,VC,VE,VV

1、谓词性形容词:VA

谓词性形容词大致上相当于英语中的形容词和中文语法中、文学作品里的静态动词。我们的谓词性形容词包括两类:

第一类:没有宾语且能被“很”修饰的谓语。

第二类:源自第一类的、通过重叠(如红彤彤)或者通过名词加形容词模式意味着“像N一样A”(如雪白)的谓语。这个类型的谓词性形容词没有宾语,但是有一些不能被“很”修饰,因为这些词的强调意思已经内嵌在词内了。

注意:当集合(VA)中的一个词修饰名词但没有用“的”,那么它被标注为JJ(名作定)或是一个名词,而不是VA。当集合(VA)中的一个词有一个宾语,那么它被标注为VV,而不是VA。譬如,这 项/M 活动 丰富/VV 了/AS 他 的/DEG 生活。

2、系动词:VC

“是”和“为”被标记为VC。如果“非”的意思是“不是”并且句子里没有其他动词时,“非”也被标注为VC。

“是”有几种用法:

·连接两个名词短语或者主语:他 是/VC 学生。

·在分裂句中:他 是/VC 昨天 来 的/SP。

·为了强调:他 是/VC 喜欢 看 书。

现在,在所有这些情况中,“是”被标注为VC。

3 、“有”作为主要动词:VE

只有当“有,没{有}”和“无”作为主要动词时(包括占有的“有”和表存在的“有”等等),被标注为VE。

4、其他动词:VV

VV包括其他动词,诸如情态动词,提升谓词(如“可能”),控制动词(如“要”、“想”),行为动词(如“走”),心理动词(如“喜欢”、“了解”、“怨恨”),等等。

 

名词(3种):NR,NT,NN

1、专有名词:NR

专有名词是名词的子集。一个专有名词可以是一个特定的人名,政治或地理上定义的地方(城市、国家、河流、山脉等),或者是一种组织(企业、政府或其他组织实体)。一个专有名词通常是独一无二,并且不能被Det+M所修饰的。

·以下名字是专有名词:

地区/国家/村庄/城市,山脉/河流,报纸/杂志, 组织/公司,学校/联盟/基金会,个人/家庭。

·以下名字不是专有名词:

国籍(如中国人),种族(如白人),职称(如教授),疾病,职业,器官(如肺),乐器(如钢琴),游戏(如足球),花(如玫瑰),等等。

2、时间名词:NT

时间名词可以是介词的宾语,譬如在、从、到、等到。它们可以被问及,如“这个时候”,也可以被用以提问“什么时候”。它们也可以直接修饰VP(动词短语)或者S(主语)。像其他名词一样,时间名词可以是某些动词的论元。

时间名词可以是时间的名称(如1990年、一月、汉朝)或是由“PN+LC,N+LC,DT+N”等结构组成。

例子:一月、汉朝、当今、何时、今后

3、其他名词:NN

其他名词包括所有其他名词。其他名词NN,除了地方名词,一般不能修饰动词短语(有“地/DEV”或者没“地/DEV”)。

 

定位(1):LC

方位词:LC

很多名词单独使用时不能作为介词如“在”、“到”的论元,也不能直接修饰VP(动词短语)或者S(主语)。方位词的一个功能是连接前述的名词短语或者主语,从而使整个短语可以作为这些介词的论元或者来修饰动词短语或主语。

一些方位词可以独立使用作为介词或动词的论元。一些方位词可以被“最”修饰。方位词不能被Det+M所修饰。

方位词分为两类:

·方位词:这类方位词表示方向、位置等。它们来自名词。一些可以单独使用作为介词或动词的论元。一些可以被“最”修饰。它们不能被Det+M所修饰。

 —单音节方位词:如:前,后,里,外,内,北,东,边,侧,底,间,末,旁。

 —双音节方位词:它们由以下部分组成:

   *单音节方位词加上诸如“以、之”等的语素。

    例子:之间,以北。

   *两个单音节方位词。

    例子:前后,左右,上下,东北。

·其他:我们把以下情况标注为LC。

  . 为止:到 目前 为止。

  . 开始:从 四月 开始。

  . 来:5年 来。

  . 以来: 1998年 以来。

  . 起: 一九九三年 起。

  . 在内:包括 他 在内。

 

代词(1种):PN

代词的功能是作为名词短语的替代物或者表示事先详细说明的或者从上下文可知晓的被叫的人或事。它们一般不受Det+M或者形容词性短语修饰。

代词包括人称代词(如我、你),当作为名词短语单独使用时为指示代词(如这、那),所有格代名词(如其)以及反身代词(如我自己、自己)。

 

限定词和数词(3种):DT,CD,OD

1、限定词:DT

限定词包括指示词(如这、那、该)和诸如“每、各、前、后”等词。限定词不包括基数词和序列词。

参见限定词部分。

2、基数词:CD

CD包括基数词并随意与一些概数词连用,如“来、多、好几”和诸如“好些、若干、半、许多、很多(如很多 学生)”等词。

例子:1245,一百。

3、序列词:OD

序列词被标注为OD。我们把第+CD看做一个词,并标注它为OD。

例子:第一百。

 

度量词(1):M

度量词跟在数字后形成Det+M结构修饰名词或动词,包括类词(如“个”),表示一群的度量词,如“群”,以及公里、升等度量词。

一些度量词可以被有限的形容词(如一/CD小/JJ瓶/M水/NN),临时量词可以被名词和形容词修饰(如:一/CD铁/NN箱子/M书/NN)。

 

副词(1):AD 

副词包括情态副词、频率副词、程度副词、连接副词等,大部分副词的功能是修饰动词短语或主语。

如:仍然、很、最、大大、又、约

 

介词(1):P

介词可以把名词短语或从句作为论元。

注释:把和被不标注为P,详见2.11部分。

如:从、对

 

连词(2):CC,CS

1、并列连接词:CC

CC的主要模式是:XP{,},CC XP。

如:与、和、或、或者、还是(or)

2、从属连词:CS

从属连词连接两个句子,一个句子从属于另一个,这样的连词标记为CS。CS模式是:CS S1,S2和S2 CS,S1。

如:如果/CS,……就/AD……

 

助词(8):DEC,DEG,DER,DEV,SP,AS,ETC,SP,MSP

1、“作为补语标记/名词化标记:DEC(的,之)

如:吃的DEC

模式是:S/VP DEC{NP}

注:的还有其他标记

·DEC 他的/DEG车

·SP   他是/VC一定要来的/SP。

·AS   他是/VC在这里下的/AS车。

2、“的”作为关联标记或所有格标记:DEG

     模式:NP/PP/JJ/DT DEG{NP}。

3、 补语短语 得:DER

   在V-得-R和V-得结构中,“得”标记为DER。

   注:有些以“得”结尾的搭配不是V-得结构,如记得,获得是动词。

4、方式“地”:DEV

当“地”出现在“XP地VP”,XP修饰VP。在一些古典文学中,“的”也用于这种情景,此时“的”也标注为DEV。

5、动态助词:AS

动态助词仅包括“着,了,过,的”。

6、句末助词:SP

SP经常出现在句末,如:他好吧[SP]?

有时,句末助词用于表停顿,如:他吧[SP],人很好。

如:了,呢,吧,啊,呀,吗

7、 ETC

ETC用于标注等,等等。

8、其他助词:MSP

“所,以,来,而”,当它们出现在VP前时,标注为MSP。

所:他所[MSP]需要的/DEC

以或来:用……以/MSP(或来)维持

而:为……而[MSP]奋斗

 

其他(8):IJ,ON,PU,JJ,FW,LB,SB,BA

1、感叹词:IJ

出现在句首位置的感叹词,如:啊。

2、拟声词:ON

① 修饰“ON地V”中的VP:雨哗哗[ON]地[DEV]下了[AS]一夜

② 修饰“ON中的N”中的NP:砰[ON]的/DEG一声!

③ 自行成句:砰砰[ON]!

④ 一般不能被副词修饰,如:哗啦啦,咯吱。

 3、长“被”结构:LB

仅包括“被,叫,给,为(口语中)”,当它们出现在被字结构NP0+LB+NP1+VP中

如:他被/LB 我训了/AS 一顿/M .

注:当叫作为兼语动词时,“叫”标注为VV。

如:他叫/VV你去。

4、短“被”结构:SB(仅包括口语中的“被,给”)

    NP0+SB+VP,他被/SB 训了/AS一顿/M。

注:“给”有其他标记:LB,VV和P。

如:你给/P他写封/M信。

5、把字结构:BA

仅包括“把,将”,当它们出现在把字结构中(NP0+BA+NP1+VP)。

如:他把/BA你骗了/AS。

注:“将”有其他标记:AD和VV,如:他将/VV了[AS]我的[DEG]军。

6、其他名词修饰语:JJ

包括三种类型:

①区别词 只修饰模式JJ+的+{N}或JJ+N中的名词,且一定要有“的”,它们不能被程度副词修饰。

如:共同/JJ的/DEG目标/NN,她是[VC]女/JJ的/DEG。

②带有连字符的复合词

通常为双音节词 JJ+N 如留美/JJ学者/NN

③形容词:新/JJ消息/NN

模式:JJ+N

注:当“的/DEC”在形容词和名词中间时,形容词标记为VA。

7、外来词:FW

FW仅被用于:当词性标注标记在上下文中不是很清楚时。外来词不包括外来词的翻译,不包括混合中文的词(如卡拉OK/NN,A型/NN),不包括词义和词性在文中都是清楚的词。

8、标点:PU

当标点是词的一部分时,不用标注为PU,如123,456/CD。

 

http://127.0.0.1:9001/

 

使用Stanford CoreNLP的Python封装包处理中文(分词、词性标注、命名实体识别、句法树、依存句法分析)

安装stanfordcorenlp包之前: 1:下载安装JDK 1.8及以上版本。 2:下载Stanford CoreNLP文件,解压。 3:处理中文还需要下载中文的模型jar文件,然后放到stanford-corenlp-full-2016-10-31根目录下即可(注意一定要下载这个文件哦,否则它默认是按英文来处理的)。

本文所用版本为Stanford CoreNLP 3.9.1.1。

故障排除

模型初始化通常需要几十秒,如果很久不出结果,加入quiet=False, logging_level=logging.DEBUG参数输出Debug信息

[2]:

 

 
import logging
from stanfordcorenlp import StanfordCoreNLP 
sentence = '清华大学位于北京。'
base_path = "E:\\jupyter\\python\\nlp\\stanfordcorenlp\\stanford-corenlp-full-2018-10-05"

[5]:

 

 
with StanfordCoreNLP(base_path, lang='zh') as nlp:
    print(nlp.word_tokenize(sentence))
    print(nlp.pos_tag(sentence))
    print(nlp.ner(sentence))
    print(nlp.parse(sentence))
    print(nlp.dependency_parse(sentence)) 
['清华', '大学', '位于', '北京', '。']
[('清华', 'NR'), ('大学', 'NN'), ('位于', 'VV'), ('北京', 'NR'), ('。', 'PU')]
[('清华', 'ORGANIZATION'), ('大学', 'ORGANIZATION'), ('位于', 'O'), ('北京', 'STATE_OR_PROVINCE'), ('。', 'O')]
(ROOT
  (IP
    (NP (NR 清华) (NN 大学))
    (VP (VV 位于)
      (NP (NR 北京)))
    (PU 。)))
[('ROOT', 0, 3), ('compound:nn', 2, 1), ('nsubj', 3, 2), ('dobj', 3, 4), ('punct', 3, 5)]

[3]:

 

 
nlp = StanfordCoreNLP(base_path,port=9001, lang='zh', quiet=False, logging_level=logging.DEBUG)
nlp
INFO:root:Initializing native server...
INFO:root:java -Xmx4g -cp "E:\jupyter\python\nlp\stanfordcorenlp\stanford-corenlp-full-2018-10-05\*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9001
INFO:root:Server shell PID: 16556
INFO:root:The server is available.

[3]:

<stanfordcorenlp.corenlp.StanfordCoreNLP at 0x296e79fa198>

[5]:

 

 
import requests
url = 'http://127.0.0.1:9001'
properties = {'annotators': 'tokenize,ssplit,pos', 'outputFormat': 'json'}
# properties 要转成字符串, requests包装URL的时候貌似不支持嵌套的dict
params = {'properties' : str(properties)}
data = '天气非常好'
resp = requests.post(url, data.encode('utf-8'), params=params)
resp
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): 127.0.0.1:53388
DEBUG:urllib3.connectionpool:http://127.0.0.1:53388 "POST http://127.0.0.1:9001/?properties=%7B%27annotators%27%3A+%27tokenize%2Cssplit%2Cpos%27%2C+%27outputFormat%27%3A+%27json%27%7D HTTP/1.1" 200 347

[5]:

<Response [200]>

[7]:

 

 
resp.json()

[7]:

{'sentences': [{'index': 0,
   'tokens': [{'after': '',
     'before': '',
     'characterOffsetBegin': 0,
     'characterOffsetEnd': 5,
     'index': 1,
     'originalText': '天气非常好',
     'pos': 'SYM',
     'word': '天气非常好'}]}]}

[10]:

 

 
sentence = '重庆师范大学有1200平方米,重师数学学院有400多人,2018年10月10日一共有3万多师生'
print("==============word_tokenize=====================")
print (nlp.word_tokenize(sentence))
print("==============pos_tag=====================")
print (nlp.pos_tag(sentence))
print("==============ner=====================")
print (nlp.ner(sentence))
print("==============parse=====================")
print (nlp.parse(sentence))
print("==============dependency_parse=====================")
print (nlp.dependency_parse(sentence)) 
INFO:root:{'properties': "{'annotators': 'ssplit,tokenize', 'outputFormat': 'json'}", 'pipelineLanguage': 'zh'}
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:9001
DEBUG:urllib3.connectionpool:http://localhost:9001 "POST /?properties=%7B%27annotators%27%3A+%27ssplit%2Ctokenize%27%2C+%27outputFormat%27%3A+%27json%27%7D&pipelineLanguage=zh HTTP/1.1" 200 3829
INFO:root:{'properties': "{'annotators': 'pos', 'outputFormat': 'json'}", 'pipelineLanguage': 'zh'}
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:9001
DEBUG:urllib3.connectionpool:http://localhost:9001 "POST /?properties=%7B%27annotators%27%3A+%27pos%27%2C+%27outputFormat%27%3A+%27json%27%7D&pipelineLanguage=zh HTTP/1.1" 200 4311
INFO:root:{'properties': "{'annotators': 'ner', 'outputFormat': 'json'}", 'pipelineLanguage': 'zh'}
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:9001
DEBUG:urllib3.connectionpool:http://localhost:9001 "POST /?properties=%7B%27annotators%27%3A+%27ner%27%2C+%27outputFormat%27%3A+%27json%27%7D&pipelineLanguage=zh HTTP/1.1" 200 7020
INFO:root:{'properties': "{'annotators': 'pos,parse', 'outputFormat': 'json'}", 'pipelineLanguage': 'zh'}
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:9001
==============word_tokenize=====================
['重庆', '师范', '大学', '有', '1200', '平方米', ',', '重师', '数学', '学院', '有', '400多', '人', ',', '2018年', '10月', '10日', '一共', '有', '3万多', '师生']
==============pos_tag=====================
[('重庆', 'NR'), ('师范', 'NR'), ('大学', 'NN'), ('有', 'VE'), ('1200', 'CD'), ('平方米', 'M'), (',', 'PU'), ('重师', 'NN'), ('数学', 'NN'), ('学院', 'NN'), ('有', 'VE'), ('400多', 'CD'), ('人', 'NN'), (',', 'PU'), ('2018年', 'NT'), ('10月', 'NT'), ('10日', 'NT'), ('一共', 'AD'), ('有', 'VE'), ('3万多', 'CD'), ('师生', 'NN')]
==============ner=====================
[('重庆', 'ORGANIZATION'), ('师范', 'ORGANIZATION'), ('大学', 'ORGANIZATION'), ('有', 'O'), ('1200', 'NUMBER'), ('平方米', 'O'), (',', 'O'), ('重师', 'O'), ('数学', 'O'), ('学院', 'O'), ('有', 'O'), ('400多', 'NUMBER'), ('人', 'O'), (',', 'O'), ('2018年', 'DATE'), ('10月', 'DATE'), ('10日', 'DATE'), ('一共', 'O'), ('有', 'O'), ('3万多', 'NUMBER'), ('师生', 'O')]
==============parse=====================
DEBUG:urllib3.connectionpool:http://localhost:9001 "POST /?properties=%7B%27annotators%27%3A+%27pos%2Cparse%27%2C+%27outputFormat%27%3A+%27json%27%7D&pipelineLanguage=zh HTTP/1.1" 200 16180
INFO:root:{'properties': "{'annotators': 'depparse', 'outputFormat': 'json'}", 'pipelineLanguage': 'zh'}
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): localhost:9001
(ROOT
  (IP
    (IP
      (NP (NR 重庆) (NR 师范) (NN 大学))
      (VP (VE 有)
        (QP (CD 1200)
          (CLP (M 平方米)))))
    (PU ,)
    (IP
      (NP
        (NP (NN 重师) (NN 数学))
        (NP (NN 学院)))
      (VP (VE 有)
        (NP
          (QP (CD 400多))
          (NP (NN 人)))))
    (PU ,)
    (IP
      (NP (NT 2018年) (NT 10月) (NT 10日))
      (ADVP (AD 一共))
      (VP (VE 有)
        (NP
          (QP (CD 3万多))
          (NP (NN 师生)))))))
==============dependency_parse=====================
DEBUG:urllib3.connectionpool:http://localhost:9001 "POST /?properties=%7B%27annotators%27%3A+%27depparse%27%2C+%27outputFormat%27%3A+%27json%27%7D&pipelineLanguage=zh HTTP/1.1" 200 15251
[('ROOT', 0, 4), ('compound:nn', 3, 1), ('compound:nn', 3, 2), ('dep', 4, 3), ('dep', 4, 5), ('mark:clf', 5, 6), ('punct', 4, 7), ('compound:nn', 10, 8), ('compound:nn', 10, 9), ('dep', 11, 10), ('conj', 4, 11), ('dep', 13, 12), ('dobj', 11, 13), ('punct', 4, 14), ('compound:nn', 17, 15), ('compound:nn', 17, 16), ('nmod:tmod', 19, 17), ('advmod', 19, 18), ('conj', 4, 19), ('dep', 21, 20), ('dobj', 19, 21)]
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ljtyxl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值