2016-11-16 1 views
4

grammar.searchString(sentence)을 사용할 때 pyparsing을 사용하여 트래픽 위반 문장을 구문 분석하려고하는데 괜찮 으면,하지만 parseString을 사용하면 ParseException이 발생합니다. 아무도 내가 내 코드에 무엇이 잘못되었는지 말해 주실 수 있습니까?parseString을 사용하면 psearsing.ParseException이 발생합니다.

from pyparsing import Or, Literal, oneOf, OneOrMore, nums, alphas, Regex, Word, \ 
    SkipTo, LineEnd, originalTextFor, Optional, ZeroOrMore, Keyword, Group 
import pyparsing as pp 

from nltk.tag import pos_tag 

sentences = ['Failure to control vehicle speed on highway to avoid collision','Failure to stop at stop sign', 'Introducing additives into special fuel by unauthorized person and contrary to regulations', 'driver fail to stop at yield sign at nearest pointf approaching traffic view when req. for safety', 'Operating unregistered motor vehicle on highway', 'Exceeding maximum speed: 39 MPH in a posted 30 MPH zone'] 


for sentence in sentences: 
    words = pos_tag(sentence.split()) 
    #print words 
    verbs = [word for word, pos in words if pos in ['VB','VBD','VBG']] 
    nouns = [word for word, pos in words if pos == 'NN'] 
    adjectives = [word for word, pos in words if pos == 'JJ'] 

    adjectives.append('great') # initializing 
    verbs.append('get') # initializing 


    object_generator = oneOf('for to') 
    location_generator = oneOf('at in into on onto over within') 
    speed_generator = oneOf('MPH KM/H') 

    noun = oneOf(nouns) 
    adjective = oneOf(adjectives) 

    location = location_generator + pp.Group(Optional(adjective) + noun) 

    action = oneOf(verbs) 
    speed = Word(nums) + speed_generator 

    grammar = action | location | speed 

    parsed = grammar.parseString(sentence) 

    print parsed 

오류 추적

역 추적 (가장 최근 통화 마지막) : 파일 "script3.py", 라인 (35)의 구문 분석 = grammar.parseString 파일 (문장) "/ 사용자/알라나/아나콘다 /lib/python2.7/site-packages/pyparsing .py ", 줄 1032, parseString raise exc pyparsing.ParseException : 예상 된 Re :('제어 | 회피 | get') (char 0), (줄 : 1 , col : 1)

+0

, 게시물에 전체 오류 추적을 추가하십시오. – kvorobiev

+0

추적 (가장 최근 통화 마지막) : 파일 "script3.py", 줄 35, location_parsed = location.parseString (문장) 파일 "/Users/alana/anaconda/lib/python2.7/site-packages /pyparsing.py ", 줄 1032, parseString에서 제기 exc pyparsing.ParseException : 예상 재 : ('에서 |에 |에 | 위에 |에 | 위에 |에 |') (char 0), (줄 : 1, col : 1) –

+0

코드에서'location_parsed = location.parseString (sentence)'행을 보지 못했습니다. 예외가 발생한 소스를 제공하십시오. – kvorobiev

답변

2

searchString 정확하게 일치하지 않는 텍스트는 건너 뜁니다 전자 문법. parseString은 입력 문자열의 첫 문자부터 시작하여 완전한 문법 일치를 요구하는 훨씬 더 특별합니다. 귀하의 경우, 문법은 입력 문장의 NLTK 분석을 바탕으로 자동 생성되므로 (문법은 재미 있습니다) btw는 결정하기가 다소 어렵습니다. 문법 자체 만 인쇄하면 일 수 있습니다.은 찾고있는 문자열에 대한 통찰력을 제공합니다. 예를 들어, NLTK가 첫 번째 예제에서 '실패'를 명사로 해석하지만, 문법에있는 3 개의 표현식 중 아무 것도 명사로 시작하지 않는다고 생각합니다. 따라서 parseString은 실패합니다.

아마도 NLTK에서 찾은 것을 바탕으로 명사, 형용사 및 동사 목록을 훨씬 더 많이 인쇄 한 다음 생성 된 문법에 매핑하는 방법을 확인해야 할 것입니다. 내장

또한 파이썬의 합계를 (사용하여 문장에서 여러 경기의 결과를 결합하는 시도 할 수 있습니다) :

grammar = action("action") | Group(location)("location") | Group(speed)("speed") 

#parsed = grammar.parseString(sentence) 
parsed = sum(grammar.searchString(sentence)) 
print(parsed.dump()) 
+0

에서 약간 변경 한 오류가 발생했습니다. 완벽하게 작동했습니다. 내 프로젝트로 계속 전진해야했던 것. 고마워요 !! –

관련 문제