我想根据从斯坦福解析器检索的语法生成句子,但 NLTK 无法解释 PRP$。
from nltk.parse.stanford import StanfordParser
from nltk.grammar import CFG
from nltk.parse.generate import generate
sp=StanfordParser(model_path='/home/aman/stanford_resource/stanford-parser-full-2014-06-16/stanford-parser-3.4-models/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz',path_to_jar='/home/aman/stanford_resource/stanford-parser-full-2014-06-16/stanford-parser.jar',path_to_models_jar='/home/aman/stanford_resource/stanford-postagger-full-2014-08-27/stanford-postagger-3.4.1.jar')
sent1='He killed the tiger in his pants'
parse_result=sp.raw_parse(sent1)
grammar_list=[]
for p in parse_result:
l=p.productions()
grammar_string='\n'.join(map(str,l))
grammar=CFG.fromstring(grammar_string)
#grammar_list.append(grammar)
#for s in generate(grammar,n=3):
# print s
ValueError: Unable to parse line 11: NP -> PRP$ NNS
Expected a nonterminal, found: $ NNS
Run Code Online (Sandbox Code Playgroud)
它怎么能工作。我是否应该专门针对这些语法类别指导 nltk。
我在Tanimoto的使用Common Lisp的人工智能元素中找到了这个:
; sample formula:
;
; d 2
; -- x + 2x
; dx
; represented by f0 as follows:
(setf f0 '(d (+ (exp x 2) (* 2 x)) x))
Run Code Online (Sandbox Code Playgroud)
这难道不该是expt不是exp?这个程序,LEIBNIZ.lispexp在我认为它应该是的许多地方使用expt.我错过了什么?这只是历史问题吗?或者这是一个错误?
我有一个简单的问题。当我在DBpedia SPARQL端点上运行此查询时,我得到5个电影URI的列表:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select ?film {
?film rdf:type <http://schema.org/Movie>.
}
limit 5
Run Code Online (Sandbox Code Playgroud)
我正在尝试访问列表中每部电影的所有谓词和对象。我试过了,但是没有用。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select ?film ?p ?o {
?film rdf:type <http://schema.org/Movie>;
?p ?o.
}
group by ?film
limit 5
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
如何在Lisp中将数字从某个基数转换为基数10?是否有任何defaut功能可以做到这一点,如果不是我怎么能补充该功能?
如何在Java中使用owlapi找到所有已定义的类?我知道不推荐使用的getClassesInSignature方法,但是文档(JavaDocs)缺少方面,应该使用什么代替?
我一直在尝试用Java模拟Python列表; 即,维护一个动态数组,可以同时存储不同类型的对象.Java中是否有任何方法可以使用通用对象引用,即可以指向任何类型的对象,用户定义或内置的对象引用?
我安装了emacs + sbcl + slime.我定义了这个功能
(defun jugar ()
(let* ((nodoActual *nodo-inicial*)
(estadoActual (nodo-estado nodoActual))
(timeStart nil)
(timeEnd nil)
)
(loop while (not (es-estado-final estadoActual)) do
(setf *hojas* 0)
(setf timeStart (get-universal-time))
(setf nodoActual (decision-minimax nodoActual *profundidad* timeStart))
(setf timeEnd (get-universal-time))
(setf estadoActual (nodo-estado nodoActual))
(imprime-en-fichero estadoActual)
(format t "Hojas analizadas: ~a ~%" *hojas*)
(format t "Tiempo empleado: ~a ~%~%" time))
))
Run Code Online (Sandbox Code Playgroud)
进行一系列调用并在循环中打印一些变量.
问题是当我(jugar)从*slime-repl sbcl*缓冲区调用时,提示等待直到(jugar)执行结束以显示所有(format …)在一起.我从一个终端(运行sbcl)尝试了同样的方法并且运行良好,所以我猜这是与emacs或slime相关的东西.我该如何解决?
我正在编写一个函数,try-weak-cues用于从大量响应中选择响应.该程序本质上是与用户的对话.
(define try-weak-cues
(lambda (sentence context)
(define helper
(lambda(list-of-pairs)
(define helper2
(lambda(list-of-pairs context)
(cond((null? list-of-pairs)
(cond((null? list-of-pairs) '())
((any-good-fragments?(cue-part(car list-of-pairs))sentence) (helper2(cdr(car list-of-pairs))context))
(else(helper(cdr list-of-pairs)))))))))
(helper *weak-cues*))))
Run Code Online (Sandbox Code Playgroud)
下面是该函数应该从中获取的响应列表:
(define *weak-cues*
'( ( ((who) (whos) (who is))
((first-base)
((thats right) (exactly) (you got it)
(right on) (now youve got it)))
((second-base third-base)
((no whos on first) (whos on first) (first base))) )
( ((what) (whats) (what is))
((first-base third-base)
((hes on second) (i told you whats on second)))
((second-base)
((right) …Run Code Online (Sandbox Code Playgroud) 我试图找出如何从另一个列表中获取最后一个(非空)列表,或者nil如果没有这样的列表(递归)则返回.这是一个家庭作业,因此我正在寻找方法的帮助,不一定是它的代码.例:
(lastele '(1 (2 3) 4 5)) ;=> (2 3)
(lastele '(1 (2 3) (4 5)) ;=> (4 5)
(lastele '(1 2 3 4 5)) ;=> NIL
Run Code Online (Sandbox Code Playgroud)
我试图浏览列表,如果我遇到一个子列表,我会检查列表的其余部分是否包含更多的非空子列表,如果是,则继续将列表设置为该列表,并重复直到我们有一个空列表.
(defun lastele2 (L)
(if (null L)
'()
(if (hasMoreLists (rest L))
(lastele2 (rest L))
(first L))))
Run Code Online (Sandbox Code Playgroud)
但是,似乎我无法hasMoreLists上班.返回t或f内部只是错误.这是解决这个问题的最好方法吗?
以下函数是尾递归的吗?如果没有,我可以做些什么来修改它?
(define (euclids-alg n1 n2)
(cond((= n1 0) n2)
((= n2 0) n1)
((= n1 n2) n1)
((> n1 n2) (euclids-alg (- n1 n2) n2))
((< n1 n2) (euclids-alg n1 (- n2 n1)))))
Run Code Online (Sandbox Code Playgroud)