###実現したいこと
分かち書きが既にされていて、単語の後に半角スペースが付いている、次の文書集合があるとします。
python
1text1 = "吾輩 は 、 猫 で ある 。 eos " 2text2 = "名前 は 、 まだ ない 。 eos " 3texts_list = [text1,text2]
このとき目標は、この文書集合から、考えうるすべての2gramを抽出することです。すなわち、今回の場合で言えば、次のような2gramたちを抽出したいです。
python
1['ある eos', 'で ある', 'ない eos', 'は まだ', 'は 猫', 'まだ ない', '名前 は', '吾輩 は', '猫 で', 'は 、', '、 猫', 'ある 。', '。 eos', 'ない 。', '。 eos']
###困っていること
句読点を含まずに2gramを抽出するのであれば、次のようなコードで得られます。
python
1>>> from sklearn.feature_extraction.text import CountVectorizer 2>>> vectorizer = CountVectorizer(analyzer="word",token_pattern="(?u)\b\w+\b",lowercase=False,ngram_range=(2,2)) 3>>> vectorizer.fit_transform(texts_list) 4<2x9 sparse matrix of type '<class 'numpy.int64'>' 5 with 9 stored elements in Compressed Sparse Row format> 6>>> vectorizer.get_feature_names() 7['ある eos', 'で ある', 'ない eos', 'は まだ', 'は 猫', 'まだ ない', '名前 は', '吾輩 は', '猫 で']
しかし、上のtoken_patternでは句読点単体を単語として含ませることができず、その原因として私の現段階での理解では、\bは\wと\Wの間の境界を表すが、「。」や「、」らの句読点は\wの中には含まれないため、これらの句読点が単語として認識されなかったのではないかと考えています。
句読点単体を単語としてみなしてngramを抽出するにはどうすれば良いのでしょうか?なお、sparse matrixを使いたいので、できれば、CountVectorizerを用いてngramを作成したいです。
###実行環境
OS:macOS Catalina
Python:3.7.6
scikit-learn:0.23.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/04 02:13
2020/10/04 02:16