2016-07-31 38 views
0

Ich benutze NLTK, um SQL-Abfrage von englischen Text mit Feature-basierte cfg. Ich folgte diesem Link http://www.nltk.org/book/ch10.html. Ich kann das Beispiel ausführen, in dem fcfg in der Datei sql0.fcfg gespeichert ist.NLTK Problem beim Ableiten von SQL-Abfrage mit fcfg

Danach habe ich versucht, es für meinen eigenen Gebrauch zu ändern, wo ich einen folgenden neuen Satz von Regeln hinzugefügt:

% start S 
## Added by me 
S[SEM=(?whadvp + ?sq)] -> WHADVP[SEM=?whadvp] SQ[SEM=?sq] 

WHADVP[SEM=(?wrb + ?jj)] -> WRB[SEM=?wrb] JJ[SEM=?jj] 
SQ[SEM=(?vbp + ?np + ?vp)] -> VBP[SEM=?vbp] NP[SEM=?np] VP[SEM=?vp] 
NP[SEM=(?np + ?pp)] -> NP[SEM=?np] PP[SEM=?pp] 
NP[SEM=(?np)] -> JJS[SEM=?jjs] 
VP[SEM=(?vbz + ?advp)] -> VBZ[SEM=?vbz] ADVP[SEM=?advp] 
PP[SEM=(?in + ?np)] -> IN[SEM=?in] NP[SEM=?np] 
NP[SEM=(?prp + ?nn)] -> PRP$[SEM=?prp] NN[SEM=?nn] 
ADVP[SEM=(?rb)] -> RB[SEM=?rb] 

WRB[SEM='SELECT average(calldurationinsexonds) FROM Task'] -> 'How' 

JJ[SEM=''] -> 'long' 
VBP[SEM=''] -> 'do' 
JJS[SEM=''] -> 'most' 
IN[SEM=''] -> 'of' 
PRP$[SEM=''] -> 'our' 
NN[SEM=''] -> 'phone' 
VBZ[SEM=''] -> 'calls' 
JJ[SEM=''] -> 'last' 

## Default example 
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' 

Nach dem Speichern der Datei, wenn ich Befehle ausführen folgende ich laufe in Fehler

cp = load_parser('grammars/book_grammars/sql0.fcfg') 
query = 'How long do most of our phone calls last' 
trees = list(cp.parse(query.split())) 

Fehler:

Traceback (most recent call last): File "", line 1, in File "C:\Python27\lib\site-packages\nltk\parse\chart.py", line 1350, in parse chart = self.chart_parse(tokens) File "C:\Python27\lib\site-packages\nltk\parse\chart.py", line 1309, in chart_parse self._grammar.check_coverage(tokens) File "C:\Python27\lib\site-packages\nltk\grammar.py", line 631, in check_coverage "input words: %r." % missing) ValueError: Grammar does not cover some of the input words: u"'How', 'long', 'do', 'most', 'of', 'our', 'phone', 'calls', 'last'".

ich weiß nicht, ob es einen Fehler in meiner zusätzlichen Grammatik oder einem anderen iss ist Ue. Jede Hilfe oder Anregung wäre großartig.

+0

"Grammatik deckt einige der Eingabewörter nicht ab" – RAVI

Antwort

0

Das Problem war, dass ich die \ grammars \ book_grammars \ sql0.fcfg änderte. Als ich es als separate Datei gespeichert und von dort Grammatik geladen habe, wurde das Problem gelöst.

Ich weiß nicht, warum es passiert ist, aber es hat das Problem gelöst.