from nltk import load_parser
cp = load_parser('grammars/book_grammars/sql0.fcfg')
query = 'What cities are located in China'
trees = list(cp.parse(query.split()))
answer = trees[0].label()['SEM']
answer = [s for s in answer if s]
q = ' '.join(answer)
print(q)

from nltk.sem import chat80
rows = chat80.sql_query('corpora/city_database/city.db', q)
for r in rows:
    print(r[0], " ")

##命题逻辑
nltk.boolean_ops()

read_expr = nltk.sem.Expression.fromstring
read_expr('-(P & Q)')

read_expr('P & Q')

read_expr('P | (R -> Q)')

read_expr('P <-> -- P')

lp = nltk.sem.Expression.fromstring
SnF = read_expr('SnF')
NotFnS = read_expr('-FnS')
R = read_expr('SnF -> -FnS')
prover = nltk.Prover9()
"""语义分析"""
import nltk
from nltk import word_tokenize, pos_tag
from nltk.corpus import conll2002, brown
from nltk.corpus import wordnet as wn

out = nltk.boolean_ops()
input_expr = nltk.sem.Expression.fromstring
out = input_expr('X|(Y->Z)')
out = input_expr('-(X & Y)')
out = input_expr('X & Y')
out = input_expr('X <-> -- X')
out = nltk.Valuation([('X', True), ('Y', False), ('Z', True)])
print(out['Z'])
print(out)
expression = input_expr('run(marcus)', type_check=True)
print(expression.argument)
print(expression.argument.type)
print(expression.function)
print(expression.function.type)
sign = {'run': '<e, t>'}
expression = input_expr('run(marcus)', signature=sign)
print(expression.function.type)
nltk.data.show_cfg('grammars/book_grammars/sql1.fcfg')
"""命名实体识别(英语:Named Entity Recognition,简称NER)
指识别文本中具有特定意义的实体
参考wiki 
https://baike.baidu.com/item/命名
https://zh.wikipedia.org/zh-cn/实体
https://baike.baidu.com/item/%E5%91%BD%E5%90%8D%E5%AE%9E%E4%BD%93
命名:指给予名称;定名。
import nltk
nltk.boolean_ops()
Example #4
0
print(query_sql)

# 1.2 自然语言、语义和逻辑
# 语义的基本概念:
# 1)在确定的情况下,陈述句非真即假
# 2)名词短语和专有名词的定义指的世界上的东西
# 语句集W的模型是某种规范化表示,其中W中的所有句子都为真。表示模型的方式通常基于集合论。
# 模型用于评估英语句子的真假,并用这种方式来说明表示意思的一些方法

# 2. 命题逻辑
# 设计一种逻辑语言的目的是使推理更加明确规范。
# 命题逻辑只表示对应的特定语句连接词的语言结构部分。
# 命题逻辑形式中,连接词的对应形式叫做布尔运算符。
# 命题逻辑的基本表达式是命题符号。通常写作P、Q、R等
# 有了命题符号和布尔运算符,可以建立命题逻辑的规范公式的无限集合(简称公式)
print(nltk.boolean_ops())

# LogicParser()将逻辑表达式分析成表达式的各种子类
read_expr = nltk.sem.Expression.fromstring
print(read_expr('-(P&Q)'))
print(read_expr('P&Q'))
print(read_expr('P|(R->Q)'))
print(read_expr('P<->--P'))

# 从计算的角度看,逻辑是进行推理的重要工具。从假设一步步捡到结论,被称为推理。
# 有效的论证:所有的前提为真时,结论都为真的论证
read_expr = nltk.sem.Expression.fromstring
SnF = read_expr('SnF')
NotFns = read_expr('-FnS')
R = read_expr('SnF-> -FnS')
prover = nltk.Prover9()