2012-01-31 42 views
0

嗨,我试图从标签语料库中提取专有名词,例如说从nltk标签语料库布朗我试图提取仅带有“NP”标签的文字。从Python中的标签语料库中提取

我的代码:

import nltk 
    from nltk.corpus import brown 
    f = brown.raw('ca01') 
    print nltk.corpus.brown.tagged_words() 
    w=[nltk.tag.str2tuple(t) for t in f.split()] 
    print w 

,但它没有显示的话istead它显示只有

[]

输出样本:

[('The', 'AT'), ('Fulton', 'NP-TL'), ...] 
    [] 

为什么呢? ?

谢谢。

我,我只PRIT f.split()..然后我得到

   [('The', 'AT'), ('Fulton', 'NP-TL'), ('County', 'NN-TL'), ('Grand', 'JJ-TL'), ('Jury', 'NN-TL'), ('said', 'VBD'), ('Friday', 'NR'), ('an', 'AT'), ('investigation', 'NN'), ('of', 'IN'), ("Atlanta's", 'NP$'), ('recent', 'JJ'), ('primary', 'NN'), ('election', 'NN'), ('produced', 'VBD'), ('``', '``'), ('no', 'AT'), ('evidence', 'NN'), ("''", "''"), ('that', 'CS'), ('any', 'DTI'), ('irregularities', 'NNS'), ('took', 'VBD'), ('place', 'NN'), ('.', '.'), ('The', 'AT'), ('jury', 'NN'), ('further', 'RBR'), ('said', 'VBD'), ('in', 'IN'), ('term-end', 'NN'), ('presentments', 'NNS'), ('that', 'CS'), ('the', 'AT'), ('City', 'NN-TL')..... 

回答

4

不能从你给我们的东西中分辨出来,但是你是否尝试过一步一步地进入问题?看来,在任何情况下t.split('/')[1] == 'NP'评估为真。所以,你应该开始:

  1. 打印/调试,看看究竟是什么f.split()包含
  2. 确保您的病情反而是正确的,从你给有输出的小样品在我看来你是寻找更多的:if t.split('/')[1].startswith('NP'),但不能真正说。

编辑:

好吧,首先,如果这是真的什么f.split()打印到你,那么你应该得到一个异常sicne t是一个元组和元组可是没有一个split()方法。所以你让我好奇,并且我安装了nltk并下载了'brown'语料库并且尝试了你的代码。现在首先,如果我这样做:

import nltk 
    from nltk.corpus import brown 
    f = brown.raw('ca01') 
    print f.split() 

    ['The/at', 'Fulton/np-tl', 'County/nn-tl', 'Grand/jj-tl', 'Jury/nn-tl', 'said/vbd', 'Friday/nr', 'an/at', 'investigation/nn', 'of/in', "Atlanta's/np$", 'recent/jj', 'primary/nn', 'election/nn', 'produced/vbd', '``/``', 'no/at', 'evidence/nn', "''/''", 'that/cs', 'any/dti', 'irregularities/nns', 'took/vbd', 'place/nn', './.', 'The/at', 'jury/nn', 'further/rbr', 'said/vbd', 'in/in', 'term-end/nn', 'presentments/nns', 'that/cs', 'the/at', 'City/nn-tl', 'Executive/jj-tl', 'Committee/nn-tl', ',/,', 'which/wdt', 'had/hvd', 'over-all/jj', 'charge/nn', 'of/in', 'the/at', 'election/nn', ',/,', '``/``', 'deserves/vbz', 'the/at', 'praise/nn', 'and/cc', 'thanks/nns', 'of/in', 'the/at', 'City/nn-tl' .....] 

所以我没有ideea你在那里得到的结果,但它是不正确的。现在您可以从组中看到,单词的第二部分是小写字母,这就是您的代码失败的原因。所以,如果你这样做:

w=[nltk.tag.str2tuple(t) for t in f.split() if t.split('/')[1].lower() == 'np'] 

这将让你的结果:

[('September-October', 'NP'), ('Durwood', 'NP'), ('Pye', 'NP'), ('Ivan', 'NP'), ('Allen', 'NP'), ('Jr.', 'NP'), ('Fulton', 'NP'), ('Atlanta', 'NP'), ('Fulton', 'NP'), ('Fulton', 'NP'), ('Jan.', 'NP'), ('Fulton', 'NP'), ('Bellwood', 'NP'), ('Alpharetta', 'NP'), ('William', 'NP'), ('B.', 'NP'), ('Hartsfield', 'NP'), ('Pearl', 'NP'), ('Williams', 'NP'), ('Hartsfield', 'NP'), ('Aug.', 'NP'), ('William', 'NP'), ('Berry', 'NP'), ('Jr.', 'NP'), ('Mrs.', 'NP'), ('J.', 'NP'), ('M.', 'NP'), ('Cheshire', 'NP'), ('Griffin', 'NP'), ('Opelika', 'NP'), ('Ala.', 'NP'), ('Hartsfield', 'NP'), ('E.', 'NP'), ('Pelham', 'NP'), ('Henry', 'NP'), ('L.', 'NP'), ('Bowden', 'NP'), ('Hartsfield', 'NP'), ('Atlanta', 'NP'), ('Jan.', 'NP'), ('Ivan', 'NP'), ....] 

现在,以供将来参考仔细检查您张贴像我要求的信息之前,只是因为如果它不正确,则这是一种误导,它不会帮助那些试图帮助你的人,也不会帮助你。不作为评论家,但作为建设性的意见:)

+0

如果我尝试数字2,它显示与我一样的答案。上面给出了f.split的结果。 – fara 2012-01-31 15:46:08

0

人会想象t.split('/')[1] == 'NP'一直在评估为false。

+0

ok.but然后如何提取NP字? – fara 2012-01-31 15:36:13

+0

@fara:你告诉我。如果这是你的问题,那就问一个新的问题。 – Marcin 2012-01-31 15:37:00

相关问题