2016-07-08 3 views
1

Я использую NLTK для удаления стоп-слов из элемента списка. Вот мой фрагмент кодаУдаление стоп-слов с использованием NLTK в python

dict1 = {} 
    for ctr,row in enumerate(cur.fetchall()): 
      list1 = [row[0],row[1],row[2],row[3],row[4]] 
      dict1[row[0]] = list1 
      print ctr+1,"\n",dict1[row[0]][2] 
      list2 = [w for w in dict1[row[0]][3] if not w in stopwords.words('english')] 
      print list2 

проблема, это не только удаление стоп-слов, но и его удаление символов из других слов, например из слова «ориентация» «i» и больше стоп-слов будут удалены, и в дальнейшем они будут хранить символы вместо слов в списке2. т. Е. ['O', 'r', 'e', ​​'n', 'n', '', 'f', '', '3', '', 'r', 'e', ​​'r ',' e ',' ',' p ',' n ',' \ n ',' \ n ',' \ n ',' O ',' r ',' e ',' n ',' n ',' ',' f ',' ',' n ',' ',' r ',' e ',' r ',' e ',' ',' r ',' p ',' l '. ...................... , в то время как я хочу сохранить его как ['Ориентация', '.............. ......

+1

попытаться tokenize ваши слова сначала – galaxyan

+2

Что такое cur в вашем коде? Не могли бы вы отправить больше кода контекста, пожалуйста? –

ответ

1

Во-первых, убедитесь, что list1 - это список слов, а не массив символов. Здесь я могу дать вам фрагмент кода, который вы можете использовать.

from nltk import word_tokenize 
from nltk.corpus import stopwords 

english_stopwords = stopwords.words('english') # get english stop words 

# test document 
document = '''A moody child and wildly wise 
Pursued the game with joyful eyes 
''' 

# first tokenize your document to a list of words 
words = word_tokenize(document) 
print(words) 

# the remove all stop words 
content = [w for w in words if w.lower() not in english_stopwords] 
print(content) 

Выход будет:

['A', 'moody', 'child', 'and', 'wildly', 'wise', 'Pursued', 'the', 'game', 'with', 'joyful', 'eyes'] 
['moody', 'child', 'wildly', 'wise', 'Pursued', 'game', 'joyful', 'eyes'] 
0

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

list1 = row[:5] 

Тогда есть причина вы подключаетесь строкой [3] с dict1 [строкой [0]] [3], а не грести непосредственно [3]?

Наконец, считая, что строка представляет собой список строк, построение списка2 из строки [3] повторяется по каждому символу, а не по каждому слову. Возможно, поэтому вы разбираете «i» и «a» (и несколько других символов).

Правильное понимание будет:

list2 = [w for w in row[3].split(' ') if w not in stopwords] 

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

'Hello, this is row3' 

Для

['Hello,', 'this', 'is', 'row3'] 

Перебор, который дает вам целых слов, а не отдельные символы.

+0

TypeError: аргумент типа 'LazyCorpusLoader' не повторяется –

Смежные вопросы