Python自然语言处理 10 分析语句的含义

既然已经有了分析机制和基于特征的文法,那么能否做一些类似分析语句的含义的事情?

回答下列问题:

(1)如何表示自然语言的含义,并能通过计算机进行处理?

(2)怎样才能将意思表示与无限制的语句集相关联?

(3)怎样才能通过连接意思表示与句子的程序来存储信息?

本章介绍一些逻辑语义方面的规范化技术,看看如何使用它们来查询存储有客观整理的数据库

一 自然语言理解

#查询数据库

目前为止在本书中学到的技术,解决特定领域的任务的QA系统是相当简单的,但如果要以一种更通用的方式解决这个问题,就必须开辟一个全新的涉及意思表示的理念和技术框架。

因此,首先假设有关于城市和国家的结构化数据


import nltk
nltk.data.show_cfg('grammars/book_grammars/sql0.fcfg')
% start S
S[SEM=(?np + WHERE + ?vp)] -> NP[SEM=?np] VP[SEM=?vp]
VP[SEM=(?v + ?pp)] -> IV[SEM=?v] PP[SEM=?pp]
VP[SEM=(?v + ?ap)] -> IV[SEM=?v] AP[SEM=?ap]
NP[SEM=(?det + ?n)] -> Det[SEM=?det] N[SEM=?n]
PP[SEM=(?p + ?np)] -> P[SEM=?p] NP[SEM=?np]
AP[SEM=?pp] -> A[SEM=?a] PP[SEM=?pp]
NP[SEM='Country="greece"'] -> 'Greece'
NP[SEM='Country="china"'] -> 'China'
Det[SEM='SELECT'] -> 'Which' | 'What'
N[SEM='City FROM city_table'] -> 'cities'
IV[SEM=''] -> 'are'
A[SEM=''] -> 'located'
P[SEM=''] -> 'in'
SQL查询

from nltk import load_parser
cp = load_parser('grammars/book_grammars/sql0.fcfg')
query = 'What cities are located in China'
trees = next(cp.parse(query.split()))
answer = trees[0].label()['SEM']
answer2 = trees[1].label()['SEM']
q = ' '
q = ' '.join(answer) + " WHERE" 
q = q + ' '.join(answer2)
print q
SELECT City FROM city_table WHERE  Country="china"
from nltk.sem import chat80
rows = chat80.sql_query('corpora/city_database/city.db', q)
for r in rows: print r[0],
canton chungking dairen harbin kowloon mukden peking shanghai sian tientsin
可以说,NLTK代码已经“理解”了SQL

#自然语言、语义和逻辑

上面文本翻译成SQL来查询,仍然在回避问题的实质:翻译是否正确。

引进语义中的两个基本概念。第一个是在确定的情况下,陈述句非真即假。第二个是名词短语和专有名词的定义指的是世界上的东西。

一旦采取了在特定情况下事情真假的概念,我们就有了进行推理的强大工具。特别是,我们可以推理语句集在某些情况下是否能同时为真。

从广义上讲,基于逻辑方法的自然语言语义关注于那些指导我们判断自然语言的一致性不一致性的方面。设计一种逻辑语言的句法是为了使这些特征更标准更明确。

开发一种表示某种可能情况的技术,逻辑学家称之为“模型”

二 命题逻辑

设计一种逻辑语言的目的是使推理更明确规范

命题逻辑只表示对应特定语句连接词的语言结构部分


三 一阶逻辑

通过翻译自然语言表达式为一阶逻辑表示它们的意思。

并不是所有的自然语言语义都可以用一阶逻辑表示。但它是计算语义的一个不错的选择,因为它具有足够的表现力来表达语义的很多方面,并且另一方面,有出色现成的系统可用于开展一阶逻辑自动推理。

#语法

一阶逻辑的标准构造规则识别以下术语:

#一阶定理证明

是否可以有一个有限序列的推理步骤从一个假设的公式列表派生出来

#一阶逻辑语言总结


#真值模型


#独立变量和赋值


#量化

现代逻辑的关键特征之一就是变量满足的概念可以用来解释量化的公式。

#量词范围歧义


#模型的建立

假设已经有了一个模型,并要检查模型中的每个句子的真值

四 英语语句的语义

#基于特征文法的成分语义学

组合原则:整体的含义是部分的含义与它们的句法结合方式的函数

#运算


#量化的NP


#及物动词


#重述量词歧义



五 段落语义层


段落是语句的序列。很多时候,段落中句子的解释依赖它前面的句子。

#段落表示理论

段落表示理论的目标是提供处理这个和其他段落特征的语义现象的方法。段落表示结构根据一个段落指称的列表和一个条件列表表示段落的意思。段落指称是段落中正在讨论的事情,它对应一阶逻辑的单个变量。
#段落处理
解释一句话时会利用丰富的上下文背景知识,一部分取决于前面的内容,一部分取决于背景假设。

六 深入阅读

现代逻辑的书



















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python自然语言处理(NLP)是使用Python编程语言进行自然语言处理任务的领域。NLP涉及将人类语言转化为计算机可以理解和处理的形式,以及从文本数据中提取有用的信息。 对于Python中的NLP,有一些重要的库和工具可以使用。其中一些包括: 1. scikit-learn:这是Python中的机器学习库,提供了许多用于文本分类、情感分析和文本生成等NLP任务的功能。 2. Natural Language Toolkit(NLTK):这是一个丰富的Python库,提供了各种NLP技术的实现,包括语料库、词性标注、句法分析等。 3. Pattern:这是一个用于NLP和机器学习的Web挖掘模块,提供了一些实用的功能,如情感分析、实体提取和关键词提取等。 4. TextBlob:这是一个简单易用的NLP工具库,构建在NLTK和Pattern之上,提供了一些文本处理和分析的功能。 5. spaCy:这是一个用于工业级NLP的强大Python库,使用Cython进行加速,提供了高性能的文本处理功能,包括词性标注、命名实体识别和句法分析等。 6. Gensim:这是一个用于主题建模的Python库,可以用于从大规模文本数据中提取主题和语义信息。 此外,Stanford Core NLP是由Stanford NLP组提供的一个NLP服务包,它提供了一系列NLP工具和模型,如实体识别、依赖关系分析和情感分析等。 在使用Python进行NLP时,还可以使用N元语法(N-Grams)作为特征。N元语法将N个单词结合在一起,可以用于文本生成和特征提取。例如,使用二元语法(bigrams)可以生成文本的二元语法序列。 Python中的NLP还涉及到实体识别、情感分析、文本分类和语法分析等任务。可以使用Stanford Core NLP和NLTK的依赖性文法来生成依赖关系树,这些输出可以用于很多NLP问题,例如实体情感分析、角色和实体识别以及文本分类。 总之,Python自然语言处理领域提供了丰富的库和工具,可以用于处理文本数据、提取有用信息和解决各种NLP任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值