NLTK의 정규식 파서에서 문법의 일부로 조건을 작성해야합니다. 구조 'Coffee & Tea'
인 단어를 청크하고 싶지만 시퀀스 앞에 <IN>
단어가있는 경우 청크하지 않아야합니다. 예를 들어, 'in London and Paris'
은 파서에 의해 청크되어서는 안됩니다. 다음과 같이NLTK 정규식 파서에서 조건 없음
내 코드는 다음과 같습니다
grammar = r'''NP: {(^<IN>)<NNP>+<CC><NN.*>+}'''
나는 문제를 해결하기 위해 위의 문법을 시도했지만 누군가가 내가 뭘 잘못 말해주십시오 수 작동하지 않습니다.
예 :
def parse_sentence(sentence):
pos_sentence = nltk.pos_tag(nltk.word_tokenize(sentence))
grammar = r'''NP: {<NNP>+<CC><NN.*>+}'''
parser = nltk.RegexpParser(grammar)
result = parser.parse(pos_sentence)
print result
sentence1 = 'Who is the front man of the band that wrote Coffee & TV?'
parse_sentence(sentence1)
sentence2 = 'Who of those resting in Westminster Abbey wrote a book set in London and Paris?'
parse_sentence(sentence2)
Result for sentence 1 is:
(S
Who/WP
is/VBZ
the/DT
front/JJ
man/NN
of/IN
the/DT
band/NN
that/WDT
wrote/VBD
(NP Coffee/NNP &/CC TV/NN)
?/.)
Result for sentence2 is:
(S
Who/WP
of/IN
those/DT
resting/VBG
in/IN
Westminster/NNP
Abbey/NNP
wrote/VBD
a/DT
book/NN
set/VBN
in/IN
(NP London/NNP and/CC Paris/NNP)
?/.)
으로 모두 SENTENCE1에서 볼 나는 덩어리 London and Paris
하고자하지는 않지만 Coffee & Tea
및 London and Paris
그룹으로 청크 얻을 문구를 SENTENCE2 할 수
<IN>
POS 태그가 앞에 오는 패턴을 무시하는 것입니다.
간단히 말해서 POS 태그의 NOT (부정) 조건을 정규식 파서의 문법에 추가하는 방법을 알아야합니다. '^'다음에 태그 정의를 사용하는 표준 구문이 작동하지 않는 것 같습니다.
당신이 이것을 어떻게 사용하고 있는지 더 자세히 알 수 있습니까? [MCVE]를 제공하면 더 쉬울 것입니다. –
나는 또한 질문에 예제를 추가하고 있습니다. 난 그냥 정규식 파서에 POS 태그에 대한 부정 (부정) 조건을 추가하는 방법을 알아야합니다. '^'다음에 태그 정의를 사용하는 표준 구문은 작동하지 않는 것 같습니다. –
정규 표현식에서'^ '는 일반적으로 줄의 시작을 의미합니다. 그것은 오직 문자 클래스 (대괄호) 안에 "not"를 의미합니다. – alexis