Как извлечь ключевые слова, используя TFIDF для каждой строки в python? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть столбец, который имеет только текст. Мне нужно извлечь ключевые слова из каждой строки, используя TFIDF.

Пример ввода:

df['Text']
'I live in India',
'My favourite colour is Red', 
'I Love Programming'

Ожидаемый результат:

 df[Text]                            df[Keywords]
'I live in India'                  'live','India'
'My favourite colour is Red'       'favourite','colour','red'
'I Love Programming'               'love','programming'

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

tfidf = TfidfVectorizer(max_features=300, ngram_range = (2,2))
Y = df['Text'].apply(lambda x: tfidf.fit_transform(x))

Я получаю приведенную ниже ошибку Повторяемость по ожидаемым необработанным текстовым документам, получен строковый объект.

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Функция fit_transform TfidfVectorizer ожидает, что итеративный тип (например, набор, список и т. Д. c.) Предложений \ документов будет соответствовать баллу TfIdf.

То, что вы должны сделать, на самом деле -

Y = tfidf.fit_transform(df['Text'])
0 голосов
/ 20 апреля 2020

Попробуйте код ниже, если хотите токенизировать свои предложения:

from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

df = pd.DataFrame({'Text':['I live in India', 'My favourite colour is Red', 'I Love Programming']})
df['Keywords'] = df.Text.apply(lambda x: nltk.word_tokenize(x))
stops =  list(stopwords.words('english'))
df['Keywords'] = df['Keywords'].apply(lambda x: [item for item in x if item.lower() not in stops])
df['Keywords'] = df['Keywords'].apply(', '.join)

print(df)

                         Text                Keywords
0             I live in India             live, India
1  My favourite colour is Red  favourite, colour, Red
2          I Love Programming       Love, Programming
...