从 CYK 算法(自然语言处理)生成解析树的步骤

2023-12-29

我目前正在做一个涉及NLP的项目。我已经实现了 Jurafsky 和 ​​Martin(第 450 页的算法)中给出的 CKY 标识符。如此生成的表实际上将非终结符存储在表中(而不是通常的布尔值)。然而,我遇到的唯一问题是检索解析树。

下面是我的 CKY 标识符的作用的说明:

这是我的语法

          S -> NP VP 
          S -> VP 
          NP -> MODAL PRON | DET NP | NOUN VF | NOUN | DET NOUN | DET FILENAME
          MODAL -> 'MD'
          PRON -> 'PPSS' | 'PPO'
          VP -> VERB NP
          VP -> VERB VP
          VP -> ADVERB VP
          VP -> VF
          VERB -> 'VB' | 'VBN'
          NOUN -> 'NN' | 'NP'
          VF -> VERB FILENAME
          FILENAME -> 'NN' | 'NP'
          ADVERB -> 'RB'
          DET -> 'AT'

这是算法:

for j  from i to LENGTH(words) do
    table[j-1,j] = A where A -> POS(word[j])
    for i from j-2 downto 0
        for k from i+1 to j-1
            table[i,j] = Union(table[i,j], A such that A->BC)
            where B is in table[i,k] and C is in table[k,j]

这就是我的解析表填充后的样子:

现在我知道,由于 S 驻留在 [0,5] 中,因此该字符串已被解析,并且对于 k = 1 (根据 Martin 和 Jurafsky 中给出的算法),我们有 S -> table[0][2 ] 表[2][5] 即 S -> NP VP

我遇到的唯一问题是我已经能够检索所使用的规则,但它们的格式是混乱的,即不是基于它们在解析树中的出现。有人可以建议一种算法来检索正确的解析树吗?

谢谢。


您应该递归地访问表的单元格,并以与 S 节点相同的方式展开它们,直到所有内容都是终端(这样您就没有其他任何内容可以展开)。在您的示例中,您首先转到单元格 [0][2];这是一个终端,您无需执行任何操作。接下来转到[2][5],这是由[2][3]和[3][5]组成的非终结符。你访问[2][3],它是一个终端。 [3][5]是一个非终结符,由两个终结符组成。你完成了。这是一个 Python 演示:

class Node:
    '''Think this as a cell in your table'''
    def __init__(self, left, right, type, word):
        self.left = left
        self.right = right
        self.type = type
        self.word = word

# Declare terminals
t1 = Node(None,None,'MOD','can')
t2 = Node(None,None,'PRON','you')
t3 = Node(None,None,'VERB', 'eat')
t4 = Node(None,None,'DET', 'a')
t5 = Node(None,None,'NOUN','flower')

# Declare non-terminals
nt1 = Node(t1,t2, 'NP', None)
nt2 = Node(t4,t5, 'NP', None)
nt3 = Node(t3,nt2,'VP', None)
nt4 = Node(nt1,nt3,'S', None)

def unfold(node):
    # Check for a terminal
    if node.left == None and node.right == None:
        return node.word+"_"+node.type

    return "["+unfold(node.left)+" "+unfold(node.right)+"]_"+node.type

print unfold(nt4)

和输出:

