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
в result
1/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)]