文章目录
1、HanLP接口
from pyhanlp import HanLP
s = '会议宣布了首批资深院士名单'
dp = HanLP.parseDependency(s)
- print(dp)
1 会议 会议 n n _ 2 主谓关系 _ _
2 宣布 宣布 v v _ 0 核心关系 _ _
3 了 了 u u _ 2 右附加关系 _ _
4 首批 首批 q q _ 7 定中关系 _ _
5 资深 资深 b b _ 6 定中关系 _ _
6 院士 院士 n n _ 7 定中关系 _ _
7 名单 名单 n n _ 2 动宾关系 _ _
2、百度AI接口
2.1、示例
from aip import AipNlp # pip install baidu-aip
# 创建连接
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
client = AipNlp(APP_ID, API_KEY, SECRET_KEY)
# 依存句法分析
text = '会议宣布了首批资深院士名单'
dt = client.depParser(text)
print(dt)
2.2、mode参数(可选)
参数值 | 指代 | 解析 |
---|---|---|
0(默认) | web模型 | 该模型的训练数据来源于全网网页数据,适用于处理网页文本等书面表达句子。 |
1 | query模型 | 该模型的训练数据来源于用户在百度的日常搜索数据,适用于处理信息需求类的搜索或口语。 |
2.3、返回值
参数名称 | 数据类型 | 详细说明 |
---|---|---|
log_id | uint64 | 随机数,本次请求的唯一标识码 |
id | number | 词的ID |
word | string | 词 |
postag | string | 词性 |
head | int | 词的父节点ID |
deprel | string | 词与父节点的依存关系 |
{
'log_id': 7231479245283731092,
'text': '会议宣布了首批资深院士名单',
'items': [{
'postag': 'n',
'head': 2,
'word': '会议',
'id': 1,
'deprel': 'SBV'
}, {
'postag': 'v',
'head': 0,
'word': '宣布',
'id': 2,
'deprel': 'HED'
}, {
'postag': 'u',
'head': 2,
'word': '了',
'id': 3,
'deprel': 'MT'
}, {
'postag': 'm',
'head': 6,
'word': '首批',
'id': 4,
'deprel': 'ATT'
}, {
'postag': 'b',
'head': 6,
'word': '资深',
'id': 5,
'deprel': 'ATT'
}, {
'postag': 'n',
'head': 7,
'word': '院士',
'id': 6,
'deprel': 'ATT'
}, {
'postag': 'n',
'head': 2,
'word': '名单',
'id': 7,
'deprel': 'VOB'
}]
}
2.3.1、词性标注
词性 | 含义 | 词性 | 含义 | 词性 | 含义 | 词性 | 含义 |
---|---|---|---|---|---|---|---|
Ag | 形语素 | g | 语素 | ns | 地名 | u | 助词 |
a | 形容词 | h | 前接成分 | nt | 机构团体 | vg | 动语素 |
ad | 副形词 | i | 成语 | nz | 其他专名 | v | 动词 |
an | 名形词 | j | 简称略语 | o | 拟声词 | vd | 副动词 |
b | 区别词 | k | 后接成分 | p | 介词 | vn | 名动词 |
c | 连词 | l | 习用语 | q | 量词 | w | 标点符号 |
dg | 副语素 | m | 数词 | r | 代词 | x | 非语素字 |
d | 副词 | Ng | 名语素 | s | 处所词 | y | 语气词 |
e | 叹词 | n | 名词 | tg | 时语素 | z | 状态词 |
f | 方位词 | nr | 人名 | t | 时间词 | un | 未知词 |
2.3.2、依存关系
句法 | 缩写 | 解释 | 栗子 |
---|---|---|---|
定中关系 | ATT | 定中关系就是定语和中心词之间的关系,定语对中心词起修饰或限制作用。 | 工人/n师傅/n (工人/n ← 师傅/n)。 |
数量关系 | QUN(quantity) | 数量关系是指量词或名词同前面的数词之间的关系,该关系中,数词作修饰成分,依存于量词或名词。 | 三/m天/q (三/m ← 天/q)。 |
并列关系 | COO(coordinate) | 并列关系是指两个相同类型的词并列在一起。 | 奔腾/v咆哮/v的怒江激流 (奔腾/v → 咆哮/v)。 |
同位关系 | APP(appositive) | 同位语是指所指相同、句法功能也相同的两个并列的词或词组。 | 我们大家 (我们 → 大家)。 |
附加关系 | ADJ(adjunct) | 附加关系是一些附属词语对名词等成分的一种补充说明,使意思更加完整,有时候去掉也不影响意思。 | 约/d 二十/m 多/m 米/q 远/a 处/n (二十/m → 多/m,米/q → 远/a)。 |
动宾关系 | VOB(verb-object) | 对于动词和宾语之间的关系我们定义了两个层次,一是句子的谓语动词及其宾语之间的关系,我们定为OBJ,在下面的单句依存关系中说明;二是非谓语动词及其宾语的关系,即VOB。这两种关系在结构上没有区别,只是在语法功能上,OBJ中的两个词充当句子的谓语动词和宾语,VOB中的两个词构成动宾短语,作为句子的其他修饰成分。 | 历时/v 三/m 天/q 三/m夜/q (历时/v → 天/q)。 |
介宾关系 | POB(preposition-object) | 介词和宾语之间的关系,介词的属性同动词相似。 | 距/p球门/n (距/p → 球门/n)。 |
主谓关系 | SBV(subject-verb) | 主谓关系是指名词和动作之间的关系。 | 父亲/n 逝世/v 10/m 周年/q 之际/nd (父亲/n ← 逝世/v)。 |
比拟关系 | SIM(similarity) | 比拟关系是汉语中用于表达比喻的一种修辞结构。 | 炮筒/n 似的/u 望远镜/n (炮筒/n ← 似的/u)。 |
时间关系 | TMP(temporal) | 时间关系定义的是时间状语和其所修饰的中心动词之间的关系。 | 十点以前到公司 (以前 ← 到)。 |
处所关系 | LOC(locative) | 处所关系定义的是处所状语和其所修饰的中心动词之间的关系, | 在公园里玩耍 (在 ← 玩耍)。 |
“的”字结构 | DE | “的”字结构是指结构助词“的”和其前面的修饰语以及后面的中心词之间的关系。 | 上海/ns 的/u 工人/n (上海/ns ← 的/u,的/u ← 工人/n)。 |
“地”字结构 | DI | “地”字结构在构成上同DE类似,只是在功能上不同,DI通常作状语修饰动词。 | 方便/a 地/u 告诉/v 计算机/n (方便/a ← 地/u,地/u ← 告诉/v)。 |
“得”字结构 | DEI | 助词“得”同其后的形容词或动词短语等构成“得”字结构,对前面的动词进行补充说明。 | 讲/v 得/u 很/d 对/a (讲/v → 得/u,得/u → 对/a)。 |
“所”字结构 | SUO | “所”字为一结构助词,后接一宾语悬空的动词做“的”字结构的修饰语,“的”字经常被省略,使结构更加简洁。 | 机电/b 产品/n 所/u 占/v 比重/n 稳步/d 上升/v (所/u ← 占/v)。 |
“把”字结构 | BA | 把字句是主谓句的一种,句中谓语一般都是及物动词。 | 我们把豹子打死了 (把/p → 豹子/n)。 |
“被”字结构 | BEI | 被字句是被动句,是主语接受动作的句子。 | 豹子被我们打死了 (豹子/n ← 被/p)。 |
状中结构 | ADV(adverbial) | 状中结构是谓词性的中心词和其前面的修饰语之间的关系,中心词做谓语时,前面的修饰成分即为句子的状语,中心词多为动词、形容词,修饰语多为副词,介词短语等。 | 连夜/d 安排/v 就位/v (连夜/d ← 安排/v)。 |
动补结构 | CMP(complement) | 补语用于对核心动词的补充说明。 | 做完了作业 (做/v → 完)。 |
兼语结构 | DBL(double) | 兼语句一般有两个动词,第二个动词是第一个动作所要表达的目的或产生的结果。 | [7]曾经/d [8]使/v [9]多少/r [10]旅游/n [11]人/n [12]隔/v [13]岸/n [14]惊叹/v [15]!/wp (使 → 人/n ,/v使/v → 惊叹/v)。 |
关联词 | CNJ(conjunction) | 关联词语是复句的有机部分。 | 只要他请客,我就来。 (只要 ← 请 ,就 ← 来)。 |
关联结构 | CS(conjunctive structure) | 当句子中存在关联结构时,关联词所在的两个句子(或者两个部分)之间通过各部分的核心词发生依存关系CS。 | 只要他请客,我就来。 (请 ← 来)。 |
语态结构 | MT(mood-tense) | 汉语中,经常用一些助词表达句子的时态和语气,这些助词分语气助词,如:吧,啊,呢等;还有时态助词,如:着,了,过。 | [12]答应/v [13]孩子/n [14]们/k [15]的/u [16]要求/n [17]吧/u [18],/wp [19]他们/r [20]这/r [21]是/v [22]干/v [23]事业/n [24]啊/u [25]!/wp ([12]答应/v ← [17]吧/u,[21]是/v ← [24]啊/u)。 |
连谓结构 | VV(verb-verb) | 连谓结构是同多项谓词性成分连用、这些成分间没有语音停顿、书面标点,也没有关联词语,没有分句间的逻辑关系,且共用一个主语。 | 美国总统来华访问。 (来华/v → 访问/v)。 |
核心 | HED(head) | 该核心是指整个句子的核心,一般是句子的核心词和虚拟词(或ROOT)的依存关系。 | 这/r 就是/v恩施/ns最/d]便宜/a的/u出租车/n,/wp相当于/v北京/ns的/u “/wp 面的/n ”/wp 。/wp /(就是/v ← /) |
前置宾语 | FOB(fronting object) | 在汉语中,有时将句子的宾语前置,或移置句首,或移置主语和谓语之间,以起强调作用,我认识这个人 ← 这个人我认识。 | 他什么书都读 (书/n ← 读/v)。 |
双宾语 | DOB(double object) | 动词后出现两个宾语的句子叫双宾语句,分别是直接宾语和间接宾语。 | 我送她一束花。(送/v → 她/r,送/v → 花/n)。 |
主题 | TOP(topic) | 在表达中,我们经常会先提出一个主题性的内容,然后对其进行阐述说明;而主题部分与后面的说明部分并没有直接的语法关系,主题部分依存于后面的核心成分,且依存关系为TOP。 | 西直门,怎么走? (西直门 ← 走)。 |
独立结构 | IS(independent structure) | 独立成分在句子中不与其他成分产生结构关系,但意义上又是全句所必需的,具有相对独立性的一种成分。 | 事情明摆着,我们能不管吗? |
独立分句 | IC(independent clause) | 两个单句在结构上彼此独立,都有各自的主语和谓语。 | 我是中国人,我们爱自己的祖国。 (是 → 爱) |
依存分句 | DC(dependent clause) | 两个单句在结构上不是各自独立的,后一个分句的主语在形式上被省略,但不是前一个分句的主语,而是存在于前一个分句的其他成分中,如宾语、主题等成分。规定后一个分句的核心词依存于前一个分句的核心词。该关系同连谓结构的区别是两个谓词是否为同一主语,如为同一主语,则为VV,否则为DC。 | 大家/r叫/v 它/r “/wp 麻木/a 车/n ”/wp ,/wp 听/v起来/v 怪怪的/a 。/wp (叫/v → 听/v)。 |
叠词关系 | VNV (verb-no-verb or verb-one-verb) | 如果叠词被分开了,如“是 不 是”、“看一看”,那么这几个词先合并在一起,然后预存到其他词上,叠词的内部关系定义为:(是1→不;不→是2) 。 | |
一个词 | YGC | 当专名或者联绵词等切散后,他们之间本身没有语法关系,应该合起来才是一个词。 | 百 度。 |
标点 | WP | 大部分标点依存于其前面句子的核心词上,依存关系WP。 |
2.4、py映射(复制用)
abbreviation | full name | Cn |
---|---|---|
deprel | dependency relationship | 依赖关系 |
postag | part-of-speech tagging | 词性标注 |
postag = {
'Ag': '形语素', 'g': '语素', 'ns': '地名', 'u': '助词',
'a': '形容词', 'h': '前接成分', 'nt': '机构团体', 'vg': '动语素',
'ad': '副形词', 'i': '成语', 'nz': '其他专名', 'v': '动词',
'an': '名形词', 'j': '简称略语', 'o': '拟声词', 'vd': '副动词',
'b': '区别词', 'k': '后接成分', 'p': '介词', 'vn': '名动词',
'c': '连词', 'l': '习用语', 'q': '量词', 'w': '标点符号',
'dg': '副语素', 'm': '数词', 'r': '代词', 'x': '非语素字',
'd': '副词', 'Ng': '名语素', 's': '处所词', 'y': '语气词',
'e': '叹词', 'n': '名词', 'tg': '时语素', 'z': '状态词',
'f': '方位词', 'nr': '人名', 't': '时间词', 'un': '未知词'}
deprel = {
'ATT': '定中关系', 'QUN': '数量关系', 'COO': '并列关系', 'APP': '同位关系', 'ADJ': '附加关系',
'VOB': '动宾关系', 'POB': '介宾关系', 'SBV': '主谓关系', 'SIM': '比拟关系', 'TMP': '时间关系', 'LOC': '处所关系',
'DE': '的', 'DI': '地', 'DEI': '得', 'SUO': '所', 'BA': '把', 'BEI': '被',
'ADV': '状中结构', 'CMP': '动补结构', 'DBL': '兼语结构',
'CNJ': '关联词', 'CS': '关联结构', 'MT': '语态结构', 'VV': '连谓结构',
'HED': '核心', 'FOB': '前置宾语', 'DOB': '双宾语',
'TOP': '主题', 'IS': '独立结构', 'IC': '独立分句', 'DC': '依存分句',
'VNV': '叠词关系', 'YGC': '一个词', 'WP': '标点'}
3、pyltp+networkx
"""句法分析"""
from pyltp import Segmentor, Postagger, Parser
# 实例初始化
segmentor = Segmentor()
postagger = Postagger()
parser = Parser()
# 模型路径
PATH = 'ltp_data_v3.4.0/'
CWS_MODEL = PATH + 'cws.model' # 分词
POS_MODEL = PATH + 'pos.model' # 词性标注
PARSER_MODEL = PATH + 'parser.model' # 依存句法分析
# 读取模型
segmentor.load(CWS_MODEL)
postagger.load(POS_MODEL)
parser.load(PARSER_MODEL)
# 分词、标注、句法分析
text = '会议宣布了资深院士名单'
words = list(segmentor.segment(text)) # 分词
postags = list(postagger.postag(words)) # 词性标注
arcs = parser.parse(words, postags) # 句法分析
# 释放模型
segmentor.release()
postagger.release()
parser.release()
"""networkx可视化"""
import networkx as nx, matplotlib.pyplot as mp
# 无多重边有向图
G = nx.DiGraph()
# [2, 0, 2, 5, 6, 2]
ah = [a.head for a in arcs]
# ['ROOT', '会议', '宣布', '了', '资深', '院士', '名单']
tree = ['ROOT'] + words
# 添加节点和边
for w in tree:
G.add_node(w)
for i in range(len(ah)):
j = ah[i]
G.add_edge(words[i], tree[j])
# 可视化
mp.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文
nx.draw(G, with_labels=True, node_color='lightgreen', font_size=20, node_size=2000, width=3, alpha=0.8)
mp.show()