2017-04-15 14 views
1

'R', 'C'등과 같은 프로그래밍 언어의 이름이 들어있는 텍스트에 대해 CountVectorizer를 사용해야합니다. 그러나 CountVectorizer는 하나의 문자 만 포함하는 "단어"를 삭제합니다.사용자 정의 token_pattern에 대해 CountVectorizer fit-transform()이 작동하지 않습니다.

cv1 = CountVectorizer(min_df=2, stop_words='english') 
    tokenize = cv1.build_tokenizer() 
    tokenize("Python, Time Series, Cloud, Data Modeling, R") 

출력 :

아웃 [172] : [ '파이썬', '시간', '시리즈', '클라우드', '데이터', '모델링']

I 다음 'R'을 토큰으로 간주하도록 'token_pattern'을 조정하십시오.

cv1 = CountVectorizer(min_df=1, stop_words='english', token_pattern=r'(?u)\b\w\w+\b|R|C' ,tokenizer=None) 
    tokenize = cv1.build_tokenizer() 
    tokenize("Python, Time Series, Cloud, R ,Data Modeling") 

출력 : 아웃 [187] : [ '파이썬', '시간', '시리즈', '클라우드', 'R', '데이터', '모델링']

그러나 ,

cvmatrix1 = cv1.fit_transform(["Python, Time Series, Cloud, R ,Data Modeling"]) 
    cv1.vocabulary_ 

출력 준다 :

아웃 [189] { '구름'0 '데이터'1 '모델링'2 '파이썬': 3 '시리즈' : 4, '시간': 5}

,451,515,

왜 이런 일이 무엇입니까? '

답변

1

R이 삭제됩니다 는 정규식 대문자 토크 나이의 실제 입력이 낮은 경우에있을 것입니다 R을 캡처하는 것을 이유. 그 뒤에 그 이유는 pre-processor 그것을 토큰 화하기 전에 원래 문자열에 .lower() 함수를 호출한다는 것입니다 :

tokenize = cv1.build_tokenizer() 
preprocess = cv1.build_preprocessor() 
tokenize(preprocess("Python, Time Series, Cloud, R ,Data Modeling")) 

수익률 :

['python', 'time', 'series', 'cloud', 'data', 'modeling']