объект в питоне - PullRequest
       24

объект в питоне

0 голосов
/ 03 февраля 2012

Я пытаюсь извлечь собственное существительное из исполнительных предложений помеченного тела.Когда я запускаю код, он показывает только список имен собственных 1-й пары предложений, а затем останавливается и выдает следующую ошибку:

          Traceback (most recent call last):
          print(list(words4))
          TypeError: 'NoneType' object is not iterable

Код:

      #extracting 
      def noun(sen):
          for t in range(len(sen)):
              if (sen[t].split('/')[1].lower() == 'np'):
                  w=sen[t].split('/')
                  return w

      if __name__ == '__main__':
          import nltk
          from nltk.corpus import brown
          f = brown.raw('ca01')
          print f
          mylist = []
          #splitting 
          sentences = splitParagraphIntoSentences(f)
          for s in sentences:
              mylist.append(s.strip())

          for i in mylist:
              print i

          for s in range(len(mylist)):
              words1 = mylist[s].split()
              words2 = mylist[s+1].split()
              words3= noun(words1)
              words4= noun(words2)
              print(list(words3))
              print(list(words4))

как решить эту ошибку.Спасибо.

1 Ответ

2 голосов
/ 03 февраля 2012

Вы делаете две ошибки здесь:

  1. «NP» - не единственная существительная фраза, которую использует NLTK. Также используется «NNP» и некоторые другие. Вам нужно заглянуть в tagset, чтобы выяснить, что там есть. Но я не знаю, к чему вы стремитесь сейчас, поэтому поиск только «np» может быть не совсем неправильным.

  2. Ваша noun(sen) функция не всегда возвращает что-то. Он вернется только в том случае, если найдет слово «np» в вашем предложении. Теперь, хотя есть разумное предположение, что в каждом предложении есть существительное, учтите, что NLTK не является современным, и поэтому может время от времени пропускать некоторые существительные. Также, как я упоминал в (1), NLTK также может помечать слова с помощью «NNP», так что будьте внимательны.

Чтобы устранить эту проблему, попробуйте следующую функцию noun(sen) (ваша слегка измененная версия:

def noun(sen):
    for t in range(len(sen)):
        if (sen[t].split('/')[1].lower() == 'np'):
            w=sen[t].split('/')
            return w
    return []

PS: пожалуйста, старайтесь не использовать отступы в один пробел. Это не лучший стиль и делает глаза болят

...