2017-04-15 7 views
1

'R'、 'C​​'などのプログラミング言語の名前を含むテキストでCountVectorizerを使用する必要があります。しかし、CountVectorizerは1つの文字だけを含む「単語」を破棄します。CountVectorizer fit-transform()がカスタムtoken_patternで機能しない

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

出力:

アウト[172]: [ 'Pythonの'、 '時間'、 'シリーズ'、 '雲'、 'データ'、 'モデル']

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]: [ 'Pythonの'、 '時間'、 'シリーズ'、 '雲'、 'R'、 'データ'、 'モデル']

しかし、 、

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

出力を与える:

OUT [189]: { '雲' 0 'データ' 1 'モデリング':2 'のpython':3 'シリーズ' :4、 '時間':5}

ですが、なぜでしょう? `

答えて

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'] 
関連する問題