2017-01-24 3 views
-1

У меня есть список 10k слов в текстовом файле, как так:AttributeError: 'список' объект не имеет атрибута 'ниже' gensim

G15 KDN C30A Действие Стандартный Air Brush воздуха Разбавление

Я пытаюсь преобразовать их в более низкие обсаженных лексемы, используя этот код для последующей обработки с GenSim:

data = [line.strip() for line in open("C:\corpus\TermList.txt", 'r')] 
texts = [[word for word in data.lower().split()] for word in data] 

и я получаю followi нг обратного вызова:

AttributeErrorTraceback (most recent call last) 
<ipython-input-84-33bbe380449e> in <module>() 
     1 data = [line.strip() for line in open("C:\corpus\TermList.txt", 'r')] 
----> 2 texts = [[word for word in data.lower().split()] for word in data] 
     3 
AttributeError: 'list' object has no attribute 'lower' 

Любые предложения о том, что я делаю неправильно и как исправить это было бы весьма признателен !!! Спасибо!!

ответ

4

попробовать:

data = [line.strip() for line in open("C:\corpus\TermList.txt", 'r')] 
texts = [[word.lower() for word in text.split()] for text in data] 

вы пытаетесь применить .lower() для данных, который является списком.
.lower() может применяться только к строкам.

+0

спасибо !!! Он отлично работал. Теперь я понимаю, что я делаю неправильно. Я новичок в python. – tom

+0

np mate, не забывайте поднимать/отмечать ответ :) – epattaro

1

Вам нужно

texts = [[word.lower() for word in line.split()] for line in data] 

Этот код для каждого line в data ([... for line in data]) сгенерирует список строчных слов ([word.lower() for word in line.split()]). Каждая строка line будет содержать последовательность слов, разделенных пробелами. line.split() превратит эту последовательность в список. И word.lower() преобразует каждое слово в строчный.

0

то, что вы делаете неправильно есть вызов метода строки (lower()) для списка (в вашем случае, данные)

data = [line.strip() for line in open('corpus.txt', 'r')] 

что вы должны сделать после получения строки как элемент списка является

texts = [[words for words in sentences.lower().split()] for sentences in data] 
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*********^^^^^^^^^^^^^^^^^^^^^^*********^^^^ 
#you should call lower on iter. value - in our case it is "sentences" 

это даст вам список списков. каждый список содержит строчные строки с нижним регистром.

$ tail -n 10 corpus.txt 
G15 KDN C30A Action Standard Air Brush Air Dilution 
G15 KDN C30A Action Standard Air Brush Air Dilution 
G15 KDN C30A Action Standard Air Brush Air Dilution 
G15 KDN C30A Action Standard Air Brush Air Dilution 
G15 KDN C30A Action Standard Air Brush Air Dilution 
G15 KDN C30A Action Standard Air Brush Air Dilution 
G15 KDN C30A Action Standard Air Brush Air Dilution 
G15 KDN C30A Action Standard Air Brush Air Dilution 
G15 KDN C30A Action Standard Air Brush Air Dilution 
G15 KDN C30A Action Standard Air Brush Air Dilution 


$ python 
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> data = [line.strip() for line in open('corpus.txt', 'r')] 
>>> texts = [[words for words in sentences.lower().split()] for sentences in data] 
>>> texts[:5] 
[['g15', 'kdn', 'c30a', 'action', 'standard', 'air', 'brush', 'air', 'dilution'], ['g15', 'kdn', 'c30a', 'action', 'standard', 'air', 'brush', 'air', 'dilution'], ['g15', 'kdn', 'c30a', 'action', 'standard', 'air', 'brush', 'air', 'dilution'], ['g15', 'kdn', 'c30a', 'action', 'standard', 'air', 'brush', 'air', 'dilution'], ['g15', 'kdn', 'c30a', 'action', 'standard', 'air', 'brush', 'air', 'dilution']] 
>>> 

уверен, что вы можете сгладить или просто сохранить как есть.

>>> flattened = reduce(lambda x,y: x+y, texts) 
>>> flattened[:30] 
['g15', 'kdn', 'c30a', 'action', 'standard', 'air', 'brush', 'air', 'dilution', 'g15', 'kdn', 'c30a', 'action', 'standard', 'air', 'brush', 'air', 'dilution', 'g15', 'kdn', 'c30a', 'action', 'standard', 'air', 'brush', 'air', 'dilution', 'g15', 'kdn', 'c30a'] 
>>> 
Смежные вопросы