извлечение из помеченного корпуса в Python - PullRequest
0 голосов
/ 31 января 2012

Привет, я пытаюсь извлечь собственное существительное из помеченного корпуса, скажем, например, из помеченного nltk коричневого тела, я пытаюсь извлечь слова только помеченные "NP".

мой код:

  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').....

Ответы [ 2 ]

4 голосов
/ 31 января 2012

Не можете действительно сказать из того, что вы нам дали, но пытались ли вы идти к проблеме шаг за шагом? Кажется, что ни при каких обстоятельствах t.split('/')[1] == 'NP' не оценивается как Истина. Итак, вы должны начать с:

  1. print / debug, чтобы увидеть, что именно содержит f.split()
  2. убедитесь, что ваше состояние действительно правильное, из небольшой выборки, которую вы там дали, мне кажется, вы ищете больше: if t.split('/')[1].startswith('NP'), но не можете сказать точно.

EDIT:

Хорошо, сначала, если это действительно то, что печатает f.split(), тогда вы должны получить исключение sicne t - это кортеж, а у кортежа нет метода split(). Итак, вы заинтересовали меня, и я установил nltk, скачал «коричневый» корпус и попробовал ваш код. Теперь, во-первых, для меня, если я сделаю:

  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' .....]

Так что я не знаю, что вы там сделали, чтобы получить результат, но он был неверным. Теперь, как видно из групп, вторая часть слова написана строчными буквами, поэтому ваш код потерпел неудачу. Так что если вы делаете:

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 голосов
/ 31 января 2012

Можно представить, что t.split('/')[1] == 'NP' всегда оценивается как ложное.

...