[[can_MOD you_PRON]_NP [eat_VERB [a_DET flower_NOUN]_NP]_VP]_S
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 CYK 算法(自然语言处理)生成解析树的步骤 的相关文章

  • 列出所有 k 元组,其条目总和为 n,忽略旋转

    有没有一种有效的算法来查找所有序列k总和为的非负整数n 同时避免旋转 如果可能的话 完全避免 顺序很重要 但对于我正在解决的问题来说 轮换是多余的 例如 与k 3 和n 3 我想要得到一个如下所示的列表 3 0 0 2 1 0 2 0 1
  • 用于词性标记的优秀 Java 库是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C 的二进制流解析库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您能推荐一个经过验证的 C 二进制流解析库吗 如果它能像 C 语言所允许的那样具有声明性 那就太好了
  • pytesseract 无法从图像中识别复杂的数学公式

    我在用pytesseractpython 中的模块 pytesseract从图像中识别文本 但它不适用于包含复杂数学公式 例如根 推导 积分数学问题或方程 的图像 代码2 py Import modules from PIL import
  • 在矩阵/位图中查找质量簇

    这是此处发布的问题的延续 在 2D 位图上查找质心 https stackoverflow com questions 408358 finding the center of mass on a 2d bitmap正如给出的例子 它讨论了
  • 给定文档,选择相关片段

    当我在这里提出问题时 自动搜索返回的问题的工具提示给出了问题的前一点 但其中相当一部分没有给出任何比理解问题更有用的文本 标题 有谁知道如何制作一个过滤器来删除问题中无用的部分 我的第一个想法是修剪仅包含某个列表中的单词的任何前导句子 例如
  • 如何在 Unity 中对齐“轨道”或模块化对象?

    我正在开发一个简单的游戏 用户可以在其中放置不同但模块化的对象 例如 轨道 道路等 我的问题是 当将一个物体靠近另一个物体时 如何匹配和放置不同的物体 我的第一种方法是为每个模块对象创建一个隐藏的子对象 一个盒子 并将其放在可以放置其他对象
  • 使用 SciKit-learn 和大型数据集进行文本分类

    首先 我昨天开始学习Python 我正在尝试使用 SciKit 和大型数据集 250 000 条推文 进行文本分类 对于该算法 每条推文都将表示为 4000 x 1 向量 因此这意味着输入为 250 000 行和 4000 列 当我尝试在
  • 用 C/C++ 编写的通用代码补全框架

    有没有用 C C C 11 编写的框架用于编写代码补全工具 或者也许有一些库允许 Java 或 C 的代码完成 也是用 C 编写的 我正在用 C 编写我的自定义 IDE 用于 Java 而不仅仅是 Java 开发 我想以最好的方式为其添加代
  • 优化两个三位数乘积的最大回文数?

    我正在研究一个面试问题 我被问到这个问题 我应该编写一个程序 从两个三位数的乘积中找到最大的回文数 这里是question https projecteuler net problem 4 我想出了这种从底部开始的蛮力方法 public c
  • Lucene 标准分析器与 Snowball

    刚刚开始使用 Lucene Net 我使用标准分析器索引了 100 000 行 运行了一些测试查询 并注意到如果原始术语是单数 则复数查询不会返回结果 我知道雪球分析器增加了词干支持 这听起来不错 不过 我想知道 超过标准的雪球锣是否有任何
  • 通过排列四个给定数字找到最大可能时间 HH:MM

    我最近为了工作晋升而参加了编码测试 这是我真正遇到的任务之一 我想知道什么是最好的方法来做到这一点 我使用了大量的 if 和 if else 这不是最干净的解决方案 但完成了工作 我被问到的问题是 将 4 个数字格式化为 24 小时时间 0
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • 测量数组的“无序”程度

    给定一个值数组 我想找到总 分数 其中每个元素的分数是数组中出现在其之前的具有较小值的元素的数量 e g values 4 1 3 2 5 scores 0 0 1 1 4 total score 6 O n 2 算法很简单 但我怀疑可以通
  • Python将文本文件解析为嵌套字典

    考虑以下数据结构 HEADER1 key value key value HEADER2 key value key value HEADER3 key value HEADER4 key value key value 原始数据中没有缩进
  • 寻找簇的中心

    我有以下问题 进行抽象以找出关键问题 我有 10 个点 每个点与其他点有一定距离 我想要 能够找到簇的中心 即与其他点的成对距离最小的点 令 p j p k 表示点 j 和 k 之间的成对距离p i 是簇的中心点 iff p i s t m
  • MongoDB 中有内置的 JSON.parse 吗?

    是否有任何 Mongo 命令行 函 数可以将字符串转换为对象 例如JSON parse 或类似的东西 db sessions update set extra JSON parse stringData 我的解决方案 function my
  • 分组符号最大长度平衡子序列

    将 B 视为分组符号 和 的序列 如果 B 的长度为 0 或 B 具有以下形式之一 则称 B 为平衡序列 X Y 或 X Y 或 X Y 其中 X 和 Y 本身是平衡的 平衡示例 现在的问题是找到一种有效的算法来找到给定输入的最大长度平衡子
  • Diamond-Square 算法的平滑问题

    我正在使用菱形方形算法来生成随机地形 它工作得很好 除了我让这些大圆锥形状要么伸出或伸入地形 问题似乎在于 时不时会有一个点被设置得太高或太低 Here is a picture of the problem And it can be b
  • 求一根棒可以切割的最大片数

    这是完整的问题陈述 给定一根长度为n的绳子 你需要找到最大的绳子数你可以让每一段的长度都在集合 a b c 中给定三个值a b c 我知道可以通过动态规划来实现最优解 但是 我还没有学过这个主题 我需要递归地解决这个问题 对于递归 主要的事

