[英]NLTK - Replace chunks with specific word
我正在使用nltk進行NLP。 我正在使用分塊提取人員姓名。 分塊后,我想用特定的字符串“ Male”或“ Female”替換這些塊。
我的代碼是:
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
我的輸入數據是:
傑克·斯派洛(Jack Sparrow)船長抵達牙買加的皇家港口,指揮一艘船。 盡管營救了韋瑟比·斯旺(Wayby Swann)州長的女兒伊麗莎白·斯旺(Elizabeth Swann)溺水,但仍因海盜罪被判入獄。
當前輸出為:
(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)
,/,/ IN溺水/ VBG,/,他/ PRP被/ VBZ監禁/ VBN for / IN盜版/ NN ./。)
我想用“ Male”或“ Female”替換這些塊,其輸出應為:
(S
Male/NNP
到達/ VBZ進/ IN(名字港口/ NNP皇家/ NNP)進/ IN(名字牙買加/ NNP)到/ TO司令官/ VB a / DT艦/ NN ./。盡管/ IN正在營救/ VBGFemale/NNP
,/,/ INMale/NNP
,/的/ DT女兒/ NN,來自/ IN溺水/ VBG,/,他/ PRP被/ VBZ監禁/ VBN,/ IN盜版/NN./。)
代碼中的粗體部分沒有執行應有的功能。 print subtree
語句顯示更改,但print chunked
不會更改。
我做錯了什么或者還有其他方法嗎?
我是python和nltk的新手。 任何幫助表示贊賞。
male
和female
的名字列表包括:
[“傑克·斯帕羅船長”,“州長韋瑟·斯旺”,“羅賓”]
[“伊麗莎白·斯旺”,“珍妮”]
我不知道我是否正確理解了您的問題。 NLTK子樹只是普通的Python列表。 因此,您也可以在此處執行常規列表操作。嘗試使用此代碼段,而不要在代碼中使用for循環部分。
for subtree in chunked.subtrees(filter=lambda t: t.label() == 'Name'):
full_name = []
for word, pos in subtree:
full_name.append(word)
st = " ".join(full_name) # iterate till the variable catches full name as tokenizer segments words.
if st in male:
subtree[:] = [("Male",pos)] # replacing the subtree with our own value
elif st in female:
subtree[:] = [("Female",pos)]
輸出:
> (S (Name male/NNP) arrives/VBZ in/IN (Name Port/NNP Royal/NNP) in/IN (Name Jamaica/NNP) to/TO commandeer/VB a/DT ship/NN ./. Despite/IN rescuing/VBG (Name female/NNP) ,/, the/DT daughter/NN of/IN (Name male/NNP) ,/, from/IN drowning/VBG ,/, he/PRP is/VBZ jailed/VB for/IN piracy/NN./.)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.