FrameNet & FrameNet Python API (整理总结)

本文详述了FrameNet项目,基于框架语义学的英语词汇数据库,重点介绍了其Python API的使用,包括框架(Frames)、词汇单位(Lexical Units)的查询方法,以及NLTK下载和使用FrameNet数据的步骤。
摘要由CSDN通过智能技术生成

FrameNet & FrameNet Python API (整理总结)

FrameNet介绍

FrameNet

  FrameNet语料库是一个人读和机读的英语词汇数据库,它基于对实际文本中单词用法的注释示例。FrameNet基于一种叫做框架语义学的意义理论,该理论来源于Charles J. Fillmore及其同事的工作。其基本思想很简单:大多数单词的含义都可以通过语义框架(对事件、关系或实体及其参与者的描述)得到最佳理解。例如,烹饪的概念通常涉及到一个人做饭(Cook),即将被烹饪的食物(food),做饭时用来盛食物的东西(容器)和热源(加热设备)。在FrameNet项目中,这被表示为一个名为Apply heat的框架,而Cook、Food、Heating instrument和Container被称为frame elements (FEs)。链接这种框架的单词,如fry、bake、boil和broil,称为Apply_heat框架的词汇单元(LUs)。FrameNet的工作是定义框架,并对句子进行注释,以显示FEs如何与链接框架的单词在语法上匹配。

  在框架中的框架元素正式列出了他们在框架中功能的英文描述。框架是在一个网络中组织的,包括一个继承层次结构和其他类型的框架关系。在一个框架中列出的词汇条目被称为词汇单元(逻辑单元,lexicalunits ,LUs)。FrameNet的逻辑单元的详细目录包括内容和功能词。在形式上,一个逻辑单元LU连接一个框架的词元(词元的名字包含了一个语音标签。词元可能由一个单词如词组成如surrender.v,或多个单词,例如give up.v组成)。

Frames

  框架是类似脚本的概念结构,描述特定类型的场景、对象或事件,以及该框架所需的参与者和道具。例如,“Apply heat”框架描述了涉及厨师、一些食物和加热设备的常见情况,并由单词bake、blanch、boil、roast、brown、simmer、steam等引起。

  我们将框架的角色称为“框架元素”(FEs),而引发框架的单词称为“词汇单元”(LUs)。

  FrameNet包括了框架之间的关系。FrameNet定义了几种类型的关系,其中最重要的是:

  • Inheritance : 一种IS-A关系。子框架是父框架的子类型,而且父框架中FE与子框架中的FE相对应。例如:“Revenge”框架继承自“Rewards_and_punishments”框架。
  • Using: 子框架以父框架为背景,例如,“Speed”速度框架“uses”“Motion”运动框架;但是,并不是所有的父框架的FEs都绑定到子框架的FEs。
  • Subframe: 子框架是父框架描述的一复杂事件的子事件。例如:“Criminal_process”刑事程序有很多子框架如 "Arrest"逮捕, "Arraignment"传讯, "Trial"审判,和"Sentencing"量刑。
  • Perspective_on:子框架提供了一种方向角度来了解未能了解的父框架(子框架提供了未透视的父框架上的特定透视图)。例如在“Hiring”雇佣和“Get_a_job”工作框架中,分别从雇主和雇员的角度了解父框架“Employment_start”。

