NLTKの正規表現パーサーで文法の一部としてnot条件を作成する必要があります。私は構造'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とsentence2フレーズCoffee & Tea
の両方で見ることができると私はチャンクLondon and Paris
を望むものではないがLondon and Paris
は、グループとしてのチャンクを取得したよう。これを行う1つの方法は、先行する<IN>
POSタグのパターンを無視することです。
一言で言えば、POSタグのNOT(否定)条件を正規表現パーサーの文法に追加する方法を知る必要があります。 '^'の後にタグ定義を使用する標準的な構文は機能していないようです。
あなたはこれをどのように使用しているか、より多くの文脈を与えることができますか?あなたが[MCVE]を提供した方が簡単でしょう。 –
私は質問に例を追加しています。私はちょうど正規表現パーサーでPOSタグのNOT(否定)条件を追加する方法を知る必要があります。 '^'の後にタグ定義を使用する標準的な構文は機能していないようです。 –
正規表現では、 '^'は通常、行の先頭を意味します。文字クラス(角括弧)の中で "not"を意味するだけです。 – alexis