Извлечение двух имен из одного предложения в nltk python

Привет, я начал играть с Python в эти дни, и это кажется простым, поэтому я нашел корпус в nltk в Python. Когда я попробовал

text1.concordance("Moby")

это дало мне количество предложений и отображение предложений, содержащих слово Моби, круто.

Поэтому я попытался проверить, смогу ли я найти все предложения с именами Моби и Ахав, но, к сожалению, получаю ошибки.

Я делаю что-то не так или я должен получить все предложения, содержащие оба этих имени? Есть ли другая функция от nltk, которую я должен использовать? о.о

Это, вероятно, легко, но не так уж много для меня, чтобы увидеть это... надеюсь, кто-то может помочь, спасибо.

PS: Если мне нужно написать какой-то код, пример был бы отличным. ^^

Изменить: поскольку кто-то спросил об ошибке, я тоже напишу код, который написал.

import nltk
from nltk.book import *

text1.concordance("Moby","Ahab")

дает мне ошибку:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    text1.concordance('Moby','Ahab')
  File "C:\Programmering\Python27\lib\site-packages\nltk\text.py", line 314, in concordance
    self._concordance_index.print_concordance(word, width, lines)
  File "C:\Programmering\Python27\lib\site-packages\nltk\text.py", line 174, in print_concordance
    half_width = (width - len(word) - 2) / 2
TypeError: unsupported operand type(s) for -: 'str' and 'int'

Я догадался, что получу несколько совпадений, например, просто запустив:

text1.concordance("Moby")

где у меня получилось 84 спички.


person N00programmer    schedule 25.04.2012    source источник
comment
какой тип ошибок? пожалуйста, вставьте свой код.   -  person Ashwini Chaudhary    schedule 25.04.2012


Ответы (2)


Вы не можете сделать это с concordance. Он принимает только одно слово и распечатывает результаты. Нет (разумного) способа получить их в виде списка, поэтому вы не можете их фильтровать дальше. Проблема в том, что Text, объект позади text1, подходит только для простого интерактивного исследования — я никогда не понимал, почему книга nltk начинается с него. Так что забудьте о Text, пропустите оставшуюся часть главы и сразу переходите к главе 2. «Моби Дик» является частью корпуса gutenberg, так что вы можете перебрать его предложения и получить ответ следующим образом:

from nltk.corpus import gutenberg
for s in gutenberg.sents('melville-moby_dick.txt'):
    if 'Ahab' in s and 'Moby' in s:
        print " ".join(s)
person alexis    schedule 28.04.2012
comment
Похоже, ты прав. /me переходит сразу ко второй главе xD - person N00programmer; 08.05.2012

Вы можете составить список всех имен, с которыми вы хотите найти соответствие, например:

name_list = ['Moby', 'Ahab']

Код для этого будет таким:

import nltk
from nltk.book import *
name_list = ['Moby', 'Ahab']
for name in name_list: 
    text1.concordance(name)
person PJay    schedule 07.09.2016