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 救助/VBGFemale/NNP
,/, /IN の/DT 娘/NNMale/NNP
,/, from/IN drowning/VBG ,/, he/PRP is/VBZ jailed/VBN for/IN piracy/NN ./.)
コードの太字部分は、本来の動作をしていません。print subtree
ステートメントは変更を示していますが、変更されていませprint chunked
ん。
私は何を間違っていますか、それとも他の方法はありますか?
私はpythonとnltkが初めてです。どんな助けでも感謝します。
male
female
名前のリストが次のように含まれています。
[「キャプテン・ジャック・スパロウ」、「ガバナー・ウェザビー・スワン」、「ロビン」]
[「エリザベス・スワン」、「ジェニー」]