随机推荐

  • 使用 ruby​​ rough gem 访问 git 日志数据?

    对于 git 存储库中的给定文件 我想查找修改该文件的最后一次提交的 SHA 以及时间戳 在命令行中 该数据对于特定文件路径的 git log 是可见的 例如 git log n 1 path to file 使用 ruby 的 git g
  • 使用 URL 打开 JQuery 选项卡,并在选项卡单击时向 URL 添加哈希值

    我正在开发一个 Web 应用程序 并且使用 JQuery UI Tabs 插件来分离数据 如果我将鼠标悬停在每个选项卡上 我可以在屏幕左下角看到该选项卡的 URL 例如 testPage com tab1 或 testPage com ta
  • WooCommerce 3.0+ 更改管理订单日期列格式

    在 WooCommerce 中 我使用下面的代码来更改订单日期列的管理订单视图格式 Woocommerce show time on order add filter post date column time custom post da
  • ++Var 和 Var++ 之间的区别[重复]

    这个问题在这里已经有答案了 在编程中 特别是在 Java 中 以下之间有什么区别 int var 0 var and int var 0 var 这会对 for 循环产生什么影响 e g for int i 0 i lt 10 i for
  • 输入字段添加点击时焦点可见

    仅当用户通过键盘导航到元素时 我才尝试有选择地在输入字段上应用大纲 根据我的理解 执行此操作的方法是删除焦点上的轮廓 但应用焦点可见 如下所示 input focus outline 2px solid transparent input
  • 使用 grep 搜索文件中的十六进制字符串

    有谁知道如何使用 grep 或类似工具来检索文件中十六进制字符串的偏移量 我有一堆十六进制转储 来自 GDB 我需要检查字符串 然后再次运行并检查值是否已更改 我努力了hexdump and dd 但问题是因为它是一个流 我丢失了文件的偏移
  • SQL - 在 A-F 之间查找名称的条件

    简单的问题 我需要一个解决方案 以便我可以找到 A F 之间的名称 包括所有以 F 开头的名称 如果您使用 BETWEEN 或 A gt value 笔记 用户将看到 2 个文本框 其中接受用户可以输入的范围 用户细化在 F 边界中走多远
  • 三星互联网强制深色模式

    我的网站是在浅色模式下设计的 不应该对任何形式的深色模式做出反应 这适用于除 Samsung Internet 之外的所有网站 每当我在三星互联网上打开网站时 它都会自动将白色背景替换为深色背景 并将字母颜色更改为白色 有谁知道如何解决这一
  • 在 neo4j 中我可以获得更简洁的 REST api 响应

    有没有一种方法可以在 neo4j 中获得更简洁的 Rest api 响应 也许只有节点数据 在每个请求上发送所有额外的数据似乎有点浪费带宽 为什么所有元数据都包含在响应中 例如 基本 api url 在整个过程中都是重复的 一旦您 有了节点
  • 使用 Dapper 进行批量插入花费的时间比预期的要长

    看完之后本文 https www gamasutra com view news 170502 Indepth SQL Server High performance inserts php我决定仔细研究一下我使用 Dapper 的方式 我
  • MapKit 注释和用户位置

    我按照本教程制作了我的第一个应用程序 http icodeblog com 2009 12 21 introduction to mapkit in iphone os 3 0 http icodeblog com 2009 12 21 i
  • .NET - 如何创建一个类,使得只有一个其他特定类可以实例化它?

    我想要进行以下设置 class Descriptor public string Name get private set public IList
  • AES 加密 PHP 到 NodeJS?

    我正在将一个小项目从 PHP 迁移到 NodeJS 其中包含一小部分 AES 加密 由于 PHP 代码运行良好 因此如下 function decysek data app key output openssl decrypt base64
  • 在 ASP.net MVC 中良好且完整地实现 RSS 提要

    我在 ASP NET MVC 中见过一些 RSS Feed 的示例 例如this https stackoverflow com questions 11915 rss feeds in aspnet mvc 以及项目中的一些示例 例如 O
  • 为什么 C、C++ 和 LISP 在嵌入式设备和机器人中如此流行?

    嵌入式设备和机器人最需要的软件语言技能似乎是 C C 和 LISP 为什么最近的语言没有进入这些应用程序 例如 Erlang http www erlang org 似乎特别适合机器人应用程序 因为它使并发编程变得更容易并且允许代码热交换
  • SQLite 支持公共表表达式吗?

    SQLite 支持公共表表达式吗 我想运行这样的查询 with temp ID Path as select ID Path from Messages select from temp 从 Sqlite 版本 3 8 3 开始 SQLit
  • 使用maven时spring配置文件放在哪里

    我正在尝试解决我的配置文件问题 我有具有此结构的 Spring MVC 应用程序 我当前的结构 src main java java classes src main resources some properties files src
  • Capistrano 3:仅在分配了角色的服务器池中的单个服务器上运行任务

    我有 20 台充当 Web 角色的服务器 我有一项任务只需要对其中一个执行 因为更改会影响共享存储 我当前的解决方案是解决这个问题的黑客 如下 寻找更好的方法 我没有大量的 ruby 或 cap 经验 task checkout proje
  • 什么是本机对象?

    什么是本机对象意味着我发现java具有与本机对象接口的对等类 Java程序可以使用JNI http java sun com developer onlineTraining Programming JDCBook jni html访问以本
  • 从 CYK 算法(自然语言处理)生成解析树的步骤

    我目前正在做一个涉及NLP的项目 我已经实现了 Jurafsky 和 Martin 第 450 页的算法 中给出的 CKY 标识符 如此生成的表实际上将非终结符存储在表中 而不是通常的布尔值 然而 我遇到的唯一问题是检索解析树 下面是我的