0

nltk を使用して NLP に取り組んでいます。チャンクを使用して人の名前を抽出しています。チャンクした後、チャンクを特定の文字列「男性」または「女性」に置き換えたいと思います。

私のコードは次のとおりです。

import nltk

with open('male_names.txt') as f1:
    male = [line.rstrip('\n') for line in f1]
with open('female_names.txt') as f2:
     female = [line.rstrip('\n') for line in f2]

with open("input.txt") as f:
    text = f.read()

words = nltk.word_tokenize(text)
tagged = nltk.pos_tag(words)
chunkregex = r"""Name: {<NNP>+}"""
chunkParser = nltk.RegexpParser(chunkregex)
chunked = chunkParser.parse(tagged)

for subtree in chunked.subtrees(filter=lambda t: t.label() == 'Name'):
    chunk=[]
    for word, pos in subtree:
        chunk.append(word)
        temp = " ".join(chunk)
    **if temp in male:
        subtree = ('Male', pos)
    if temp in female:
        subtree = ('Female', pos)**
    print subtree

print chunked

私の入力データは次のとおりです。

ジャック・スパロウ船長が船を徴用するためにジャマイカのポート・ロイヤルに到着。ウェザビー・スワン知事の娘であるエリザベス・スワンを溺死から救ったにもかかわらず、彼は海賊行為で投獄されました。

現在の出力は次のとおりです。

(S (Name Captain/NNP Jack/NNP Sparrow/NNP) が到着します/VBZ が到着します/IN (ポートの名前/NNP ロイヤル/NNP) に/IN (ジャマイカの名前/NNP) に/TO 司令官/VB a/DT 船/NN ./.にもかかわらず/IN 救助/VBG (Name Elizabeth/NNP Swann/NNP) ,/, /IN の/DT 娘/NN (Name Governor/NNP Weatherby/NNP Swann/NNP) ,/, from/IN drowning/VBG ,/, he/PRP is/VBZ jailed/VBN for/IN piracy/NN ./.)

チャンクを「男性」または「女性」に置き換えて、次のように出力する必要があります。

(S Male/NNP が到着します/VBZ が到着します/IN (ポートの名前/NNP ロイヤル/NNP) に/IN (ジャマイカの名前/NNP) に/TO 司令官/VB a/DT 船/NN ./.にもかかわらず/IN 救助/VBG Female/NNP ,/, /IN の/DT 娘/NN Male/NNP ,/, from/IN drowning/VBG ,/, he/PRP is/VBZ jailed/VBN for/IN piracy/NN ./.)

コードの太字部分は、本来の動作をしていません。print subtreeステートメントは変更を示していますが、変更されていませprint chunkedん。

私は何を間違っていますか、それとも他の方法はありますか?
私はpythonとnltkが初めてです。どんな助けでも感謝します。

malefemale名前のリストが次のように含まれています。

[「キャプテン・ジャック・スパロウ」、「ガバナー・ウェザビー・スワン」、「ロビン」]

[「エリザベス・スワン」、「ジェニー」]

4

1 に答える 1