Sklearn page에서 설명한대로 내 countvectorizer에 lemmatization을 추가했습니다. fit_transform
를 사용하여 DTM를 만들 때Sklearn : CountVectorizer에 lemmatizer 추가
from nltk import word_tokenize
from nltk.stem import WordNetLemmatizer
class LemmaTokenizer(object):
def __init__(self):
self.wnl = WordNetLemmatizer()
def __call__(self, articles):
return [self.wnl.lemmatize(t) for t in word_tokenize(articles)]
tf_vectorizer = CountVectorizer(tokenizer=LemmaTokenizer,
strip_accents = 'unicode',
stop_words = 'english',
lowercase = True,
token_pattern = r'\b[a-zA-Z]{3,}\b', # keeps words of 3 or more characters
max_df = 0.5,
min_df = 10)
그러나, 나는 (이 중 내가 이해를 할 수 없습니다) 아래의 오류가 발생합니다. leymatization을 벡터 라이저에 추가하기 전에 dtm 코드가 항상 작동했습니다. 매뉴얼에 깊이 들어가서 코드로 몇 가지 시도를했지만 해결책을 찾지 못했습니다.
dtm_tf = tf_vectorizer.fit_transform(articles)
업데이트 :
아래 MaxU의 조언, 오류없이 코드를 실행하지만 숫자와 문장 부호 내 출력에서 ommited되지 않은 @ 다음 후. 나는 개별 테스트를 실행하여 LemmaTokenizer()
이후의 다른 기능을 확인하고 작동하지 않습니다.
strip_accents = 'unicode', # works
stop_words = 'english', # works
lowercase = True, # works
token_pattern = r'\b[a-zA-Z]{3,}\b', # does not work
max_df = 0.5, # works
min_df = 10 # works
Appearantly, 그냥 token_pattern
비활성 상태가 된 것입니다 : 여기 결과입니다.
from nltk import word_tokenize
from nltk.stem import WordNetLemmatizer
class LemmaTokenizer(object):
def __init__(self):
self.wnl = WordNetLemmatizer()
def __call__(self, articles):
return [self.wnl.lemmatize(t) for t in word_tokenize(articles)]
tf_vectorizer = CountVectorizer(tokenizer=LemmaTokenizer(),
strip_accents = 'unicode', # works
stop_words = 'english', # works
lowercase = True, # works
max_df = 0.5, # works
min_df = 10) # works
숫자, 문장 부호를 제거 할 사람들을 위해
및 3 자 미만의 단어 : 여기에 업데이트 token_pattern
없이 작업 코드 (난 그냥 'PUNKT'먼저 '워드 넷'패키지를 설치하는 데 필요한)입니다 여기 팬더 dataframe에서 작업 할 때 나를 위해 그것을 않는 한 가지 방법은, (하지만 어떻게 아무 생각이 없음)
# when working from Pandas dataframe
df['TEXT'] = df['TEXT'].str.replace('\d+', '') # for digits
df['TEXT'] = df['TEXT'].str.replace(r'(\b\w{1,2}\b)', '') # for words
df['TEXT'] = df['TEXT'].str.replace('[^\w\s]', '') # for punctuation
귀하의 조언에 감사드립니다. 코드는 실제로 오류없이 실행됩니다. 그러나'LemmaTokenizer() '이후의 함수는 더 이상 작동하지 않습니다. 가장 중요한 점은'token_pattern = r '\ b [a-zA-Z] {3,} \ b''이 비활성 상태가되어서 내 주제가 숫자와 구두점으로 가득 찼다는 것입니다. 한 단계에 모든 것을 통합 할 수 있습니까? 아니면 둘을 분리할까요? (그리고 숫자와 구두점을 미리 제거하십시오). – Rens
@Rens, 새 질문을 열고 작은 (3-5 행) 재현 가능한 샘플 데이터 세트와 코드를 제공하십시오. – MaxU