Лемматизация панд данных - PullRequest
0 голосов
/ 02 июля 2019

У меня есть данные, подобные этой на изображении ниже

enter image description here

мне нужно применить лемму в строках "job_title"

from nltk.stem import WordNetLemmatizer 
import nltk 
lemmatizer = WordNetLemmatizer() 

from sklearn.feature_extraction.text import TfidfVectorizer
TFIDF = TfidfVectorizer(tokenizer=lemmatizer,analyzer= 'word',min_df=3,token_pattern=r'(?u)\b[A-Za-z]+\b',stop_words= 'english')
tfidf_matrix = TFIDF.fit_transform(df2['job_title'])

но я получил эту ошибку TypeError: объект WordNetLemmatizer не вызывается

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

токенизатор должен быть лемматизатором, а не лемматизатором

 lemmatizer = WordNetLemmatizer()
 TFIDF = TfidfVectorizer(tokenizer=lemmatizer.lemmatize,analyzer= 'word',min_df=3,token_pattern=r'(?u)\b[A-Za-z]+\b',stop_words= 'english')

выход

TFIDF.fit_transform(['how are you', 'facing issue','hope this well help you' ])
#o/p
<3x3 sparse matrix of type '<class 'numpy.float64'>'
with 9 stored elements in Compressed Sparse Row format>
1 голос
/ 02 июля 2019

Аргумент токенизатора в TfidfVectorizer предназначен для переопределения шага токенизации строки.Например, вы можете использовать функцию, показанную ниже, которая принимает строку в качестве аргумента, маркирует строку и возвращает токенизированные слова.

def tokenizerFunc(x):
    return x.split()

Эта функция принимает строку в качестве входных данных и возвращает список слов.Причина, по которой вы получаете сообщение об ошибке « init () принимает 1 позиционный аргумент, но 2 были заданы», заключается в том, что функция «WordNetLemmatizer ()» не принимает никаких аргументов, однако при использовании этой функции внутри TfidfVectorizer строкапередан в качестве аргумента для его токенизации.

Если вы хотите использовать лемматизацию и токен одновременно, вы можете использовать эту функцию ниже

lemmatizer = WordNetLemmatizer()
def tokenizerFunc(x):
    tokenizedList = x.split()
    lemmatizedList = [ lemmatizer.lemmatize(i) for i in tokenizedList] 
    return lemmatizedList

, вы должны использовать ее следующим образом

TFIDF = TfidfVectorizer(tokenizer=tokenizerFunc,analyzer= 'word',min_df=3,token_pattern=r'(?u)\b[A-Za-z]+\b',stop_words= 'english') 
tfidf_matrix = TFIDF.fit_transform(df2['job_title'])
...