Lexical Units

  词汇单位(LU)是一个单词与单词意思的配对。例如,“Apply heat”框架描述了涉及厨师、一些食物和加热设备的常见情况,并由单词bake、blanch、boil、roast、brown、simmer、steam等引起。这些让人联想起框架的词是“Apply heat”框架中的逻辑单元。一个多义词的每一个词义都是不同的LU。

  我们用“word”这个词来谈论LUs。实际上关系很复杂。当我们说“bake”是一个多义词时,意思是词条“bake.v”(bake词有很多词形如:“bake”, “bakes”, “baked”, and “baking”)链接到三种不同的框架:

  • Apply_heat: “Michelle baked the potatoes for 45 minutes.”
  • Cooking_creation: “Michelle baked her mother a cake for her birthday.”
  • Absorb_heat: “The potatoes have to bake for more than 30 minutes.”

  它们构成了三个不同的逻辑单元,具有不同的定义。

  多字短语,如“given name”和像“shut-eye”这样带连字符的词,也可以是LUs。在适当的框架中,像“middel of mowhere”和“give the slip(to)”的熟语也定义为LUs,它们分别在“Isolated_places”和“evading”中,而且他们的内部结构是不可分析的。

  Framenet提供了一个单词的每个意义的多个注释示例.此外,这组示例(大约每个LU20个)说明了词汇单元的所有组合可能性。

  在最简单的情况下,让人联想起框架的单词是动词,例如“fried”在“Matilde fried the catfish In a heavy iron skillet.”句中。

  有时,事件名词可以联想起一个框架。例如,“reduction”联想起“Cause_change_of_scalar_position”,在“…the reduction of debt levels to $665 million from $2.6 billion.”句中。

  形容词也可以联想起一个框架。例如,“asleep”可以唤起“Sleep”框架,例如:“They were asleep for hours.”

  许多常见的名词,如像“帽子”或“塔”这样的人工制品,通常是作为从属关系而不是清晰地联想起它们自己的框架。

NLTK 下载 FrameNet

自动下载使用

该方法需要网速,有时即使有网速也不一定顺利下载完,需要多尝试几次。

import nltk nltk.download('framenet_v17')

手动下载器下载

还可以直接运行一下命令:

import nltk nltk.download()

不填加数据集,在nltk的下载器中选择要下载的数据集,手动点击下载

离线下载使用

NLTK Corpus网站下载所需的数据集,下载后放到nltk_data文件夹下解压即可。

FrameNet Python API

Frames

frames()

要获得FrameNet中所有frame的列表,可以使用**frames()**函数。如果向frames()函数提供一个正则表达式模式,将得到一个包含所有名称与该模式匹配的框架的列表。

"""导入Framenet库"""
from pprint import pprint
from nltk.corpus import framenet as fn
"""列出framenet中所有的框架"""
len(fn.frames())
1221
PFN (Predicate-argument structure FrameNet) 是一种基于语义角色标注的句子结构分析框架。它通过对文本中的语义角色进行标注,进而抽取出句子中的谓词-论元结构,即谓语和对应的主语、宾语等语义角色。以下是一个简单的 pfn 关系抽取代码解读: ```python import nltk from nltk.corpus import framenet as fn def extract_pfn(sentence): # 分词和词性标注 tokens = nltk.word_tokenize(sentence) pos_tags = nltk.pos_tag(tokens) # 提取谓词 predicates = [] for token, pos in pos_tags: if pos.startswith('VB'): predicates.append(token) # 提取主语和宾语 roles = {} for predicate in predicates: for frame in fn.frames_by_lemma(predicate): for fe in frame.FE: if fe.coreType == 'Core': role_name = fe.name for pattern in fe.patterns: if pattern.name == 'NP': for word, pos in pos_tags: if pos.startswith('NN') and word in pattern.roles: if role_name not in roles: roles[role_name] = [] roles[role_name].append(word) return roles ``` 上述代码接受一个输入句子,并返回一个字典,其中键为语义角色的名称,值为该角色对应的词语列表。代码的实现过程包括以下几个步骤: 1. 对输入句子进行分词和词性标注。 2. 提取句子中的谓词,即词性以 VB 开头的单词。这里假设每个谓词只对应一个谓词-论元结构。 3. 对于每个谓词,通过 FrameNet 的词典查询其对应的框架,并遍历该框架中的语义角色和模式。 4. 对于每个核心类型的语义角色和模式为 NP 的词语,将其加入对应角色的词语列表中。 需要注意的是,这只是一个简单的 pfn 关系抽取代码示例,实际应用中可能需要更加复杂的处理和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值