Python: возникают проблемы в сегментаторе предложений, токенайзере слов и теге части речи

Я пытаюсь прочитать текстовый файл в Python, а затем сделать предложение сегментирования, слово токенизатор и часть речи.

Это мой код:

file=open('C:/temp/1.txt','r')
sentences = nltk.sent_tokenize(file)
sentences = [nltk.word_tokenize(sent) for sent in sentences]
sentences = [nltk.pos_tag(sent) for sent in sentences]

Когда я пытаюсь просто вторая команда, он отображает ошибку:

Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
sentences = nltk.sent_tokenize(file)
File "D:\Python\lib\site-packages\nltk\tokenize\__init__.py", line 76, in sent_tokenize
return tokenizer.tokenize(text)
File "D:\Python\lib\site-packages\nltk\tokenize\punkt.py", line 1217, in tokenize
return list(self.sentences_from_text(text, realign_boundaries))
File "D:\Python\lib\site-packages\nltk\tokenize\punkt.py", line 1262, in sentences_from_text
sents = [text[sl] for sl in self._slices_from_text(text)]
File "D:\Python\lib\site-packages\nltk\tokenize\punkt.py", line 1269, in _slices_from_text
for match in self._lang_vars.period_context_re().finditer(text):
TypeError: expected string or buffer

Другая попытка: когда я пробую только одно предложение, например, "Желтая собака лает на кошку", первые три команды работают, но в последней строке я получаю эту ошибку:(Интересно, я не загрузил пакеты полностью?)

Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
sentences = [nltk.pos_tag(sent) for sent in sentences]
File "D:\Python\lib\site-packages\nltk\tag\__init__.py", line 99, in pos_tag
tagger = load(_POS_TAGGER)
File "D:\Python\lib\site-packages\nltk\data.py", line 605, in load
resource_val = pickle.load(_open(resource_url))
ImportError: No module named numpy.core.multiarray

2 ответа

Хм... ты уверен, что ошибка во второй строке?

Вы, кажется, используете одинарные кавычки и запятые, отличные от стандартного ASCII ' а также , персонажи:

file=open(‘C:/temp/1.txt’,‘r’) # your version (WRONG)
file=open('C:/temp/1.txt', 'r') # right

Python даже не должен быть в состоянии скомпилировать это. Действительно, когда я пытаюсь это сделать, это barfs из-за синтаксической ошибки

ОБНОВЛЕНИЕ: Вы опубликовали исправленную версию с правильным синтаксисом. Сообщение об ошибке из трассировки довольно простое: вызываемая вами функция, скорее всего, ожидает кусок текста в качестве параметра, а не объект файла. Хотя я ничего не знаю о NLTK, тратить пять секунд на Google подтверждает это.

Попробуйте что-то вроде этого:

file = open('C:/temp/1.txt','r')
text = file.read() # read the contents of the text file into a variable
result1 = nltk.sent_tokenize(text)
result2 = [nltk.word_tokenize(sent) for sent in result1]
result3 = [nltk.pos_tag(sent) for sent in result2]

ОБНОВЛЕНИЕ: я переименовал sentences в result1/2/3 из-за путаницы в том, что на самом деле делает код, из-за многократной перезаписи одной и той же переменной. Это не влияет на семантику, просто поясняет, что вторая строка действительно влияет на финальную result3,

Сначала откройте файл, а затем прочитайте его:

filename = 'C:/temp/1.txt'
infile = open(filename, 'r')
text = infile.read()

затем объедините инструменты в nltk как таковые:

tagged_words = [pos_tag(word_tokenize(i) for i in sent_tokenize(text)]
Другие вопросы по тегам